Файловая система Linux. Все познается в сравнении

Наблюдали ли вы, Господа Линуксоиды, когда взращенный на Windows пользователь пытается найти логические диски в Linux? То еще развлечение. Итак, как вы, наверное, уже догадались, речь пойдет о файловой системе.

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

Итак, логические диски отсутствуют как класс. Файловая система — единая структура, которая начинается с /. Список поддерживаемых файловых систем ну ОЧЕНЬ велик. В него также входят и Windows-системы FAT и NTFS. Правда, если на FAT доступ у вас будет полный (чтение/запись), с NTFS пока проблемы (это связано с закрытым стандартом на NTFS Microsoft). Доступ на нее организован только в режиме чтения. Реализация доступа на запись находится пока лишь в тестовом состоянии (хотя и включено в ядро 2.6). Т.о. в Linux вы будите иметь доступ к вашим разделам Windows (чего нельзя сказать о Windows — для нее Linux-разделы не существуют — для решения этой проблемы есть множество специальных программ и даже плагин для TotalCommander'a). Итак, если вы хотите обмениваться файлами между системами, заведите себе небольшой раздел под FAT, куда вы сможете скидывать необходимые файлы из Linux и читать их из Windows. Вопрос о том, в какую систему форматировать Linux: разделы — вопрос философский. Однако известно, что журналируемые файловые системы(ext3) более устойчивы при работе. Отличие такой системы от нежурналирумой в том, что в ней все операции записываются сначала в специальный файл — журнал — и только после претворяются в жизнь. И если во время работы происходит сбой (выключение питания, например), данные не будут потеряны (вернее, вероятность такого неблагоприятного исхода уменьшается). Файловое дерево может иметь произвольную глубину, но каждый компонент в имени файла (здесь — полный путь к файлу) должен составлять не более 255 символов, а в отдельном имени должно быть не более 4095 символов. Следует оговориться, что сама файловая система не накладывает ограничений на имена. Ограничения накладываются системными вызовами (фактически ядром).

Файловая система состоит из множества частей. Для "сборки" используется команда mount. Для хранения списка смонтированных файловых систем существует файл /etc/fstab. Команда mount имеет множество параметров. Если вы при ручном вводе не указываете какие-либо из них, система пытается получить их из данного файла. Так, при загрузке системы происходит автоматическое монтирование разделов mount -a. Как вы, наверное, уже догадались, cd-rom и floppy также необходимо монтировать. Однако современные системы справляются с этим в автоматическом режиме, представляя эти устройства как часть корневой файловой системы. Демонтирование производится командой umount (полный синтаксис я не привожу — получить его можно набрав man mount или man umount). Если файловая система "занята", т.е. какой-либо процесс пишет или читает из файла (в файл), отмонтировать ее невозможно. Узнать о процессах, открывших файлы, можно так:
> fuser -mv /home

Эта команда выведет список номеров (PID) процессов, которые открыли файлы:
> fuser -mv /home
USER PID ACCESS COMMAND
/home root 1 .rce. Init

В колонке ACCESS указывается тип обращения к файлам:
f — файл открыт на чтение или запись;
с — к каталогу — текущий каталог процесса;
e — процесс в данный момент выполняет программу;
r — в файловой системе находится корневой каталог процесса;
m — процесс отображает в памяти файл или совместно используемую библиотеку.

Информацию о процессе по номеру (PID) можно узнать следующим образом:
> ps -fp 7243
UID PID PPID C STIME TTY TIME CMD
Zavr 7243 4417 0 18:19 pts/3 00:00:00 /bin/bash
fuser имеет еще несколько интересных ключей:
> fuser -v filename — информация об использовании конкретного файла filename;
> fuser -k /dir — убить все найденные процессы (используется с правами root).

Организация файловой системы — не самая сильная сторона Linux. Разные дистрибутивы организуют ее по-разному, стандартов наименования файлов как таковых нет, в общем способность находить нужное приходит только с опытом, к сожалению. Однако не стоит сразу же после установки системы пытаться перемещать/переименовывать созданные ингалятором каталоги. Дело в том, что когда вы будете пытаться устанавливать/удалять какие-либо программы, да и просто запускать их, они будут искать свои файлы на стандартных местах. Итак, перечислим основные каталоги системы и их назначение:

/boot — здесь хранится файл ядра — обычно имеет имя vmlinuz;
/bin — программы минимальной работоспособности системы;
/lib — библиотеки C;
/opt — вспомогательные программы;
/proc — образы выполняющихся процессов;
/root — начальный каталог root'а;
/mnt — сюда монтируются сменные носители (floppy, cd-rom, flash и др.);
/dev — каталог устройств (помните, о чем говорилось в начале статьи?);
/etc — каталог конфигурационных файлов (вы ведь знаете, что в LINUX НЕТ реестра?);
/tmp — каталог временных файлов;
/usr — каталог большинства стандартных программ и компонентов;
/var — каталог хранения логов, буферные каталоги;
/var/log — логи;
/home — каталог домашних директорий пользователей.

При установке рекомендуется создавать несколько разделов на диске (естественно, дополнительно, кроме раздела подкачки swap и корневого раздела). Соответственно для /usr, /var, /home. Так проще контролировать использование жесткого диска. В Linux есть несколько типов файлов (а вернее, их семь):

— просто файлы (создается прикладными программами, удаление > rm);
— каталоги (создание > mkdir, удаление > rmdir (rm -f));
— файлы символьных устройств (создание > mknod, удаление > rm);
— файлы блочных устройств (создание > mknod, удаление > rm);
— локальные сокеты (создание > socket, удаление > rm);
— именованные каналы (создание > mknod, удаление > rm);
— символически ссылки (создание > ln (-s — для символической ссылки), удаление > rm).

Ссылки бывают жесткие и мягкие. Жесткую ссылку невозможно отличить от файла, на который она указывает — для системы они идентичны. При удалении файла, на который есть несколько жестких ссылок, система не освобождает блоки до тех пор, пока существует хоть одна ссылка. Жесткие ссылки создаются > ln, удаляются > rm. Жесткие ссылки не могут указывать на файлы в других файловых системах. Символическая (или мягкая) ссылка позволяет указывать вместо имени файла его псевдоним. Разница между мягкими и жесткими ссылками в том, что жесткая ссылка указывает прямо на индексный дескриптор файла, а символическая указывает на файл по имени (ссылка и объект в данном случае являются разными объектами файловой системы). Для чего нужны ссылки? Ссылки похожи на ярлыки в Windows, соответственно и использование должно быть вам ясно. (Например, программа требует наличия файла в одном каталоге, а он в совершенно другом. Что делать? Создаем ссылку и наслаждаемся!) Каждый файл имеет свои атрибуты из девяти битов. Эти биты определяют, кто может читать, изменять и т.д. данный файл. Еще три бита влияют на выполнение файла. Еще четыре бита устанавливаются при создании файла и не должны изменяться. Просмотреть атрибуты файла можно с помощью команды > ls -l (для файлов) > ls -d (для каталогов). Например:
> ls -l /home/mentalzavr/1.jpg
-rw-r--r-- 1 zavr mentalzavr 6001 Апр 23 14:50 /home/mentalzavr/1.jpg

Всего система хранит около 40 информационных полей. В том числе и последнее время изменения атрибутов. Хотя это поле и называется временем последнего изменения (c(change)time), что ошибочно.

Разберем вывод последней команды:
— Тип файла и режим доступа к нему — дефис значит, что это обыкновенный файл.
— rwxr-xr-x — три набора битов режима. Порядок следующий: владелец, группа, другие пользователи. Соответственно r — чтение, w — запись, x — выполнение. Значит, на данный файл владелец имеет полные права, все остальные — право на чтение и выполнение.
— Следующее поле — счетчик ссылок на файл. Любой каталог имеет минимум две жесткие ссылки: одну из специального файла ".", а вторую — из корневого каталога. Символические ссылки не учитываются.
— Далее идут поля с владельцем и группой. (здесь zavr mentalzavr).
— После этого — размер файла в байтах и дата последней модификации.

Для файлов устройств результаты будут несколько иные — читайте документацию:-).
Поговорим теперь об изменении прав доступа к файлам/каталогам. Это делается с помощью команд chmod, chown, umask:
Chmod — право изменять права (простите за каламбур:-)) есть лишь только у владельца файла и суперпользователя. Режим доступа можно указывать как в виде восьмеричного числа, так и виде мнемообозначения.
Chown — смена владельца и группы.
Umask — служит для задания стандартных прав доступа.

