Поиск по сайту:

Объяснение мягких и жестких ссылок в Linux с примерами

Символическая ссылка и жесткая ссылка, объясненные примерами

Что такое мягкая ссылка и жесткая ссылка в Linux?

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

Но в случае с жесткой ссылкой все совершенно наоборот. Даже если вы удалите исходный файл, жесткая ссылка по-прежнему будет содержать данные исходного файла. Потому что жесткая ссылка действует как зеркальная копия исходного файла.

В двух словах, мягкая ссылка

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

Жесткая ссылка

  • не может пересекать границы файловой системы (т. е. жесткая ссылка может работать только в той же файловой системе),
  • не могу связать каталоги,
  • имеет тот же номер индексного дескриптора и разрешения исходного файла,
  • разрешения будут обновлены, если мы изменим разрешения исходного файла,
  • содержит фактическое содержимое исходного файла, поэтому вы все равно можете просмотреть его содержимое, даже если исходный файл был перемещен или удален.

Все еще не поняли? Что ж, позвольте мне показать вам несколько практических примеров.

Как создать мягкую ссылку или символическую ссылку

Давайте создадим пустой каталог с именем "test".

mkdir test

Перейдите в каталог "test":

cd test

Теперь создайте новый файл с именем source.file с некоторыми данными, как показано ниже.

echo "Welcome to OSTechNix" >source.file

Давайте просмотрим данные source.file.

$ cat source.file
Welcome to OSTechNix

Итак, source.file создан.

Теперь создайте символическую или программную ссылку на source.file.

Для этого запустите:

ln -s source.file softlink.file

Давайте сравним данные source.file и softlink.file.

$ cat source.file 
Welcome to OSTechNix
$ cat softlink.file 
Welcome to OSTechNix

Просмотр данных символической ссылки

Как вы видите в приведенном выше выводе, softlink.file отображает те же данные, что и source.file.

Давайте проверим индексные дескрипторы и разрешения softlink.file и source.file.

ls -lia

Пример вывода:

total 12
11665675 drwxrwxr-x  2 sk sk 4096 Oct 17 11:39 .
 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665731 lrwxrwxrwx  1 sk sk   11 Oct 17 11:39 softlink.file -> source.file
11665692 -rw-rw-r--  1 sk sk   21 Oct 17 11:39 source.file

Проверьте индексные дескрипторы и разрешения символической ссылки.

Как мы видим на снимке экрана выше, номер индексного дескриптора (11665731 vs 11665692) и разрешения файла (lrwxrwxrwx vs -rw-r--r--) являются разное, хотя softlink.file имеет то же содержимое, что и source.file. Таким образом, доказано, что программная ссылка не имеет того же номера индексного дескриптора и разрешений, что и исходный файл.

Теперь удалите исходный файл (т. е. source.file) и посмотрите, что произойдет.

rm source.file

Проверьте содержимое softlink.file с помощью команды:

cat softlink.file

Пример вывода:

cat: softlink.file: No such file or directory

Проверьте содержимое символической ссылки

Как вы видите выше, после удаления исходного файла (т. е. source.file) такого файла или каталога с именем softlink.file не существует.

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

Как вы уже знаете, если вы удалите программную ссылку, исходный файл все равно будет доступен.

Рекомендуем прочитать:

  • Как составить список символических ссылок в Linux
  • Как найти неработающие символические ссылки и удалить их в Linux

Как создать жесткую ссылку

Создайте файл с именем source.file с содержимым, как показано ниже.

echo "Welcome to OSTechNix" >source.file

Давайте проверим содержимое файла.

$ cat source.file
Welcome to OSTechNix

source.file создан.

Теперь давайте создадим жесткую ссылку на source.file, как показано ниже.

ln source.file hardlink.file

Создать жесткую ссылку

Проверьте содержимое hardlink.file:

$ cat hardlink.file
Welcome to OSTechNix

Вы видите, что hardlink.file отображает те же данные, что и source.file.

Давайте проверим индексный дескриптор и разрешения hardlink.file и source.file.

ls -lia

Пример вывода:

total 16
11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 .
4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file

Проверьте индексные дескрипторы и разрешения жесткой ссылки

Теперь мы видим, что и hardlink.file, и source.file имеют одинаковый номер инодов (11665692). и права доступа к файлам (-rw-r--r--). Таким образом, доказано, что файл жесткой ссылки имеет то же количество инодов и разрешения, что и исходный файл.

Внимание! Если мы изменим разрешения для source.file, то же разрешение будет применено и к hardlink.file.

Теперь удалите исходный файл (т. е. source.file) и посмотрите, что произойдет.

rm source.file

Проверьте содержимое hardlink.file с помощью команды:

cat hardlink.file

Пример вывода:

Проверьте содержимое жесткой ссылки

Как вы видите выше, даже если я удалил исходный файл, я могу просмотреть содержимое hardlink.file. Таким образом, доказано, что жесткая ссылка имеет тот же номер индексного дескриптора, разрешения и данные исходного файла.

Итак, в чем же разница между жесткой ссылкой и обычным скопированным файлом?

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

Если вы скопируете файл, он просто продублирует содержимое. Таким образом, если вы измените содержимое одного файла (исходного или жесткой ссылки), это не повлияет на другой.

Однако если вы создадите жесткую ссылку на файл и измените содержимое любого из файлов, изменения будут видны в обоих.

Давайте посмотрим на source.file.

$ cat source.file 
Welcome to OSTechNix

В исходном файле есть единственная строка: Добро пожаловать в OSTechNix.

Добавьте новую строку, например «Добро пожаловать в Linux» в source.file или hardlink.file.

echo "Welcome to Linux" >>source.file

Теперь проверьте содержимое обоих файлов.

$ cat hardlink.file 
Welcome to OSTechNix
Welcome to Linux
$ cat source.file 
Welcome to OSTechNix
Welcome to Linux

Обновить содержимое жесткой ссылки

Видеть? Изменения, которые мы только что внесли в source.file, обновляются в обоих файлах. Значение - оба файла (исходный и жесткая ссылка) синхронизируются.

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

Для получения более подробной информации проверьте справочные страницы.

man ln

Заключение

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

Надеюсь, вы получили базовое представление о том, как использовать символические или программные ссылки и жесткие ссылки в Linux.

Статьи по данной тематике