Настройка и работа в Linux

         

Что нужно знать о файловой системе Linux


Подразумевается - что нужно знать простому, хотя и полагающему себя профессиональным, пользователю. И потому особых подробностей здесь не ищите: их можно обнаружить в толстых книгах про Linux или в замечательной статье Виктора Хименко "Файлы, файлы, файлы" (Мир ПК, 2000, ##2, 3).

А пользователю нужно в первую очередь осознать отличия файловой систему Linux от привычных систем DOS и Windows.

Linux позволяет работать с великим множеством файловых систем, как локальных, так и сетевых. Однако у него есть и своя, родная, файловая система, носящая название ext2fs. Построена она предельно просто и логично: все в ней является файлами - данные, программы, каталоги, устройства (для примера - последовательные или параллельные порты). И потому файлы разделяются на типы:

  • обычные файлы;
  • каталоги;
  • файлы устройств;
  • ссылки.

Обычные файлы - это, во-первых, исполнимые двоичные файлы (типа файлов *.exe или *.com, но не привязанные к какому-либо расширению);во-вторых, ASCII-файлы, содержащие простой текст (не обязательно романического содержания - сюда относится и подавляющее большинство системных конфигурационных файлов); в третьих, файлы данных, созданные како-либо программой (текстовым процессором, графическим редактором или электронной таблицей, например) в собственном формате. Впрочем, все это пользователю DOS/Windows понятно.

Каталоги - это тоже файлы, содержащие информацию о каталогах: рекурсия - широко распространенный и любимый прием в мире Unix-систем (достаточно вспомнить расшифровку аббревиатуры проекта GNU - GNU's Not Unix). Каталоги объединяются в иерархическое дерево, начинающееся, как и положено, с корня (/ - root, корневой каталог) и растущее ввысь и вширь; любые накопители, как монтируемые при загрузке (жесткие диски, скажем, и их логические разделы), так и подключаемые в процессе работы (CD ROM, Zip, дискеты) - не более чем ветви дерева каталогов.

Файлы устройств - понятие для Windows-мигранта непривычное. Это нужно просто запомнить: все физические устройства, присутствующие в системы (порты ввода/вывода, накопители разного рода, звуковые устройства и прочие), с точки зрения ext2fs являются файлами. Устройства эти могут быть блочными (например, накопители) или символьными (порты ввода/вывода), но это - уже подробности.

Наконец, ссылки (links) - это некий аналог "ярлыков" в Windows или "теней" в OS/2. Ссылка может быть прямой, или жесткой (hardlink, или, часто, link просто) и символической (symlink). Первые могут указывать на любой файл в файловой системы, тогда как вторые обязаны находиться в одном дисковом разделе.

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

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

Каковы следствия этого для конечного пользователя? Первое - имя файла, включая и расширение, не играет в Linux такой сакральной роли, как в DOS/Windows. Если в последней сменить расширение в файле, скажем, *.psd на любое иное - считать его Photoshop уже не удастся. В Linux же в общем случае файлу данных любого типа может быть приписано любое расширение (или его может не быть вовсе): на понимание его породившей программой это никак не отразится. Более того, файл может иметь несколько расширений (то есть групп знаков, разделенных точками): типичный пример - архивный компрессированный файл *.tar.gz.

Правда, некоторые программы (скажем, графические редакторы или офисные пакеты) все же требуют, чтобы файл формата TIFF имел расширение *.tif, и т.д. Но это - извращение генеральной линии. И вызывается тем, что имя файла неявно передается программе, то есть запускающей ее команде, в качестве одного из аргументов.

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

Следствие третье - удаление файлов в Linux происходит совершенно иначе, чем в DOS/Windows. Где, как известно, удаленный обычными средствами файл продолжает физически существовать до тех пор, пока на его место не записана новая информация. На чем и основаны программы восстановления ошибочно удаленных данных, вроде прославившей Нортона unerase.

В Linux файл (то есть inode) удаляется автоматически, когда становится недоступным для системы. Это происходит тогда, когда удалена последняя ссылка на него (а имя файла, удаляемое средствами командной строки или файлового менеджера - и есть такая ссылка) и закрыта последняя обращающаяся к нему программа.

То есть: если мы удалим все файлы во всех каталогах всех уровней вложенности (а средства командной строки дают возможность сделать это играючи, и даже подтверждения не запросят) - мы будем по прежнему существовать в работающей системе. И все открытые файлы данных будут существовать, могут быть изменены, записаны, переименованы и т.д. Все это исчезнет только после перезагрузки системы. Но зато - безвозвратно: никаких unerase, undelete и прочих либеральностей в Linux не возможно в принципе.

Правда, такая графическая среда, как KDE, имеет аналог мусорной корзины Windows. Но это - просто отдельный каталог, куда помещаются файлы, полагаемые ненужными, чтобы глаза не мозолили. И откуда их можно даже не восстановить в смысле DOS, а просто скопировать обратно.

Возвращаясь к имени файла. Поскольку оно в Linux не столь свято, как в DOS/Windows, и ограничений на него много меньше. Так, абсолютно запрещенные к использованию символы - только / и \. Правда, некоторые другие специальные символы, такие, как !, @ и прочие из верхнего ряда клавиатуры, за исключением _, всякого рода скобки и кавычки, также не рекомендуются к использованию в именах файлов, особенно - в начальной позиции, но это, обычно, требование оболочки командной строки, а не системы. максимальная

Максимальная длина имени файла (включая и любое количество "расширений") - 255 знаков. А максимально возможная длина пути - 4096, что практически можно считать бесконечным. В отличие от Windows, где при стремлении программ инсталлироваться глубоко в недра директории Programs Files, ограничение на длину пути в 256 знаков становится реальностью.

А вот структура каталогов в Linux, напротив, жестко фиксирована, хотя в деталях и может разниться от дистрибутива к дистрибутиву. Конечно, обладая правами суперпользователя, ее можно изменить. Но - делать это ни в коем случае не следует - в результате система может просто утратить работоспособность.

Как правило, после инсталляции системы в корневом (/, root) каталоге присутствуют:


  • /bin - каталог для исполнимых ( иначе называемых бинарными, binary) файлов общего назначения; здесь помещаются оболочки командной строки, общие команды управления файлами и их архивации, традиционные текстовые редакторы типа vi, и т.д.; именно каталог /bin в первую очередь просматривается на предмет поиска введенной с клавиатуры команды;
  • /boot, как явствует из названия, содержит файл образа ядра, с которого загружается система;
  • /dev - каталог для файлов устройств;
  • /etc - каталог для конфигурационных файлов общего пользования;
  • /home включает в себя домашние каталоги пользователей, со всеми их программами, личными конфигурационными файлами (имеющими в сеансе этого пользователя предпочтение перед общими файлами конфигурации) и данными;
  • /lib - каталог для общесистемных библиотек (аналогов DLL в Windows);
  • /mnt -каталог для монтирования сменных накопителей (вроде дискет) или временно подключаемых файловых систем (например, FAT-раздела диска);
  • /proc - виртуальная файловая система для чтения информации о процессах;
  • /root - аналог $home для суперпользователя;
  • /sbin содержит системные двоичные файлы, используемые для системного администрирования;
  • /tmp, понятно, включает в себя всякого рода временные файлы; как правило, этот автоматически очищается при перезагрузке или через некоторое время;
  • /usr - каталог для прикладных пользовательских программ со всеми их компонентами - исполнимыми, конфигурационными и разделяемыми файлами (/usr/bin, /usr/etc и /usr/share, соответственно), библиотеками (/usr/lib), документацией в различных форматах (/usr/doc, /usr/man) и т.д.; важный подкаталог /usr/local предназначен для программ, не входящих в дистрибутив стандартно - сюда по умолчанию инсталлируются компилируемые из исходных текстов приложения;
  • /var - каталог для варьирующих файлов, всякого рода системных журналов, почтовых и принтерных спуллингов и т.д.


Кроме того, в дереве могут присутствовать и некоторые другие каталоги, например, /opt - для опциональных компонентов, или /misc - для всего, что не подпадает под приведенные определения.

В общем, назначение каталогов и логика их организации понятна, если затратить некоторое время на изучение их содержимого. Трудности, скорее всего, могут возникнуть с каталогом /mount, поскольку ни DOS, ни Windows не имеют даже отдаленных аналогов этого понятия.

Когда шел разговор об инсталляции системы и создании дисковых разделов, вскользь упоминалась необходимость задать для них точку монтирования. Скажем, для созданного нами раздела под пользовательские данные такая точка определялась как /home. Тем самым мы включили этот (или любой другой) дисковый раздел в структуру дерева каталогов Linux. Или, иными словами, смонтировали его в файловую систему Linux.

Разделы жесткого диска с файловой системой ext2fs обычно монтируются автоматически, при загрузке системы. Часто так же поступают и с FAT-разделами. А в Linux Mandrake (и некоторых других дистрибутивах) предусмотрено автоматическое монтирование и для сменных накопителей - дискет и CD ROM. Вот под них-то и отведен каталог /mnt.

А вообще, что и как монтируется - описано в конфигурационном файле /etc/fstab, в котором в каждой строке указывается (слева направо) имя устройства, точка его монтирования, тип файловой системы, условия монтирования (по умолчанию, автоматическое, пользователем и т.д.) и параметры резервного копирования. Файл этот может выглядеть примерно так: /dev/hda1 /mnt/DOS_hda1 vfat user,exec,conv=auto 0 0 /dev/hda2 / ext2 defaults 1 1 /dev/hda3 swap swap defaults 0 0 /dev/hda4 /home ext2 defaults 1 2 /mnt/floppy /mnt/floppy supermount fs=vfat,dev=/dev/fd0 0 0 none /proc proc defaults 0 0 none /dev/pts devpts mode=0620 0 0 /mnt/cdrom /mnt/cdrom supermount fs=iso9660,dev=/dev/cdrom1 0 0



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

Если такая опция не поддерживается, сменные носители требуется монтировать вручную. Для этого дается команда mount с именем устройства и точкой монтирования в качестве аргументов. На пример, с помощью mount /dev/hdc /mnt/cdrom

монтируется CD ROM, подключенный в качестве мастера ко второму каналу IDE; содержимое его после этого можно будет увидеть в каталоге /mnt/cdrom. А перед извлечением сменного носителя (во избежание тяжких последствий, о которых - в разделе техники безопасности), его следует размонтировать командой umount (обращаю внимание - без буквы n, вопреки логике) с точкой монтирования в качестве аргумента. Разумеется, при этом обращений к файлам на носителе быть не должно.

Однако для пользователя наиболее важен каталог /usr (кроме его домашнего, разумеется). Если просмотреть его внимательно, можно обнаружить в нем многочисленные повторения. Например, каталоги /usr/X11R6/bin и /usr/bin/X11 кажутся идентичными по содержанию, так же как /usr/X11R6/lib/X11 и /usr/lib/X11. Возникает естественное желание стереть излишки для освобождения дискового пространства.

Делать этого не нужно: система не дура, и ничего в ней не происходит зря. Поскольку содержимое /usr/X11R6/bin и /usr/X11R6/lib/X11 - не более, чем символические ссылки на файлы из соответствующих раздов каталогов /usr/bin и /usr/lib. Почему?

Linux, как говорилось во введении - Unix-подобная система, то есть полный функциональный аналог Unix. И, теоретически рассуждая, любая программа для любой версии Unix должна работать и в Linux. В чем часто (хотя и не всегда) можно убедиться на практике, если скомпилировать эту программу из исходных текстов. Так вот, Unix-системы имеют несколько различающиеся структуры каталогов. И, соответственно, пытаются искать необходимые им компоненты (вроде библиотек, шрифтов и прочего) по различным путям. Чтобы предусмотреть это, такие и дублируются в виде ссылок везде, где в этом может возникнуть необходимость.

Впрочем, даже если желание стереть эти ссылки будет непреодолимым, выполнить его в режиме обычного пользователя не удастся без дополнительных манипуляций. А некоторые каталоги (например, /root) не удается даже просмотреть. Потому что все файлы в Linux (а все, что есть в Linux, как говорилось, - это файлы) имеют еще одно непременное свойство (также зафиксированное в inode) - права доступа.

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

А права эти умеют быть двух родов - права принадлежности и права действия. Первые определяются для владельца файла (owner), группы пользователей (group) и всех прочих (other). В отношении же действия существуют права на чтение (read), изменение (или запись, write) и исполнение (execute).

Владелец файла - это пользователь, создавший его или скопировавший. По умолчанию он обычно (хотя и не всегда) получает на него все права. Которые подразумевают возможность просмотреть его, модернизировать и записать изменения, а также - исполнить; исполнение для одиночного файла - это возможность запуска бинарной программы или скрипта, для каталога - возможность перейти в этот каталог и просмотреть содержимое. Единственное, чего не может владелец - изменить права принадлежности, то есть сделать владельцем своих файлов дядю Петю: это - привилегия исключительно администратора.

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

Наконец, кто такие прочие - это ясно. Они обычно имеют право (и могут) прочитать файл, но не изменить или выполнить его.

На протяжении всего предыдущего повествования неоднократно упоминался всемогущий суперпользователь, именуемый в народе root (не путать с каталогом /root, который есть просто его домашний каталог), root-оператор, администратор и тому подобными титулами, подчеркивающими его величие и могущество. Настало время рассказать подробнее, кто это такой.

Суперпользователь - это администратор системы, ответственный за ее настройку и поддержание работоспособности. То есть, скорее всего, это опять же ваша скромная персона. Однако в этой ипостаси ваши права коренным образом отличаются от ваших прав в ранге пользователя. В частности, как root вы имеете все права действия для всех файлов системы. В том числе - и право, например, запретить самому себе как пользователю читать собственные файлы (своя рука - владыка). Поскольку в этом качестве вы можете сменить не только права действия, но и права принадлежности: назначить владельцем ваших пользовательских файлов не только дядю Петю с соседнего двора, но и самого же себя как суперпользователя, запретив их чтение всем, кроме владельца...

Впрочем, вы всегда в состоянии поменять ситуацию на обратную. Для этого не нужно даже завершать свой пользовательский сеанс и начинать новый, от лица суперпользователя. Достаточно в консоли или окне терминала набрать в командной строке команду su (аббревиатура понятна? - это тот же superuser) и ввести пароль администратора: на некое время вы выступите в его качестве. Ну а после завершения всех потребных действий не забудьте вернуться в обычный пользовательский режим командой exit...

Так что если вам вдруг захотелось послушать музыку, запустив собственноручно сделанный файл mpeg, а в ответ вы получаете сообщение, что права такого не имеете (permission denied) - не нужно поминать родных создателей Linux. А следует внимательно просмотреть каталог /dev на предмет прав доступа к аудиоустройства, владельцем которых является суперпользователь: возможно, прочие просто не имеют прав исполнения для соответствующих файлов. Выполните целительное действо, описанное в предыдущем абзаце - и наслаждайтесь музыкой в свое удовольствие...

Надеюсь, что с правами доступа к вновь созданным файлам все более или менее ясно. Несколько сложнее - с правами на файлы скопированные. Обычно вы являетесь владельцем всех файлов , расположенных в вашем домашнем каталоге по адресу /home/имя_рек, сокращенно обозначаемому в оболочке bash как $home. И, соответственно, располагаете в отношении их всеми правами. Но бывают и исключения.

Например, вы могли скопировать некие файлы в каталог $home в то время, когда по каким-либо причинам исполняли роль суперпользователя. В этом случае последний автоматически будет назначен их владельцем, со всеми вытекающими последствиями.

Во-вторых, ваши права ущемляются при копировании файлов с CD ROM. В DOS/Windows, как вы помните, такие файлы автоматически получают атрибут READ ONLY. В Linux же на них по умолчанию устанавливается запрет на запись для всех, включая и владельца.

Еще забавнее, если с помощью файлового менеджера с CD ROM копируются целые каталоги и подкаталоги. В этом случае родительский каталог копируется на винчестер, но - без всякого содержимого. Поскольку для него автоматически устанавливается запрет на запись. Правда, это свойственно не всем файловым менеджерам, но - многим.

Наконец, при копировании с носителя файловой системы FAT (дискового раздела, сменного винчестера, дискеты или Zip) наследуются атрибуты исходных файлов: если последние были помечены как READ ONLY, целевые файлы будут автоматически закрыты для записи, в том числе - и для их нового владельца.

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

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


Содержание раздела