Команда 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'' показывает число связей файла.
Самом деле оказывается,
что каталоги представляют из себя справочник типа "имена-индексы". Кроме прочего,
каждый каталог имеет минимум две жесткие ссылки: ``.
'' (ссылка,
указывающая на самого себя) и ``..
'' (ссылка, указывающая на родительский
каталог). В корневом каталоге (/
) ссылка ``..
'' указывает
на сам же каталог /
.