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








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

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

Всё является файлом

Пред. 

Глава 9. Файловая система Linux

 След.


Всё является файлом

Стартовое руководство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. Такой пункт называется ссылкой. Давайте рассмотрим ссылки более подробно.



[22] Важно: обратите внимание, что номера inode уникальны в пределах файловой системы, т.е. inode с таким же номером может существовать в другой файловой системе. Это приводит к различению дисковых inode'ов и inode'ов "в памяти". Два дисковых inode'а могут иметь один и тот же номер, если они находятся на двух различных файловых системах, inode'ы "в памяти" имеют номера, уникальные для всей системы. Одно из решений получения уникальности, например, - хэш номера дискового inode'а против идентификатора блочного устройства.


Пред. 

Уровень выше

 След.

Сравнение нескольких файловых систем 

Начало

 Ссылки