Библиотека сайта rus-linux.net
Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
Назад | Общие принципы | Вперед |
Файловая система
Файловая система всех POSIX систем представляется
иерархией единого дерева от корня, корень имеет имя /.
Любой объект (каталог, файл, устройство, ...) в файловой системе имеет
своё путевое имя. Путевое имя объекта может быть указано как
абсолютное — от корня файловой системы, или как
относительное — относительно текущего рабочего каталога
(посмотреть текущий каталог можно командой pwd
,
а сменить — cd
). Пример:
$ ls -l /boot/vmlinuz-2.6.37.3 -rw-r--r-- 1 root root 7612704 Мар 13 19:37 /boot/vmlinuz-2.6.37.3
$ cd /boot /boot $ pwd /boot $ ls -l vmlinuz-2.6.37.3 -rw-r--r-- 1 root root 7612704 Мар 13 19:37 vmlinuz-2.6.37.3
Важной отличительной особенностью файловой системы UNIX является то, что в путевых именах большие и малые литеры считаются совершенно разными, поэтому:
$ touch _XXX $ touch _xxx $ ls -l _* -rw-rw-r-- 1 olej olej 0 Июл 31 16:53 _xxx -rw-rw-r-- 1 olej olej 0 Июл 31 16:53 _XXX
Это созданы в одном каталоге два совершенно разных файла!
В файловой системе UNIX очень широко используются ссылки: синонимы для имени объекта, имя, ссылающееся на другое имя. Из-за этого возникают далеко идущие последствия (не очевидные для пользователей с привычками из других систем), вот некоторые из них:
- у одного и того же объекта (файла) может быть сколь угодно много различающихся имён;
- но в системе не может быть двух объектов с точно совпадающими абсолютными их именами;
- из-за ссылок очень трудно (или неоднозначно) интерпретировать многие понятия, например: объём дискового пространства, занимаемого файлами текущего каталога...
- ссылки могут создавать циклические файловые структуры (это не ошибка, а нормальное явление) — это необходимо учитывать при планировании рекурсивных алгоритмов обхода деревьев файловой системы;
Наглядный пример ссылочности, который вы найдёте в любой инсталляции Linux:
$ ls -l /boot/vmlinuz* lrwxrwxrwx 1 root root 22 Май 26 01:10 /boot/vmlinuz -> /boot/vmlinuz-2.6.37.3 -rwxr-xr-x 1 root root 3652704 Дек 1 2010 /boot/vmlinuz-2.6.32.26-175.fc12.i686.PAE -rwxr-xr-x 1 root root 3645024 Мар 3 2010 /boot/vmlinuz-2.6.32.9-70.fc12.i686.PAE -rw-r--r-- 1 root root 7612704 Мар 13 19:37 /boot/vmlinuz-2.6.37.3
Ссылки в Linux согут быть жёсткими (hard) и мягкими (soft), главное различие между ними в том, что первые могут ссылаться только на имена в пределах поддерева, размещённого на одном физическом устройстве хранения (диске), а вторые — на произвольное имя во всем дереве файловой системы. Мягкие ссылки появились исторически позже жёстких, и на сегодня гораздо более применимы. Но об этом позже...
$ ls / bin dev home lost+found misc net proc sbin srv tmp var boot etc lib media mnt opt root selinux sys usr
Не всякий объект, который имеет имя в файловой системе UNIX является файлом (или каталогом как частным видом файла), многие объекты, именованные в дереве файловой системы, файлами не являются, а отображают некоторые логические сущности, модели, представляемые своими путевыми именами. Это один из главных и самых ранних принципов UNIX: «все сущности, что ни есть — представляются путевыми именами в файловой системе». Множественные примеры объектов, не являющихся файлами, дают нам:
- имена устройств в каталоге
/dev
: все имена здесь являются именами устройств, но никак не файлов, с ними выполняется совсем другой набор операций; - имена псевдофойлов в какталогах
/proc
и/sys
: вся иерархия имён здесь файлами не является, хотя, в отличие от предыдущего примера, над каждым именем здесь можно выполнять операции как над файлами (читать, писать, ...);
Хорошим подтверждением сказанному является
наблюдение состояния файловой системы Linux, но не при загруженной
системе (например, при загрузке с Live CD): на диске не будет никаких
каталогов /dev
, /proc
, или /sys
; в
некоторых POSIX OS (QNX 6) не будет даже каталога /bin
с командами-утилитами — таким логическим отображением решаются
задачи построения пакетных систем.
Примечание: Всё таки не до конца все понятия в UNIX отображаются в имена файловой системы: нет, например, имени, соответствующего манипулятору мышь, которое можно было бы просто читать-писать операциями последовательного доступа... Но эту идею до идеального соответствия её действительности довели авторы первоначальной UNIX системы (из Bell Labs.) в своей последующей операционной системе Plan 9.
Назначение каталогов корня файловой системы UNIX (показанных в примере выше), при всей их многофункциональности (1), укрупнённо можно охарактеризовать в Linux так:
/boot
— загрузочный каталог, содержит образ системы и, возможно, образ загрузочной
файловой системы, и всё, что относится к загрузке (мультизагрузчик
grub
и его меню); часто размещается на отдельном физическом разделе
диска.
/etc
— каталог конфигураций (текстовых файлов конфигураций) всех
подсистем (как при загрузке самой системы, так и при старте этих
подсистемы).
/dev
— каталог устройств.
/proc
— каталог системных файлов (псевдофайлов).
/sys
— более поздняя подсистема диагностики и управления системы, во
многом то же, что и /proc
.
/usr
— каталог пользовательского программного обеспечения, часто сюда (или в
подкаталог /usr/local
) устанавливаются программные пакеты.
/opt
— эквивалент /usr
в некоторых системах (Sun Solaris,
Open Solaris, QNX) для умалчиваемой установки программ; сюда же могут по умолчанию
устанавливаться и в Linux разнообразные программные от сторонних
производителей (например: /opt/google/chrome, /opt/cisco-vpnclient, /opt/VirtualBox
, ...),
вы и сами может устанавливать свои проекты сюда — на последнее
время это начинает считаться хорошей тенденцией.
/home
— домашние каталоги
пользователей (всех ординарных пользователей, кроме пользователя root
),
здесь же будут накапливаться все рабочие файлы пользователей, поэтому
этот каталог также имеет смысл размещать на отдельном физическом
разделе диска (на случай разрушения, да и просто переустановки
системы).
/root
— домашний каталог пользователя root
.
/var
— каталог данных системы, важнейшим его подкаталогом является
/var/log
— каталог системных журналов.
1. Всё
это очень изменчиво, например, уже в мае 2011г. (версия ядра 2.6.39)
был введен новый каталог корневого уровня /run
,
перенесенный сюда из /var/run
: учёт PID запущенных программ и служб.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Дистрибутивы Linux | Важные системные файлы |