72

Название говорит само за себя ... какая разница? Когда я использую один и когда я использую другой?

Добавлено: Обратите внимание, что точки соединения, жесткие ссылки и символические (программные) ссылки - это три разные вещи в NTFS.

5 ответов5

41

Быстрые определения:

Символическая ссылка: ссылка на файл или каталог на том же или другом томе (буква диска) или даже на удаленный файл или каталог (с использованием UNC в своем пути).

Жесткая ссылка: ссылка на файл только на том же томе (буква диска). Каждый файл (данные файла) имеет как минимум 1 жесткую ссылку (имя файла). Удаление всех жестких ссылок эффективно удаляет файл.

Junction: ссылка на каталог на том же или другом томе (буква диска), но не на удаленный каталог.


Подробности:

Предполагая, что вы работаете с томами NTFS в Windows Vista/7, вы можете использовать инструмент командной строки MKLINK для создания всех трех типов ссылок:

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is 
                a file symbolic link.

        /H      Creates a hard link instead of a symbolic link.

        /J      Creates a Directory Junction.

        Link    specifies the new symbolic link name.

        Target  specifies the path (relative or absolute) that 
                the new link refers to.

Символические ссылки . Символическая ссылка - это объект файловой системы, который указывает на другой объект файловой системы (например, файл / каталог).

  • MKLINK можно использовать для создания символических ссылок. Использование параметра /D создает символьную ссылку на каталог. MKLINK не проверяет, является ли цель файлом или каталогом, или даже если цель существует! Это означает, что вы можете потенциально создавать недопустимые ссылки, такие как символическая ссылка каталога на файл или символическая ссылка на несуществующий файл / каталог.

  • Символические ссылки могут быть как абсолютными, так и относительными. Абсолютные ссылки - это ссылки, которые определяют каждую часть имени пути, в то время как относительные ссылки определяются относительно того, где спецификаторы относительных ссылок находятся в указанном пути.

  • Абсолютные символические ссылки могут указывать на файлы / каталоги на том же или другом томе, а также на удаленный файл или каталог с использованием пути UNC. Однако относительные символические ссылки ограничены одним томом.

  • Для создания символической ссылки требуются повышенные привилегии, хотя после создания повышенных привилегий не требуется удалять ссылку.

Жесткие ссылки: Жесткая ссылка - это представление файловой системы файла, по которому более одного пути ссылается на один файл.

  • MKLINK позволяет создавать жесткие ссылки (используя параметр /H ) только для файлов (не каталогов). Жесткую ссылку можно создать только из файла того же объема.

  • Файл с несколькими жесткими ссылками фактически удаляется только тогда, когда удаляются все жесткие ссылки, т.е. количество ссылок достигает нуля. Таким образом, каждый созданный вами файл имеет хотя бы одну жесткую ссылку, независимо от того, используете вы MKLINK или нет.

  • Любые изменения в этом файле мгновенно видны приложениям, которые обращаются к нему по жестким ссылкам на него. Однако размер записи каталога и информация об атрибутах обновляются только для ссылки, по которой было сделано изменение.

  • Обратите внимание, что атрибуты файла отражаются в каждой жесткой ссылке на этот файл, а изменения атрибутов этого файла распространяются на все жесткие ссылки. Например, если вы удалите атрибут «только для чтения» на жесткой ссылке, чтобы удалить эту конкретную жесткую ссылку, и существует несколько жестких ссылок на фактический файл, то вам нужно будет повторно установить атрибут «только для чтения» в файле из одной из оставшихся жестких ссылок, чтобы вернуть файл и все оставшиеся жесткие ссылки обратно в состояние только для чтения.

Соединения . Соединение (также называемое мягкой ссылкой) отличается от жесткого соединения тем, что объекты хранения, на которые оно ссылается, являются отдельными каталогами, а соединение может связывать каталоги, расположенные на разных локальных томах на одном компьютере. В противном случае соединения работают идентично жестким ссылкам. Соединения реализуются через точки повторной обработки.

  • MKLINK позволяет создать соединение (используя параметр /J ) каталога (и даже файлов, хотя это, вероятно, следует рассматривать как недействительную ссылку).

  • Соединение можно рассматривать как эквивалент жесткой ссылки для символической ссылки на каталог. Соединительная ссылка не может быть создана для удаленного каталога, но может быть создана для каталога на том же / другом томе.


Рекомендации:

[1] Жесткие ссылки и переходы: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Создание символических ссылок: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "соединение каталогов" против "символьная ссылка каталога"?

32

