Библиотека сайта rus-linux.net
Всё является файлом |
||
---|---|---|
Глава 9. Файловая система Linux |
Всё является файлом
Стартовое руководствоWe ознакомило вас с понятиями владельца файла и разрешениями для файла, но для того, чтобы действительно понять файловую систему UNIX® (а это также касается и файловых систем Linux), необходимо, чтобы мы заново определили понятие «Что такое файл.»
Сейчас «всё» действительно означает всё. Жесткий диск, раздел на жестком диске, параллельный порт, подключение к веб-сайту, карта Ethernet - всё это файлы. Даже каталоги являются файлами. Linux различает много типов файлов в дополнение к стандартным файлам и каталогам. Обратите внимание, что здесь под типом файла мы подразумеваем не содержимое файла: в GNU/Linux, как и в любой другой системе UNIX®, файл, будь то изображение PNG, двоичный файл или что-либо еще, - это просто поток байтов. Разделение файлов согласно их содержимому оставляется приложениям.
Различные типы файлов
Если вы помните,
когда вы выполняете команду ls -l,
символ перед правами доступа определяет тип файла. Мы уже видели два
типа файлов: обычные файлы (-
)
и каталоги (d
).
Когда вы бродите по дереву файлу и просматриваете содержимое
каталогов, вы можете также встретить и другие типы файлов:
- Файлы
символьного режима: эти файлы
являются либо специальными системными файлами (типа
/dev/null
, который мы уже рассматривали), либо периферийными устройствами (последовательные или параллельные порты), характерной особенностью которых является то, что их содержимое (если оно есть) не буферизуется (т.е. оно не хранится в памяти). Такие файлы идентифицируются буквойc
. - Файлы
блочного режима: эти файлы
являются периферийными устройствами, и, в отличие от символьных
файлов, их содержимое буферизуется.
Например, файлами этой категории являются жесткие диски, разделы на
жестком диске, дисководы, CD-ROM и так далее. Примеры файлов
блочного доступа:
/dev/hda
,/dev/sda5
. В информации, выводимой командой ls -l, они идентифицируются буквойb
. - Символические ссылки: эти файлы являются очень распространенными и часто используется в процедуре запуска системы Mandrakelinux (см. главу Глава 11, Загрузочные файлы: init sysv). Как следует из их имени, их цель - связывать файлы символическим способом, что означает, что они являются файлами, содержащими путь к другому файлу. Они могут и не указывать на существующий файл. Очень часто их называют «мягкими ссылками», и идентифицируются они буквой «l».
- Именованные
каналы: если вы были удивлены, то
так оно и есть, да, они очень похожи на каналы, используемые в
командах
shell
'а, но с той разницей, что у этих каналов и в самом деле есть имена. Однако они очень редки и маловероятно, что вы встретите их во время своего путешествия по дереву файлов. На всякий случай, чтобы вы знали, они идентифицируются буквойp
. Чтобы узнать больше об этом, загляните в «Анонимные каналы и именованные каналы». - Сокеты:
это тип файла для всех сетевых подключений, но только некоторые из
них имеют названия. А самое главное, что существует несколько типов
сокетов, а связь может быть установлена только через один из этих
типов, но это уже выходит за рамки данной книги. Такие файлы
идентифицируются буквой
s
.
Вот примеры для каждого из файлов:
$ ls -l /dev/null /dev/sda /etc/rc.d/rc3.d/S20random /proc/554/maps \ /tmp/ssh-queen/ssh-510-agent crw-rw-rw- 1 root root 1, 3 May 5 1998 /dev/null brw-rw---- 1 root disk 8, 0 May 5 1998 /dev/sda lrwxrwxrwx 1 root root 16 Dec 9 19:12 /etc/rc.d/rc3.d/ S20random -> ../init.d/random* pr--r--r-- 1 queen queen 0 Dec 10 20:23 /proc/554/maps| srwx------ 1 queen queen 0 Dec 10 20:08 /tmp/ssh-queen/ ssh-510-agent= $ |
Inode'ы
Inode'ы - это фундаментальная часть любой файловой системы UNIX® наряду с парадигмой «Всё является файлом». Слово «inode» - это сокращение от Information NODE (информационный узел).
Inode'ы хранятся на диске в таблице inode. Они существуют для всех типов файлов, которые могут храниться в файловой системе, включая каталоги, именованные каналы, файлы символьного режима и так далее. Отсюда вытекает другая известная фраза: «Inode это есть файл». При помощи inode'ов UNIX® идентифицирует файл уникальным способом.
Да, вы верно все прочитали: в UNIX® вы идентифицирует файл не по его имени, а по номеру его inode[22]. Причина этого заключается в том, что один и тот же файл может иметь несколько имен или вообще не иметь имени. В UNIX® имя файла - это просто пункт в каталоге inode. Такой пункт называется ссылкой. Давайте рассмотрим ссылки более подробно.
[22] Важно: обратите внимание, что номера inode уникальны в пределах файловой системы, т.е. inode с таким же номером может существовать в другой файловой системе. Это приводит к различению дисковых inode'ов и inode'ов "в памяти". Два дисковых inode'а могут иметь один и тот же номер, если они находятся на двух различных файловых системах, inode'ы "в памяти" имеют номера, уникальные для всей системы. Одно из решений получения уникальности, например, - хэш номера дискового inode'а против идентификатора блочного устройства.
Сравнение нескольких файловых систем |
Ссылки |