Жесткие связи
Команда ln используется для создания множества связей для
одного файла. Например, скажем, что у вас есть файл foo.
Используя ls -i можно посмотреть индекс этого файла.
# ls -i foo
22192 foo
#
Здесь файл foo имеет в файловой системе индекс 22192. Мы
можем создать новую связь для этого файла под именем bar:
# ln foo bar
С помощью ls -i можно убедиться, что оба файла имеют один и
тот же индекс.
# ls -i foo bar
22192 bar 22192 foo
#
Теперь, обращаясь к foo или bar мы фактически обратимся к
одном у тому же файлу. Поэтому, если мы меняем что-то в файле
foo, эти же самые изменения произойдут в файле bar.
Эти связи известны, как жесткие связи (hard links),
поскольку они
реализуются прямой ссылкой на индекс файла. Обратите внимание,
что в рамках одной файловой системы вы можете организовать только
жесткие связи; символические связи (смотрите ниже) не имеют этого
ограничения.
Когда вы удаляете файл командой rm, на самом деле вы
удаляете только одну ссылку на файл. Если вы введете команду
# rm foo
Удаляется только связь, имеющая имя foo; bar будет как и
прежде существовать. Файл только тогда действительно удаляется,
когда на него больше нет связей. Обычно файлы имеют только одну
связь, так что команда rm действительно приведет к удалению
файла. Однако, если файл имеет много ссылок, применение rm
приведет только к удалению одной связи; для того, чтобы удалить
файл, вы должны удалить все связи на этот файл.
Команда ls -l покажет число ссылок на файл (кроме прочей
информации)
# ls -l foo bar
-rw-r--r-- 2 root root 12 Aug 5 16:51 bar
-rw-r--r-- 2 root root 12 Aug 5 16:50 foo
#
Вторая колонка с цифрой ``2'' показывает число связей файла.
Самом деле оказывается, что каталоги представляют из
себя справочник типа "имена-индексы". Кроме прочего, каждый
каталог имеет минимум две жесткие ссылки: ``.'' (ссылка,
указывающая на самого себя) и ``..'' (ссылка, указывающая на
родительский каталог). В корневом каталоге (/) ссылка
``..'' указывает на сам же каталог /.