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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

Копирование файлов с жёсткими ссылками

[править | править код]

При простом копировании файлов жёсткие ссылки разыменовываются, то есть каждая ссылка превращается в самостоятельный файл. Для преодоления этого ограничения в 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[1]). Жёсткая ссылка может создаваться только в пределах одного логического раздела и только для файлов. В операционных системах 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[2] — дополнение к оболочке Windows, позволяющее создавать жёсткие и символьные ссылки на томах NTFS. Существующие символьные ссылки помечаются в Проводнике дополнительным маленьким значком. Имеется исходный код, написан на языке Pascal.
  • Link Shell Extension[3] — ещё одно дополнение к оболочке Windows. Последняя версия проверена и работает в Windows 10. Существующие жёсткие и символьные ссылки помечаются в Проводнике дополнительным маленьким значком. Файлы и каталоги с существующими ссылками имеют дополнительную закладку в «Свойствах» со списком всех жёстких ссылок и целевым местом символической ссылки.
  • NTFS Links[4] — плагин для файлового менеджера Total Commander, позволяющий создавать жёсткие и символьные ссылки на томах NTFS из Total Commander.
  • CreateHardLink[5] — ещё один плагин для Total Commander, позволяющий создавать жёсткие ссылки на томах NTFS из этой программы.
  • NTLinks[6] — контекстный плагин для Total Commander, отображающий информацию об NTFS-ссылках.
  • FAR Manager — файловый менеджер, позволяющий работать со ссылками на NTFS-разделах (создавать, просматривать, удалять жёсткие и символьные ссылки с помощью команды Alt+F6)
  • Duplicate Files Search & Link[7] — утилита для Windows, позволяющая искать на жёстком диске одинаковые файлы и заменять их жёсткими ссылками NTFS. Утилита также находит существующие на диске жёсткие ссылки на один и тот же файл. Работает в Windows 2000/XP/Vista/7/10/11.
  • FindDupe[8] — простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
  • Duplicate File Hard Linker[9] — ещё одна простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
  • KillCopy — утилита для ускоренного копирования в Windows, позволяет вместо копирования создать жёсткую ссылку.
  • NTFS Links[10] — дополнение к оболочке Windows, схожее по функциональности с первым в списке дополнением.

Примечания

[править | править код]
  1. Link Shell Extension. Архивировано 24 августа 2011 года.
  2. elsdoerfer.name NTFS-Link. Дата обращения: 6 февраля 2011. Архивировано 23 февраля 2011 года.
  3. Link Shell Extension. Дата обращения: 23 сентября 2009. Архивировано 24 августа 2011 года.
  4. NTFS Links. Дата обращения: 18 марта 2009. Архивировано 2 апреля 2009 года.
  5. CreateHardLink. Дата обращения: 18 марта 2009. Архивировано 6 января 2009 года.
  6. NTLinks. Дата обращения: 24 апреля 2012. Архивировано 3 мая 2012 года.
  7. Duplicate Files Search & Link. Дата обращения: 17 декабря 2009. Архивировано 10 марта 2010 года.
  8. FindDupe. Дата обращения: 21 декабря 2009. Архивировано 13 июня 2010 года.
  9. Duplicate File Hard Linker. Дата обращения: 7 февраля 2010. Архивировано 31 марта 2010 года.
  10. alax.info NTFS Links. Дата обращения: 11 июня 2014. Архивировано 14 июля 2014 года.