Библиотека сайта rus-linux.net
Ссылки |
||
---|---|---|
Глава 9. Файловая система Linux |
Ссылки
Наилучшим способом понять, что такое ссылка, будет рассмотрение примера. Давайте создадим (обычный) файл:
$ pwd /home/queen/example $ ls $ touch a $ ls -il a 32555 -rw-rw-r-- 1 queen queen 0 Dec 10 08:12 a |
Опция -i
команды ls
выводит номер inode в первом поле выходных данных. Как видите, до
того как мы создали файл a
,
в каталоге не было никаких файлов. Однако нас интересует третье поле,
которое представляет собой количество ссылок на файл (ну... на самом
деле ссылок на inode).
Команду touch a можно разделить на два независимых действия:
- создание inode'а, которому операционная система присвоила номер 32555, и которой является файлом обычного типа;
- и создание
ссылки на этот inode с именем
a
в текущем каталоге/home/queen/example
. Поэтому файл/home/queen/example/a
- это ссылка на inode с номером 32555, и в настоящий момент она является единственной: счетчик ссылок показывает1
.
$ ln a b $ ls -il a b 32555 -rw-rw-r-- 2 queen queen 0 Dec 10 08:12 a 32555 -rw-rw-r-- 2 queen queen 0 Dec 10 08:12 b $ |
Мы создали другую
ссылку на тот же самый inode. Как видите, мы не создали файл с именем
b
.
Вместо этого мы просто добавили другую ссылку на inode под номером
32555 в том же каталоге и присвоили этой новой ссылке имя b
.
Как видите в информации, выданной командой ls
-l, счетчик ссылок для inode'а теперь
равен 2, а не 1.
$ rm a $ ls -il b 32555 -rw-rw-r-- 1 queen queen 0 Dec 10 08:12 b $ |
Мы видим, что
даже несмотря на то, что мы удалили «оригинальный файл»,
inode все равно существует. Но теперь единственная ссылка на этот
inode - это файл с именем /home/queen/example/b
.
Следовательно, файл в UNIX® не имеет имени; вместо этого, он имеет одну или несколько ссылок в одном или нескольких каталогах.
Сами каталоги
также хранятся в inode'ах, количество их ссылок совпадает с
количеством их подкаталогов. Вследствие этого для каждого из
каталогов всегда существует как минимум две ссылки: сам каталог (.
)
и его родительский каталог (..
).
Типичными
примерами несвязанных файлов (т.е. не имеющих имен) являются сетевые
подключения; вы никогда не увидите файла, соответствующему вашему
подключению к веб-сайту
Mandrakelinux, в своем дереве файлов, в каком бы каталоге вы его
не искали. Аналогично, когда вы используете канал
в shell
'е,
inode, соответствующий этому каналу, существует, но он несвязанный.
Другим примером использования inode'ов без имен являются временные
файлы. Вы создаете временный файл, открываете его, а затем удаляете.
Файл существует, пока он открыт, но больше никто не может открыть его
(т.к. не существует имени для его открытия). Отсюда, если приложение
завершается аварийно, временный файл удаляется автоматически.
Всё является файлом |
Анонимные каналы и именованные каналы |