пятница, мая 19, 2006

From Windows to Linux

Эти записки предназначаются для людей, которые привыкли пользоваться Windows, но хотят перейти на Linux. Это не учебник по Linux, но я постараюсь дать краткое описание основных отличий, без понимания которых практически невозможно работать в Linux.

Первое отличие, которое я хотел бы отметить - документированность. В отличие от Windows, где справка своей краткостью предлагает вам купить толстенную книгу, а книга обилием воды призывает пройти платные курсы, Linux поставляется с полной документацией. К сожалению, большая часть этой документации - на английском языке. Русская документация зачастую входит в Linux, кроме того, ее почти всегда можно найти в Интернете, но, опять же к сожалению, зачастую она устарела по сравнению с англоязычным оригиналом.

Главный источник документации - команда man. Если вы работаете в консоли, достаточно набрать

man имя-топика,

чтобы получить справку по нужной теме. В случае, если вы работаете в графическом окружении, нужно из меню вызвать эмулятор терминала (например, xterm), и в нем набрать указанную выше команду. Прежде всего предлагаю изучить руководство по самой команде man, набрав "man man".

Кроме того, по Linux и связанным вопросам существует много бумажных и электронных книг. Например, после прочтения этой заметки я посоветовал бы начинающему пользователю начать читать книгу Алексея Федорчука, доступную на http://linuxcenter.ru под названием "Введение в POSIX ивизм", или ее бумажную версию, вышедшую недавно под названием "Доступный UNIX: Linux, FreeBSD, DragonFlyBSD, NetBSD, OpenBSD".

Далее я постоянно буду ссылаться в скобках на страницы man, например: (man hier).

Следующее отличие - устройство файловой системы. В Windows у вас есть несколько носителей информации, перечисленных в окне "Мой компьютер", и на каждом из них есть своя файловая система - система вложенных папок (директорий) и файлов в них. В Linux существует единая файловая система, здесь нет такого понятия как "Диск C:". Графически файловую систему удобно представлять как дерево. Корень этого дерева - это корневая директория файловой системы, она содержит в себе директории bin, usr, etc и прочие, те, в свою очередь - еще директории и файлы…

Разделителем директорий в пути в Linux служит слэш (/), а не бэкслэш (\), как в Windows. Корень файловой системы сам по себе обозначается как "/". Такким образом, если в Windows типичный путь выглядит как "C:\Windows\System", то в Linux - "/usr/local/bin". Нужно заметить, что файловая система Linux чуствительна к регистру символов, так что "file" и "FiLE" - это имена разных файлов.

Еще одна особенность файловой системы Linux - то, что устройства, подключаемые к компьютеру, предстают файлами, расположенными в директории /dev.

Каждый носитель информации (жесткий диск или usb-флэш) содержит собственную файловую систему (ФС) со своей структурой директорий. Чтобы к этой ФС можно было получить доступ, она должна быть подключена к единой файловой системе Linux, при этом нужно указать, к какой из ветвей дерева нужно осуществлять подсоединение. Например, если на флэшке есть файлы "file1.doc", "file2.doc" и директория "dir" с файлом "indir" внутри, то после подсоединения ФС флэшки к директории /mnt/flash мы будем иметь файлы /mnt/flash/file1.doc, /mnt/flash/file2.doc, /mnt/flash/dir/indir. Операция подсоединения называется монтированием, и выполняется с помощью команды mount (man mount). Перед тем, как физически отсоединить носитель (выдернуть флэшку, например), необходимо произвести действие, обратное монтированию - размонтирование, иначе можно потерять данные на нем. Размонтирование производится с помощью команды umount.

Если у вас есть несколько разделов диска, или несколько дисков, с которыми вам нужно работать постоянно, то, чтобы эти диски монтировались при старте системы автоматически, нужно прописать их в файле /etc/fstab (man fstab).

Следующее отличие касается установки программ. В Windows программа, как правило, при установке кладет все свои файлы в c:\program files\имя-программы, и, возможно, еще в c:\windows или куда-нибудь еще. В Linux файлы программ раскладываются по директориям не по принадлежности программам, а по их предназначению. Так, все исполнимые файлы самых необходимых программ лежат в /bin, все конфигурационные файлы - в /etc, библиотеки - в /lib и т.д. При этом программы, входящие в состав дистрибутива Linux, но не являющиеся необходимыми для запуска системы, кладут свои файлы в иерархию /usr (/usr/bin - исполнимые файлы, /usr/lib - библиотеки, и т.д). Программы, не входящие в состав дистрибутива и установленные пользователем, располагаются в /usr/local (/usr/local/bin и т.д). На расположение и назначение всех этих директорий существует стандарт - Filesystem Hierarchy Standart (FHS). Он описан в man hier.

