Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. 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), главное различие между ними в том, что первые могут ссылаться только на имена в пределах поддерева, размещённого на одном физическом устройстве хранения (диске), а вторые — на произвольное имя во всем дереве файловой системы. Мягкие ссылки появились исторически позже жёстких, и на сегодня гораздо более применимы. Но об этом позже...

Основные каталоги корневого уровня файловой системы Linux:
$ 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   Важные системные файлы