Библиотека сайта 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'ов без имен являются временные
файлы. Вы создаете временный файл, открываете его, а затем удаляете.
Файл существует, пока он открыт, но больше никто не может открыть его
(т.к. не существует имени для его открытия). Отсюда, если приложение
завершается аварийно, временный файл удаляется автоматически.
|
Всё является файлом |
Анонимные каналы и именованные каналы |