Четвертое различие относится к системе безопасности. В Windows имеются лишь минимальные средства разграничения прав доступа, и по ряду причин чаще всего они не используются вовсе. В Linux это весьма мощные средства, и используются они постоянно. В системе есть некоторое количество пользователей, различающихся по имени (login) и паролю (password). Каждый пользователь может входить в одну или несколько групп. Обычный пользователь может изменять файлы только в своей домашней директории (home), в частности, он не может устанавливать и удалять программы. Благодаря этому обычный пользователь ни случайно, ни специально не может повредить всю систему в целом или данные других пользователей. Но один из пользователей отличается от остальных. Это root - системный администратор. Ему по определению разрешено все. Именно поэтому категорически не рекомендуется работать в системе под именем root. Представляться системе root-ом нужно только для проведения административных мероприятий: установки и удаления программ, форматирования дисков и тому подобных задач.

Далее, в Linux графический интерфейс не является неотъемлемой частью операционной системы, как в Windows. Графический интерфейс - все эти окна, иконки и курсоры - обеспечивается отдельным приложением, работающим наравне с остальными. Поэтому сбой в работе графической системы не влечет за собой сбой в работе ОС в целом. (за подробностями о работе графики в Linux см. man X, man Xserver).

Исторически в Linux основным режимом работы был режим работы с командной строкой. При этом у вас нету никаких окошек и иконок, а есть приглашение командной оболочки и мигающий курсор. Вы набираете на клавиатуре команды, подтверждая их нажатием Enter, а компьютер выполняет их и вновь выдает приглашение набрать команду. При этом доступны автодоплнение команд и их аргументов, а также полная справка о том, как работает каждая команда - по команде "man <имя-команды>". Программа, которая с вами непосредственно общается, называется командной оболочкой (shell). Командной оболочкой по умолчанию является bash, поэтому за подробностями о работе с командной строкой обращайтесь к man bash.

Каждая команда имеет вид:

$ <имя-команды> <опции> <параметры>.

Здесь "$" - это приглашение командной строки, его печатает оболочка. Имя команды - это одно слово, то есть последовательность английских букв и цифр. Оно указывает, что нужно сделать, то есть это глагол в языке общения с командной оболочкой. Имена команд обычно являются сокращениями от соответствующих английских глаголов, например "cp" - от "copy", копировать.

Опции бывают "короткие" и "длинные". Короткие опции выглядят как одна английская буква (или цифра) с дефисом впереди, например, "-f". Длинные опции выглядят как английское слово, предваренное двумя дефисами, например, "—force". Обычно каждая короткая опция имеет длинный аналог (то есть существует "длинная" опция, делающая то же самое), но не наоборот. Длинные опции проще запоминать, зато короткие опции быстрее набирать. Опции задают режимы работы команды - например, опция "-f" (или "—force", что то же самое) команды cp указывает команде переписывать файлы при совпадении имен. Нектоторые опции имеют аргументы - те пишутся через пробел или через знак равенства от опции, например "—backup=numbered". Таким образом, опции - это дополнения в языке командной строки. Короткие опции можно комбинировать, например, "cp -b -d" можно сократить до "cp -bd".

Параметры задают объекты, с которыми должна работать команда - например, файлы, которые нужно копировать. Таким образом, параметры - это существительные.

Опции и параметры у каждой команды свои, среди них могут быть как обязательные, так и необязательные. Все они описаны в man <имя-команды>.

Если вы работаете в режиме командной строки, то графическую оболочку обычно можно запустить командой startx. Существуют программы графического режима, позволяющие работать с командной строкой в отдельном окне. Такие программы называются эмуляторами терминала. Самой популярной из них является xterm.

Осталось, пожалуй, только привести краткий список наиболее часто используемых команд.

DOS Linux Примечание
ATTRIB (+-)attr file chmod file полностью отличаются
BACKUP tar -Mcvf device dir/ то же самое
CD dirname\\ cd dirname/ почти тот же самый синтаксис
COPY file1 file2 cp file1 file2 то же самое
DEL file rm file будьте осторожны, нет восстановления файлов
DELTREE dirname rm -R dirname/ то же самое
DIR ls не полностью похожий синтаксис
DIR file /S find . -name file полностью отличаются
EDIT file vi file я думаю, вы не полюбите его (а зря!)

