В чем разница между жесткой ссылкой и символической ссылкой в ​​Linux?

Иноды

В Linux файлы хранятся на диске и на самом деле представляют собой не более чем данные, записанные в блоках дискового пространства. Доступ к этим файлам или, точнее, к блокам диска, хранящим содержимое файлов, осуществляется из структуры данных, называемой «inode». Имя файла на самом деле является ссылкой на индексный дескриптор этого файла. Инод содержит метаданные о файле, включая:

  • Указатели на блоки диска, в которых хранится содержимое файла.
  • Размер файла в байтах
  • Идентификатор устройства
  • Идентификатор пользователя файла
  • Идентификатор группы файла
  • Режим файла, который определяет тип файла и то, как владелец, группа и другие лица могут получить доступ к файлу.
  • Дополнительные системные и пользовательские флаги для дополнительной защиты файла
  • Временные метки, указывающие, когда последний cзависал сам индексный дескриптор (cвремя), содержимое файла было последним mизменено (m strong>time) и время последнего aдоступа к файлу (atime)
  • Счетчик ссылок, записывающий количество жестких ссылок, указывающих на индексный дескриптор.

Жесткие ссылки

В Linux жесткие ссылки создаются следующим образом:

ln ‹filename› ‹hardlinkname›

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

Мы даже можем переименовать исходный файл; жесткая ссылка по-прежнему будет обращаться к исходному индексному узлу и блоку диска.

Обратите внимание, что если вы используете редактор, такой как emacs, который по умолчанию создает файл резервной копии с суффиксом тильда («~»), когда вы начинаете редактировать файл, а затем сохраняет отредактированный файл на новый диск блок с исходным именем файла, вы, по сути, создали две связи имя-inode-дисковый блок, и ваша жесткая ссылка будет указывать на файл резервной копии с суффиксом тильды.

  • Жесткие ссылки нельзя создавать для каталогов (папок). Жесткие ссылки могут быть созданы только для файлов.
  • Удаление исходного файла, на который указывает ваша жесткая ссылка, не удаляет связь между жесткой ссылкой и файлом; жесткая ссылка может использоваться для доступа к основному содержимому файла.
  • Если вы удалите жесткую ссылку, исходное имя файла и основное содержимое файла останутся нетронутыми.

Символические ссылки

В Linux символические ссылки создаются следующим образом:

ln -s ‹filename› ‹hardlinkname›

Символические ссылки (или символические ссылки) аналогичны «ярлыкам» в MS Windows. В Linux символические ссылки хранят, по сути, путь к имени файла. Мы можем заменить файл другим файлом с тем же именем, и символическая ссылка все равно будет работать.

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