Выше я приводил только консольные команды для работы с файловой системой. Однако сейчас существует множество файловых менеджеров, которые здорово помогают в работе. Во всех графических оболочках (будь то KDE или GNOME) существует стандартный файловый менеджер. Однако рекомендую использовать белее удобные приложения. Рассмотрим два из них.

Midnight Commander. Представляет собой консольный менеджер а-ля Far. Имеет множество дополнительных функций, кроме стандартных для работы с файлами. Это, к примеру, работа с ftp-серверами, просмотр файлов с подсветкой синтаксиса и др. Скачать менеджер можно здесь:
сайт . Однако он сейчас входит в большинство дистрибутивов как стандартное приложение (запускается командой mc).

И вторая программа — krusader (качайте здесь: сайт Умеет работать как с локальными файловыми системами, так и с сетевыми
(SAMBA, FTP). Естественно, архивирование/разархивирование входит в список функций обоих менеджеров. Как видно из скриншота, программа похожа на бессмертный TotalCommander. Более детальный обзор коммандеров и их возможностей оставим в ведении их домашних сайтов:-).

Всего вам, Господа Линуксоиды, и не читайте на ночь много исходного кода:-).

Спичеков Александр, aka MentALzavR, zavr6@mail.ru, UIN#282631844


Компьютерная газета. Статья была опубликована в номере 17 за 2005 год в рубрике soft :: ос

©1997-2024 Компьютерная газета