jstar file выглядит как редактор в dos
EDLIN file ed file забудьте его
FORMAT fdformat,

mount, umount достаточно отличный синтаксис
HELP command man command, та же философия

info command
MD dirname mkdir dirname/ почти тот же самый синтаксис
MORE file less file намного лучше
MOVE file1 file2 mv file1 file2 то же самое
NUL /dev/null то же самое
PRINT file lpr file то же самое
PRN /dev/lp0,

/dev/lp1 то же самое
RD dirname rmdir dirname/ почти тот же самый синтаксис
REN file1 file2 mv file1 file2 не для множества файлов
RESTORE tar -Mxpvf device другой синтаксис
TYPE file less file намного лучше
WIN startx на разных полюсах!

Last updated 19-May-2006 00:56:04 YEKST

цитаты о программировании

Если программист признан незаменимым, то лучшее, что можно сделать -- избавиться от него как можно скорее.


Некоторое время назад, когда Cobol был светлой надеждой программистов, часто можно было слышать о возможности того, что админис
траторы смогут читать программы. Никто не принимал этого всерьез. Даже программисты не читают программ.


Есть программы, которые следует выбросить еще до использования.


Требовать и эффективности, и гибкости от одной и той же программы се равно, что искать очаровательную и скромную жену. по-видим
ому, нам следует остановиться на чем-то одном из двух.


Если программист работает с языком, в котором разрешены только три индекса, то вряд ли мы обнаружим больше трех.


Собрать кучку людей для работы над одной проблемой -- не значит сделать их коллективом.


Конструктор системы страдает от того, что чем лучше его система делает свое дело, тем меньше пользователи знают о ее существова
нии.


Каждая программа имеет соответствующий уровень продуманности и запутанности в зависимости от цели, для которой она применяется.


Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, ца
рят красота и совершенство.


Для локализации ошибки, однако, желателен человек, обладающий упорством тещи и стадными инстинктами крысы.


Если плохой работник ненавидит свои инструменты, хороший работник ненавидит плохие инструменты. Результаты труда рабочего в зна
чительной степени определяются его инструментами.


Ни один ремесленник, который стремится к вершинам своей профессии, не примет негодных инструментов; и ни один производитель, ко
торый ценит качество работы, не будет упрашивать ремесленника принять их.


Есть эффект отсутствия устной формы: это затруднения, которые мы испытываем, говоря о языке программирования без доски и мела л
ибо карандаша и бумаги. В каждой программистской лаборатории должны быть доска, мел и достаточное количество тряпок.


Программирование, как и любовь -- одно слово, за которым скрывается бесконечное множество занятий.


Очень важно не прерывать вопросов. Любопытство имеет свое право на существование.
(Альберт Эйнштейн)

В некоторых диалоговых системах пользователь может уберечь свою программу от понижения в приоритете, играя с клавишей переключе
ния регистров в то время, пока он размышляет.


Специалист -- человек, который избегает мелких ошибок, неуклонно двигаясь к глобальному заблуждению.


В природе программирования лежит то, что нет соотношения между размерами самой ошибки и проблем, которые она влечет.


Когда программист испытывает затруднения при поиске ошибки, это значит, что он ищет не там, где следует.


Документация -- касторовое масло в программировании: Руководители полагают, что это хорошее средство, ибо программисты так ее н
енавидят.


Мозг человека обычно загружен лишь на 10
своей мощности; остальное резерв для оперaционной системы.


Мы стоим на пороге новой эры, эры, ставшей возможной благодаря революции, совершенной вычислительной машиной. Стоя на пороге, м
ы колеблемся в выборе пути золотому веку свободы или к темному веку тирании, причем и тот, и другой век может превзойти все, ч
то когда-либо видел мир. Возможно, никакие отдельные усилия не скажутся на результате, но мы никогда не должны оставлять попыто
к, ибо иначе результат наверняка окажется тиранией.


Проект (OS/360) был закончен с опозданием, система потребовала большего объема памяти, чем планировалось, затраты значительно п
ревысили предварительные оценки, вся система начала работать как следует только после создания нескольких вариантов, последовав
ших за первым.


Корабль на мели -- моряку маяк.
(Голландская пословица.)


Неподатливость проблемы (срыва планов разработки систем) вызывает всеобщее изумление, и разобраться в ее природе непросто.


