Skip to main content

Создание жестких и символьных ссылок

Как уже говорилось на лекции (см. Файловая система Linux), в Linux существует два вида ссылок на файл: жесткая и символьная.

Создание жесткой ссылки: ln имя_файла имя_ссылки

Жесткая ссылка фактически второе название физического файла на диске, так как указывает на тот же, что и у исходного файла индексный дескриптор.

Создайте текстовый файл text в домашнем каталоге.

Создадим жесткую ссылку hltext на этот файл.

ln   ~/text   ~/hltext

С помощью ls -i можно убедиться, что оба файла имеют один и тот же индексный дескриптор (см. числа перед именем файла).

ls   -i   ~/text   ~/hltext

Создайте еще одну жесткую ссылку hltext2 на text.

Команда ls -l (эль) позволяет увидеть число жестких ссылок на файл (см. число во второй колонке, следующее за правами доступа на файл). В нашем случае у всех созданных файлов количество жестких ссылок будет 3. И все эти файлы будут иметь один и тот же индексный дескриптор.

Обращаясь к hltext или text, мы фактически обратимся к одному и тому же файлу. Поэтому, если мы меняем что-то в одном файле, эти же самые изменения произойдут в другом файле.

Используя команду cat >> допишите в hltext несколько строчек. Затем просмотрите содержимое файла text, произошли ли изменения в этом файле?

При удалении файла, на самом деле удаляется только одна ссылка на файл. Если вы введете команду

rm   ~/text

Просмотрите домашний каталог. Удалилась только ссылка, имеющая имя text, hltext и hltext2 по прежнему существуют. Файл только тогда действительно удаляется, когда на него больше нет ссылок. Обычно файлы имеют только одну ссылку, так что команда rm действительно приведет к удалению файла. Однако, если файл имеет много ссылок, применение rm приведет только к удалению одной из них; для того, чтобы удалить файл, вы должны удалить все ссылки на этот файл.

Создание символьной ссылки: ln   -s   имя_файла имя_ссылки

Символьные ссылки отличаются от жестких, они не ссылаются на индекс файла. Символьная ссылка указывает на файл по его пути (как ярлык в Windows).

Создадим символьную ссылку sltext на hltext.

ln   -s   ~/hltext   ~/sltext

Используйте команду ls -i, чтобы убедиться, что эти два файла имеют различные файловые дескрипторы.

Обратите внимание на вывод команды ls -l, свойства файлов sltext и hltext отличаются, что еще раз доказывает, что это разные объекты файловой системы, кроме того при символьной ссылке всегда указывается файл, на который она ссылается.

Функционально жесткие ссылки и символьные ссылки похожи, но есть некоторые различия. Например, можно создать символьную ссылку на файл, который не существует, но жесткую ссылку на несуществующий файл создать нельзя. Кроме того, не допускается создание жестких ссылок на каталоги.