Файлы данных NTFS хранятся со всеми своими атрибутами как "inode" с идентификатором, а имена файлов указывают на inode. Все файлы имеют одну + жесткую ссылку. некоторые инструменты могут создавать дополнительные имена (жесткие ссылки), которые указывают на один и тот же индекс, который имеет счетчик количества имен, указывающих на него. Если число обращается в ноль, ОС удаляет файл, индекс.

Специальные инструменты, такие как LN, могут создавать дополнительные имена файлов, которые указывают на существующие inode, используя имя файла, которое указывает на них. Обратите внимание, что все атрибуты файла, включая даты и время, хранятся с индексом, а не с именем файла.

(Дополнительные) жесткие ссылки полезны, когда вы хотите, чтобы разные имена указывали на одни и те же данные, читали или записывали. Они экономят пространство и накладные расходы. Тем не менее, они закрывают программы, которые принимают разные имена, указывающие на разные данные. Например, если вы заменяете ссылки на дубликаты файлов жесткими ссылками на один файл, то вы удалили любую резервную копию, которая у вас есть! ОС Windows - это одна программа, которая предполагает, что разные имена указывают на разные наборы битов.

Жесткие ссылки должны быть на одном физическом и логическом томе.

Они полезны для:

  • сокращение длины пути, поскольку Windows поддерживает 256 символов или около того.

  • сокращение места хранения дубликатов файлов данных - например, вы можете создать несколько резервных копий раздела с несколькими полными деревьями каталогов, но с жесткими ссылками на файлы, которые не изменились со времени предыдущего резервного копирования.

Точки соединения сложнее и используют точки повторной обработки (чего я не понимаю). Они могут указывать на разные физические или логические тома, но они должны находиться на одном компьютере. Они, очевидно, могут использоваться как символические ссылки для каталогов, позволяя использовать второе имя для того же места назначения, но ограниченное одним компьютером, а не только одним томом.

Полезно для уменьшения длины пути или упрощения работы с несколькими программами с жестко закодированными именами каталогов.

Те же предостережения тоже! Многие программы предполагают разные имена = разные файлы.

А затем есть символические ссылки (которые могут идти через сети), ярлыки и PIFs и .....

Также некоторая информация от самой Microsoft:

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

9

Жесткая ссылка - это просто другое имя файла. Если у вас есть файл с именем A.txt и у вас есть ссылка L.txt, после удаления A.txt вы все равно будете иметь доступ к его данным через L.txt. Только когда оба файла удалены, файл исчез.

С другой стороны, у вас есть так называемая мягкая ссылка (соединение, если это папка или символическая ссылка, если это файл). В том случае, когда вы удаляете A.txt, файл действительно исчез. Удаление L.txt никак не влияет на файл.

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

PS Файл и папка в основном взаимозаменяемы, насколько NTFS идет.

0

Жесткая ссылка: работает только для того же объема.
Узел: любой локальный том
Символический: локальный том или UNC-путь

| Link Type     | Same Volume | Different Volume | UNC Path |
|---------------|-------------|------------------|----------|
| Hard link     | Yes         | No               | No       |
| Junction      | Yes         | Yes              | No       |
| Symbolic link | Yes         | Yes              | Yes      |

Бонус Болтовня

Windows создает соединения и символические ссылки для целей AppCompat; для тех плохо написанных приложений, которые думают:

  • C:\Users\All Users
  • C:\Users\ Пользователь по умолчанию

действительны.

C:\Users>dir /as

 Directory of C:\Users

04/11/2018  07:45 PM    <SYMLINKD>     All Users [C:\ProgramData]
04/11/2018  07:45 PM    <JUNCTION>     Default User [C:\Users\Default]

То же самое верно для папки профиля пользователя, для приложений, которые ожидают, что папки эры Windows XP все еще существуют сегодня:

| Folder           | Type       | Target                                                           |
|------------------|------------|------------------------------------------------------------------|    | Application Data | <JUNCTION> | C:\Users\Ian\AppData\Roaming                                     |
| Cookies          | <JUNCTION> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies         |
| Local Settings   | <JUNCTION> | C:\Users\Ian\AppData\Local                                       |
| My Documents     | <JUNCTION> | C:\Users\Ian\Documents                                           |
| NetHood          | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
| PrintHood        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
| Recent           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent            |
| SendTo           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo            |
| Start Menu       | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Start Menu        |
| Templates        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates         |
-1

Чтобы ответить программно:

Жесткая ссылка: shared_ptr <>. Всегда существует.

Мягкая ссылка: weak_ptr <>. Действует только при наличии другой жесткой ссылки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .