Введение
Запись в каталоге (в файловой системе, основанной на каталогах), связывающая имя с файлом – термин гиперссылки. В информатике, жесткая ссылка – это запись в каталоге (в файловой системе, основанной на каталогах), связывающая имя с файлом. Таким образом, каждый файл должен иметь как минимум одну жесткую ссылку. Создание дополнительных жестких ссылок для файла делает содержимое этого файла доступным по нескольким путям (то есть, под разными именами или в разных каталогах). Это создает эффект псевдонима: процесс может открыть файл по любому из его путей и изменить его содержимое. В отличие от этого, мягкая ссылка или "ярлык" на файл – это не прямая ссылка на сами данные, а скорее ссылка на жесткую ссылку или другую мягкую ссылку. Каждый каталог сам по себе является специальным файлом во многих системах, содержащим список имен файлов вместо других данных. Следовательно, возможно создание нескольких жестких ссылок на каталоги, что может привести к образованию циклической структуры каталогов, а не древовидной. По этой причине некоторые файловые системы запрещают создание жестких ссылок на каталоги. Операционные системы, соответствующие стандарту POSIX, такие как Linux, Android, macOS и семейство Windows NT, поддерживают несколько жестких ссылок на один и тот же файл, в зависимости от используемой файловой системы. Например, NTFS и ReFS поддерживают жесткие ссылки, а FAT – нет.
the hyperlinking term
In computing, a hard link is a directory entry (in a directory based file system) that associates a name with a file. Thus, each file must have at least one hard link. Creating additional hard links for a file makes the contents of that file accessible via additional paths (i. e., via different names or in different directories). This causes an alias effect: a process can open the file by any one of its paths and change its content. By contrast, a soft link or “shortcut” to a file is not a direct link to the data itself, but rather a reference to a hard link or another soft link. Every directory is itself a special file on many systems, containing a list of file names instead of other data. Hence, multiple hard links to directories are possible, which could create a circular directory structure, rather than a branching structure like a tree. For that reason, some file systems forbid the creation of hard links to directories. POSIX compliant operating systems, such as Linux, Android, macOS, and the Windows NT family, support multiple hard links to the same file, depending on the file system. For instance, NTFS and ReFS support hard links, while FAT does not.
Операция
Пусть две жесткие ссылки, названные "LINK A. TXT" и "LINK B. TXT", указывают на одни и те же физические данные. Текстовый редактор открывает "LINK A. TXT", изменяет его и сохраняет. Когда редактор (или любое другое приложение) открывает "LINK B. TXT", он видит изменения, внесенные в "LINK A. TXT", поскольку оба имени файлов указывают на одни и те же данные. С точки зрения пользователя это один файл с несколькими именами. Редактирование любого имени файла изменяет все файлы, однако удаление любого имени файла, кроме последнего, не удаляет файл. Однако некоторые редакторы, такие как GNU Emacs, нарушают принцип работы жестких ссылок. При открытии файла для редактирования, например, "LINK B. TXT", Emacs переименовывает "LINK B. TXT" в "LINK B. TXT~", загружает "LINK B. TXT~" в редактор и сохраняет измененное содержимое в новый файл "LINK B. TXT". Теперь "LINK A. TXT" и "LINK B. TXT" больше не ссылаются на одни и те же данные. (Это поведение можно изменить, используя переменную `backup` в Emacs, настроив ее на копирование.) Можно создать любое количество жестких ссылок на физические данные. Для доступа к данным пользователю достаточно указать имя любой существующей ссылки; операционная система разрешит ссылку на фактическое местоположение данных. Даже если пользователь удалит одну из жестких ссылок, данные останутся доступными через любую другую оставшуюся ссылку. Когда пользователь удалит все ссылки, и ни один процесс не будет использовать файл, операционная система освободит дисковое пространство, которое ранее занимал файл.
Справочное подсчет
Большинство файловых систем, поддерживающих жесткие ссылки, используют подсчет ссылок. Система хранит целое число для каждого раздела логических данных, представляющее общее количество жестких ссылок, созданных для указания на эти данные. При создании новой ссылки это значение увеличивается на единицу, а при удалении ссылки – уменьшается на единицу. Когда счетчик достигает нуля, операционная система освобождает раздел логических данных. (Операционная система может не делать это немедленно, например, при наличии открытых файловых дескрипторов, в целях повышения производительности или для обеспечения возможности восстановления удаленных файлов.) Это простой способ для файловой системы отслеживать использование определенной области хранения: нулевые значения указывают на свободное пространство, а ненулевые – на занятое. Поддержание этого значения гарантирует отсутствие "висячих" жестких ссылок, указывающих в никуда. Раздел данных и связанный с ним inode сохраняются до тех пор, пока на них указывает хотя бы одна жесткая ссылка (ссылка из каталога) или какой-либо процесс держит связанный файл открытым. В операционных системах, соответствующих стандарту POSIX, количество ссылок для файла или каталога возвращается системными вызовами stat или fstat в поле st_nlink структуры stat.
Ограничения
Чтобы предотвратить образование циклов в файловой системе и обеспечить согласованную интерпретацию файла "" (родительского каталога), операционные системы обычно не разрешают создание жёстких ссылок на каталоги. UNIX System V допускала их, но только суперпользователь имел право создавать такие ссылки. Mac OS X v10.5 (Leopard) и более поздние версии используют жёсткие ссылки на каталоги исключительно для механизма резервного копирования Time Machine. Жёсткие ссылки можно создавать только на файлы в пределах одного тома, то есть в пределах одной файловой системы. (Разные тома могут использовать разные файловые системы. Нет гарантии, что файловая система целевого тома совместима с жёсткими ссылками.) Максимальное количество жёстких ссылок на один файл ограничено размером счётчика ссылок. В Unix-подобных системах этот счётчик равен 4 294 967 295 (на 32-битных машинах) или 18 446 744 073 709 551 615 (на 64-битных машинах). В некоторых файловых системах количество жёстких ссылок ограничено более жёстко их форматом на диске. Например, начиная с Linux 3.11, файловая система ext4 ограничивает количество жёстких ссылок на файл до 65 000. Windows устанавливает ограничение в 1024 жёстких ссылки на файл на томах NTFS. В Linux Weekly News Нил Браун критиковал жёсткие ссылки как сложные в обслуживании, поскольку они усложняют разработку программ, работающих с деревьями каталогов, включая архиваторы и утилиты для анализа использования диска. Эти приложения должны учитывать необходимость устранения дублирования файлов, на которые ссылаются несколько раз в иерархии. Браун отмечает, что Plan 9 от Bell Labs, задуманный как преемник Unix, не включает в себя концепцию жёстких ссылок.