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

Жёсткой ссылкой () в UFS-совместимых файловых системах называется структурная составляющая файла — описывающий его элемент каталога.

Файл в UFS представляет собой структуру блоков данных на диске, имеющую уникальный индексный дескриптор (inode) и набор атрибутов (метаинформацию). Жёсткая ссылка связывает индексный дескриптор файла с каталогом и даёт ему имя.

Свойства 
У файла может быть несколько жёстких ссылок: в таком случае он будет фигурировать на диске одновременно в различных каталогах или под различными именами в одном каталоге. При редактировании файла через одну из ссылок на него, содержимое по другим ссылкам тоже изменится.

Количество жёстких ссылок файла сохраняется на уровне файловой системы в метаинформации. Файлы с нулевым количеством ссылок перестают существовать для системы и, со временем, будут перезаписаны физически. В файловых системах UNIX-подобных ОС и в NTFS при создании файла на него автоматически создаётся одна жёсткая ссылка (на то место файловой системы, в котором файл создаётся). Дополнительную ссылку в UNIX можно создать с помощью команды ln. Все ссылки одного файла равноправны и неотличимы друг от друга — нельзя сказать, что файл существует в таком-то каталоге, а в других местах есть лишь ссылки на него. Удаление ссылки приводит к удалению файла лишь в том случае, когда это была последняя ссылка, любая из созданных, то есть все остальные жёсткие ссылки на него уже удалены.

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

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

Копирование файлов с жёсткими ссылками 
При простом копировании файлов жёсткие ссылки разыменовываются, то есть каждая ссылка превращается в самостоятельный файл. Для преодоления этого ограничения в UNIX-подобных системах используется конвейер из команд find и cpio:
 (в каталоге-источнике)
 
 find -depth -print0 | cpio -p -v -d --null <каталог назначения>

(Ключ -depth заставляет find выводить имена каталогов после их содержимого, благодаря чему команда cpio сможет последовательно воссоздать дерево файлов. Ключ -print0 сохраняет пробелы в именах файлов, меняя разделитель строк на символ NULL (код 0x0). Ключи cpio: -p — режим конвейера, -d — создание каталогов, -v — отображение хода работы, --null — указывает на то, что разделителем строк выступает нулевой символ.)

Другие файловые системы 
Жёсткие ссылки поддерживаются в файловой системе NTFS (начиная с Windows NT4).
Жёсткая ссылка может создаваться только в пределах одного логического раздела и только для файлов.
В операционных системах Windows нет возможности создать жёсткую ссылку на каталог. Однако похожего эффекта можно добиться, используя точку соединения NTFS.

Команда для создания жёсткой ссылки в Windows:
 fsutil hardlink create новая_ссылка источник
Пример:
 fsutil hardlink create "C:\Distr\Installer-2.exe" "C:\Distr\Installer.exe"
Обратите внимание: существующее имя файла идёт вторым, а создаваемое — первым.

Также, начиная с Vista, в Windows появилась внутренняя команда mklink, позволяющая создавать жёсткие и мягкие ссылки, а также точки соединения.
Команда для создания жёсткой ссылки на файл в операционной системе Windows 7:
 mklink /h новая_ссылка источник
Пример:
 mklink /h "C:\Distr\Installer-2.exe" "C:\Distr\Installer.exe"

Утилиты для работы с жёсткими ссылками в Windows 
 NTFS Link — дополнение к оболочке Windows, позволяющее создавать жёсткие и символьные ссылки на томах NTFS. Существующие символьные ссылки помечаются в Проводнике дополнительным маленьким значком. Имеется исходный код, написан на языке Pascal.
 Link Shell Extension — ещё одно дополнение к оболочке Windows. Последняя версия проверена и работает в Windows 10. Существующие жёсткие и символьные ссылки помечаются в Проводнике дополнительным маленьким значком. Файлы и каталоги с существующими ссылками имеют дополнительную закладку в «Свойствах» со списком всех жёстких ссылок и целевым местом символической ссылки.
 NTFS Links — плагин для файлового менеджера Total Commander, позволяющий создавать жёсткие и символьные ссылки на томах NTFS из Total Commander.
 CreateHardLink — ещё один плагин для Total Commander, позволяющий создавать жёсткие ссылки на томах NTFS из этой программы.
 NTLinks — контекстный плагин для Total Commander, отображающий информацию об NTFS-ссылках.
 FAR Manager — файловый менеджер, позволяющий работать со ссылками на NTFS-разделах (создавать, просматривать, удалять жёсткие и символьные ссылки с помощью команды )
 Duplicate & Same Files Searcher — утилита для Windows, позволяющая искать на жёстком диске одинаковые файлы и заменять их жёсткими ссылками NTFS. Утилита также находит существующие на диске жёсткие ссылки на один и тот же файл. Работает в Windows 2000/XP/Vista/7.
 FindDupe — простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
 Duplicate File Hard Linker — ещё одна простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
 KillCopy — утилита для ускоренного копирования в Windows, позволяет вместо копирования создать жёсткую ссылку.
 NTFS Links — дополнение к оболочке Windows, схожее по функциональности с первым в списке дополнением.

См. также 
 Символьная ссылка
 Точка соединения NTFS
 Команда ln в UNIX

Примечания

Ссылки 
 Работа с дисками и файловыми системами в FreeBSD, Алексей Федорчук, перепечатка цикла статей из iXBT (см. разделы FreeBSD: физика файловой системы, Файловая система FreeBSD: иерархия и монтирование)
 Секреты NTFS. Жесткие ссылки, Компьютерра OnLine

Unix