# Hard link _Файловая система · LinuxLab Knowledge Base_ **TL;DR:** Hard link - второе имя для того же [[inode]]. Оба имени равноправны: файл живёт пока есть хотя бы одно из них. ## Что такое hard link Команда `ln src dst` (без флагов) создаёт **hard link** - новую запись в директории, которая ссылается на тот же [inode](/kb/inode.md) что и `src`. После этого: - `src` и `dst` имеют **одинаковый inode-номер** (`ls -i` покажет) - `stat` у обоих показывает `Links: 2` (количество имён выросло) - изменения через любое имя видны через любое - это один файл - `rm src` оставляет файл целым: блоки освобождаются только когда исчезнет последнее имя ## Ограничения Hard link можно делать только в пределах **одной файловой системы** - inode локален к конкретной FS. И только на обычные файлы: на директории hard link запрещён (это ломает аcyclic-структуру файлового дерева; есть исключение для `.` и `..`). Для cross-filesystem-ссылок и ссылок на каталоги - [symbolic-link](/kb/symbolic-link.md). ## Где встречается на практике - **Snapshot-бэкапы** (rsync `--link-dest`) - между бэкапами сохраняются hard link'и на не изменившиеся файлы; по байтам экономится огромное количество места - **Дедупликация** в `/usr/share/doc`, образах Docker layers (на ext4) - **Атомарные публикации**: `ln new staging` → `mv -T staging old` гарантирует что в любой момент `old` указывает либо на старое, либо на новое содержимое без промежуточного состояния ## Команды ```bash ln a.txt b.txt && ls -li a.txt b.txt ``` Создать hard link и убедиться что у обоих один inode ```bash stat a.txt ``` Поле Links покажет количество имён, ссылающихся на этот inode ```bash find . -inum 12345 ``` Найти все имена которые указывают на конкретный inode ## См. также - [Inode](/kb/inode.md) - [Symbolic link](/kb/symbolic-link.md) - [Filesystem Hierarchy Standard (FHS)](/kb/fhs.md)