1 авг. 2008 г.

Типы файлов

Стартовое руководствоWe ознакомило вас с понятиями владельца файла и разрешениями для файла, но для того, чтобы действительно понять файловую систему UNIX® (а это также касается и файловых систем Linux), необходимо, чтобы мы заново определили понятие «Что такое файл.»
Сейчас «всё» действительно означает всё. Жесткий диск, раздел на жестком диске, параллельный порт, подключение к веб-сайту, карта Ethernet - всё это файлы. Даже каталоги являются файлами. Linux различает много типов файлов в дополнение к стандартным файлам и каталогам. Обратите внимание, что здесь под типом файла мы подразумеваем не содержимое файла: в GNU/Linux, как и в любой другой системе UNIX®, файл, будь то изображение PNG, двоичный файл или что-либо еще, - это просто поток байтов. Разделение файлов согласно их содержимому оставляется приложениям.

Различные типы файлов

Если вы помните, когда вы выполняете команду ls -l, символ перед правами доступа определяет тип файла. Мы уже видели два типа файлов: обычные файлы (-) и каталоги (d). Когда вы бродите по дереву файлу и просматриваете содержимое каталогов, вы можете также встретить и другие типы файлов:
  1. Файлы символьного режима: эти файлы являются либо специальными системными файлами (типа /dev/null, который мы уже рассматривали), либо периферийными устройствами (последовательные или параллельные порты), характерной особенностью которых является то, что их содержимое (если оно есть) не буферизуется (т.е. оно не хранится в памяти). Такие файлы идентифицируются буквой c.
  2. Файлы блочного режима: эти файлы являются периферийными устройствами, и, в отличие от символьных файлов, их содержимое буферизуется. Например, файлами этой категории являются жесткие диски, разделы на жестком диске, дисководы, CD-ROM и так далее. Примеры файлов блочного доступа: /dev/hda, /dev/sda5. В информации, выводимой командой ls -l, они идентифицируются буквой b.
  3. Символические ссылки: эти файлы являются очень распространенными и часто используется в процедуре запуска системы Mandrakelinux (см. главу Глава 11, Загрузочные файлы: init sysv). Как следует из их имени, их цель - связывать файлы символическим способом, что означает, что они являются файлами, содержащими путь к другому файлу. Они могут и не указывать на существующий файл. Очень часто их называют «мягкими ссылками», и идентифицируются они буквой «l».
  4. Именованные каналы: если вы были удивлены, то так оно и есть, да, они очень похожи на каналы, используемые в командах shell'а, но с той разницей, что у этих каналов и в самом деле есть имена. Однако они очень редки и маловероятно, что вы встретите их во время своего путешествия по дереву файлов. На всякий случай, чтобы вы знали, они идентифицируются буквой p. Чтобы узнать больше об этом, загляните в «Анонимные каналы и именованные каналы».
  5. Сокеты: это тип файла для всех сетевых подключений, но только некоторые из них имеют названия. А самое главное, что существует несколько типов сокетов, а связь может быть установлена только через один из этих типов, но это уже выходит за рамки данной книги. Такие файлы идентифицируются буквой 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. Такой пункт называется ссылкой. Давайте рассмотрим ссылки более подробно.

Комментариев нет: