Linux: Жёсткие и символические ссылки — полное руководство

В Linux для повторного использования файлов, изменяя только их местоположение, используются ссылки. Это относится как к файлам, так и к каталогам. Например, многие каталоги в корневой файловой системе, такие как /sbin, /lib и /lib32, являются ссылками на другие каталоги, например, /usr и /bin. Команда ls -l /usr/bin подтвердит, что это каталог.

Создадим ссылки. Перейдём в домашний каталог (cd ~) и создадим (если необходимо) текстовый файл, например, file5.txt. Создадим символическую ссылку на него командой ln -s file5.txt file5-softlink.txt. Команда ls покажет новый файл file5-softlink.txt. Содержимое файлов file5.txt и file5-softlink.txt идентично (проверить командой cat). Команда ls -l покажет разницу в правах доступа, размере и дате изменения, так как file5-softlink.txt – символическая ссылка.

Создадим копию file5.txt командой cp file5.txt file6.txt. file6.txt – отдельный файл. Изменение file5.txt не повлияет на file6.txt. Изменим первую строку file5.txt на «Файл был только что изменён» (например, с помощью nano file5.txt). head -n 1 file5.txt и head -n 1 file5-softlink.txt покажут изменённое содержимое, а head -n 1 file6.txt – нет.

Удалим file5.txt (rm file5.txt). file5-softlink.txt всё ещё присутствует в списке файлов (ls), но попытка её чтения (cat file5-softlink.txt) выведет ошибку «нет такого файла или каталога». Удалим символическую ссылку (rm file5-softlink.txt).

Создадим жёсткую ссылку на file6.txt командой ln file6.txt file6-hardlink.txt. ls -l покажет одинаковые права доступа, размер и дату изменения для file6.txt и file6-hardlink.txt.

Изменим первую строку file6.txt на «Жёсткая ссылка была только что изменена». ls -l покажет изменение даты модификации у обоих файлов. head -n 1 file6.txt и head -n 1 file6-hardlink.txt покажут одинаковое содержимое. Команда ls -li покажет одинаковый номер i-узла для обоих файлов.

Удалим file6.txt (rm file6.txt). file6-hardlink.txt останется, и его содержимое будет доступно. Это демонстрирует разницу между жёсткими и символическими ссылками: жёсткая ссылка указывает на тот же i-узел, что и исходный файл.

Что будем искать? Например,программа