Жесткие и символические ссылки

Ссылка — это способ присвоить файлу несколько идентификаторов. Ссылки в Linux аналогичны ярлыкам в Windows и псевдонимам в Mac OS.

Различие между жесткими и символическими ссылками.

В файловых системах Linux для представления файла существует номер индексного дескриптора (inode). Для одного файла используется один номер inode, и каждый inode уникален внутри своей файловой системы (по крайней мере, теоретически). Жесткие ссылки основываются на номерах индексных дескрипторов: два жестко связанных файла имеют одинаковый inode. Именно поэтому жесткое связывание между файловыми системами не допускается, поскольку это может привести к путанице в ОС.

Например в двух файловых системах уже есть файл data.txt с номером индексного дескриптора 44733, и кто-то пытается создать жесткую ссылку между одной файловой системой и другой на этот файл. Ничего из этого не выйдет, так как получается сумбурная ситуация, два файла с одним именем, но с разным inode.

Поскольку невозможно отличить жесткую ссылку от ее исходного имени, большинство файловых систем также не допускают жестких ссылок на каталоги. В конечном итоге это приведет к возникновению циклов каталогов и висячим поддеревьям каталогов. Отсюда, у нас есть два основных ограничения жестких ссылок:

  • Жесткие ссылки не могут связывать каталоги.
  • Жесткие ссылки не могут пересекать границы файловой системы.

Символическая ссылка — это специальный файл, содержащий путь к другому файлу. Этот путь может быть абсолютным или относительным. Символические ссылки позволяют связать несколько имен файлов с одним файлом, а также создавать связи между каталогами.

Поскольку символическая ссылка не хранит никакой информации, кроме пути к файлу, на который она указывает, ее можно использовать в разных файловых системах. Однако символическая ссылка ведет себя по-другому, когда источник ссылки перемещается или удаляется. Если исходный файл удален, символическая ссылка становится неработающей, поскольку указывает на несуществующий файл. Основные особенности символических ссылок следующие:

  • Символические ссылки могут создаваться для связи каталогов.
  • Символические ссылки могут пересекать границы файловой системы.
  • Символические ссылки не обновляются, если источник удаляется.

Обратите внимание, что жесткие ссылки всегда ссылаются на источник, даже если они были перемещены или удалены.

Управление ссылками.

Для создания ссылок в Linux используется команда ln

Источником является исходный файл, а ссылкой — имя ссылки, которую мы хотим создать. По умолчанию, если параметры не указаны, команда ln создает жесткую ссылку.

Обратите внимание, что жесткие ссылки всегда имеют один и тот же номер inode. Когда мы создаем жесткую ссылку, счетчик ссылок на индексный дескриптор увеличивается до 2, или, другими словами, у нас есть две ссылки на один и тот же файл. Пока счетчик не равен нулю, файловая система не удаляет индексный дескриптор. Даже если мы удалим исходный файл, файловая система удалит только одну из двух существующих ссылок. Еще одна ссылка все еще существует. Пока мы не удалим последнюю жесткую ссылку, файл доступен.

Чтобы создать символическую ссылку, нам нужно передать команде опцию -s:

Если использовать ln с опцией -f, то удаляются все существующие ссылки или файлы, имеющие имя целевой ссылки. Опция -i имеет очень похожий эффект, но перед заменой любых существующих файлов и ссылок она выводит запрос.

Для создания ссылки на каталог, используется опция -d

Заключение.

В этой статье познакомились с различиями между жесткими и символическими ссылками, а так же способами их создания. Надеюсь было полезно.

Was this helpful?

1 / 0

Добавить комментарий 0