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

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

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

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

Свойства[править | править вики-текст]

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

Количество жёстких ссылок файла сохраняется на уровне файловой системы в метаинформации. Файлы с нулевым количеством ссылок перестают существовать для системы и, со временем, будут перезаписаны физически. В файловых системах 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 & Same Files Searcher[7] — утилита для Windows, позволяющая искать на жёстком диске одинаковые файлы и заменять их жёсткими ссылками NTFS. Утилита также находит существующие на диске жёсткие ссылки на один и тот же файл. Работает в Windows 2000/XP/Vista/7.
  • FindDupe[8] — простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
  • Duplicate File Hard Linker[9] — ещё одна простая Windows-утилита для командной строки, позволяющая искать файлы и заменять их жёсткими ссылками NTFS.
  • KillCopy — утилита для ускоренного копирования в Windows, позволяет вместо копирования создать жёсткую ссылку.
  • Junction[10] — Windows-утилита для командной строки от Марка Руссиновича, позволяет создавать и удалять точки соединения NTFS для файлов и каталогов.
  • NTFS Links[11] — дополнение к оболочке Windows, схожее по функциональности с первым в списке дополнением.

Примечания[править | править вики-текст]

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]