Что такое hard link
Команда ln src dst (без флагов) создаёт hard link - новую запись в
директории, которая ссылается на тот же inode что и src. После этого:
srcиdstимеют одинаковый inode-номер (ls -iпокажет)statу обоих показываетLinks: 2(количество имён выросло)- изменения через любое имя видны через любое - это один файл
rm srcоставляет файл целым: блоки освобождаются только когда исчезнет последнее имя
Ограничения
Hard link можно делать только в пределах одной файловой системы - inode
локален к конкретной FS. И только на обычные файлы: на директории hard link
запрещён (это ломает аcyclic-структуру файлового дерева; есть исключение для
. и ..).
Для cross-filesystem-ссылок и ссылок на каталоги - symbolic-link.
Где встречается на практике
- Snapshot-бэкапы (rsync
--link-dest) - между бэкапами сохраняются hard link'и на не изменившиеся файлы; по байтам экономится огромное количество места - Дедупликация в
/usr/share/doc, образах Docker layers (на ext4) - Атомарные публикации:
ln new staging→mv -T staging oldгарантирует что в любой моментoldуказывает либо на старое, либо на новое содержимое без промежуточного состояния