Вычислительная машина обладает притягательной силой биллиарда или музыкального автомата, доведенных до логической завершенности
.


Программист, как поэт, работает почти непосредственно с идеями.


Вы печатаете на клавиатуре заклинание, и вот экран дисплея оживает, показывая объекты, которых не было и могло не быть никогда
. Но если хоть один символ, один пробел в магической формуле не находится строго на своем месте, волшебство не работает.


Во всех областях творческой деятельности формальный объем прав никогда не согласуется с ответственностью.

Выдавать глобальные идеи то удовольствие; искать сволочные маленькие ошибки от настоящая работа.


Как только проект окончательно принят, он становится устаревшим в смысле своих концепций.


Хорошая кухня требует времени. Если вы готовы подождать, мы обслужим вас гораздо лучше, и вы получите большее удовольствие.
( меню ресторана Антуан, Новый Орлеан )


Все программисты -- оптимисты: "На этот раз программа обязательно пройдет!", "Я только что нашел последнюю ошибку!".


Большой программистский проект включает в себя много отдельных задач, каждая из которых может зависеть от окончания другой . Ве
роятность того, что каждая задача будет идти нормально, становится исчезающе малой.


Стоимость проекта действительно зависит от числа людей и числа месяцев, но его успешность -- нет. Следовательно, человеко-месяц
как единица измерения объема работы является опасным и вводящим в заблуждение мифом.


Чтобы выносить ребенка, нужно девять месяцев, независимо от того, сколько женщин будет к этому привлечено.


Когда кажется, что все уже работает, все объединено в систему -- вам еще осталось работы на четыре месяца.


Отметим, что настойчивость руководителя может определить график выполнения задания, но не в состоянии определить срок его дейст
вительного завершения.


Если за две минуты омлет еще не готов, у заказчика два выбора подождать или съесть его сырым .


Закон Брукса: если программистский проект не укладывается в сроки, то добавление рабочей силы только задержит его окончание.


Концептуальное единство является самым важным соображением при проектировании системы.


Система программирования предназначена для того, чтобы облегчать пользование вычислительной машиной.


Ни функциональность, ни простота сами по себе не гарантируют высокого качества проекта.


Добавляя малое к малому, получишь большую кучу.
( Овидий )


Он сядет здесь и будет распоряжаться: сделайте то!, сделайте это! о абсолютно ничто не сдвинется с места.
( Г.Трумэн, "О президентской власти" )


Никогда не выходи в море с двумя хронометрами: бери один или три.


Я в этом разбираюсь. Я знаю, что нужно делать о каждый раз, когда я пытаюсь заняться технической проблемой, какой-нибудь идиот
требует, чтобы я принял решение насчет грузовика, или телефонов, или другой такой же чертовщины.
( Роберт Хайнлайн, MAN WHO SOLD THE MOON
Проблема том, что все, кто здесь работал, и я в том числе, хотели сделать действительно чистую работу, только они не хотели чи
стой работы, они хотели много быстро.


Генерация случайных чисел лишком важный вопрос, чтобы оставлять его на волю случая.


Я не знаю причины, по которой нам не следует этого делать, но, возможно, позже мы придумаем какую-нибудь.


шибка? Это не ошибка, это системная функция.


Компьютер делает из всех нас дураков. Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго вынос
ить программирование.


У компьютера всегда есть оправдание; у программиста -- никогда.


Пользователь не знает, чего он хочет, пока не увидит то, что он получил.


Мы склонны винить физическую среду в большинстве наших затруднений, ибо эта среда не принадлежит нам в той же мере, что идеи, и
наша гордость определяет наше суждение.


Работа не может быть выполнена должным образом, если нет необходимых инструментов.
( PROCEEDINGS OF THE IEEE, 2/78, р.174 )


Я слышу и забываю.
Я вижу и запоминаю.
Я делаю и понимаю.
( Конфуций )


На пустом диске можно искать вечно.


Я пишу все свои критические программы на ассемблере, а комедийные а фортране.

Бесполезно придумывать защиту от дурака -- ведь дураки так гениальны.


Интуитивно ясно, что наличие ошибки в программе не скажется на результатах тестирования, если содержащая ошибку программная ком
понента при тестировании не выполнялась.


Если отладка процесс удаления ошибок, то программирование должно быть процессом их внесения.
(Э. Дейкстра)


Вы уже дошли до состояния, когда у вас нет времени, чтобы разрешить те проблемы, которые отнимают у вас все время???