Вопрос: В чем разница между мягкой (символической) ссылкой и жесткой ссылкой?


Я слышал, что теперь можно создавайте софт-ссылки в Vista тоже, Итак, в чем разница между мягкой (символической) ссылкой и жесткой ссылкой в ​​UNIX / Linux / Vista?

Есть ли преимущества использования одного над другим? Или они просто служат двум целям?


55
2018-05-20 20:58


Источник


В практическом плане ответ заключается в том, что вы почти всегда хотите использовать символическую ссылку. Я понимаю, что жесткие ссылки в основном предназначены для сохранения пространства, особенно в таких моментах, как моментальные снимки и инкрементные резервные копии, где в последовательных моментальных снимках есть много одинаковых файлов, которые вряд ли будут изменяться в будущем. - Ryan Thompson
Должно ли это быть перенесено в Unix & Linux? Видеть unix.stackexchange.com/questions/9575/... - ripper234
Нет, он не должен мигрировать. Поскольку исходный вопрос не относится только к Unix - Windows поддерживает жесткие и мягкие ссылки. - Richard West
некоторые приложения будут ломаться (а иногда и плохо), если вы используете мягкую ссылку - особенно для каталогов: softlink будет разыменован, а когда это будет и приложение сравнится, скажем /var/opt/log/appname (его config) с разыменованным значением, скажем, /apps/appname/logs, он будет жаловаться, что это не совпадение. Исправить это - использовать mount --bind (в Linux), чтобы перемонтировать исходный каталог в новое место. - warren
Просто прояснить пару вопросов, включенных в другие ответы ... Windows может создавать жесткие ссылки (хотя я считаю, что они ведут себя несколько иначе, чем в Unix). Взгляните на команду mklink и аргумент h. (Если вы введете mklink в командную строку, вы увидите файл справки, который содержит базовый синтаксис.)


Ответы:


Жесткая ссылка традиционно разделяет одни и те же структуры файловой системы (inode в unixspeak), а soft-link - перенаправление пути.

  • Жесткие ссылки должны быть в одной файловой системе, программные ссылки могут пересекать файловые системы.
  • Файлы с жесткой привязкой остаются связанными, даже если вы перемещаете любой из них (если вы не переместили одну из них в другую файловую систему, запускающую механизм копирования и удаления). Софтсвязанные файлы ломаются, если вы перемещаете цель (оригинал), а иногда и при перемещении ссылки (используется ли абсолютный или относительный путь?).
  • Файлы с жесткой привязкой совпадают, в то время как оригинал является специальным в программных ссылках, а удаление оригинала удаляет данные. Данные не исчезают до тех пор, пока все hardlinks удаляются.
  • Софтлинки могут указывать на Любые , но большинство ОС / файловых систем запрещают каталоги жесткой привязки для предотвращения циклов на графике файловой системы (за исключением . а также .. записи в каталогах unix, которые являются жесткими ссылками).
  • Softlinks может потребовать особой поддержки от инструментов для ходьбы в файловой системе. Следить за публикациями readlink (2),

(Некоторые детали вернулись к mat1t, Благодаря.)


66
2018-05-20 21:12



Хорошее резюме. Каждый пользователь Linux должен это знать (хотя жесткие ссылки очень необычны). - Artem Russakovskii
Ответ dmckee имеет очень подробные сведения о семантике. Единственная деталь, которую я бы добавил, - это объяснение того, что происходит на более высоком уровне: мягкая ссылка - это файл сам по себе, а жесткая ссылка - это запись каталога, указывающая на существующие данные. Википедия имеет более подробную информацию о жесткий а также мягкий ссылки. - Mr. Shiny and New 安宇
хорошая сумма, очень полезно - Razique
Следует также отметить, что жесткие ссылки разделяют разрешения, а также информацию о собственности. - Corey S.
Пожалуйста, добавьте, что 2 жестких ссылки автоматически создаются с именем. и .. каждый раз, когда вы создаете папку. В Linux это единственные действующие жесткие ссылки на папку. - Mircea Vutcovici


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

Если вы удалите цель софт-ссылки, то программная ссылка перестанет работать, но если вы удалите одну копию жесткой ссылки, файл останется на диске, пока все жесткие ссылки на нее не будут удалены. Фактически все имена файлов являются жесткими ссылками на файл на диске.

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


10
2018-05-20 21:12





Система MS Windows всегда использует программные ссылки (ярлыки). То есть, ссылка просто действует как ярлык, указывающий на расположение файла. Если местоположение оригинала перемещено, соединение прерывается. Кроме того, то, что вы делаете с ярлыком (например, изменение разрешений или изменение имени ярлыка), не влияет на фактический файл.

Поэтому вопрос начался с неправильного предположения. Да, Vista использует программные ссылки, но это не ново, это waht ярлык MS.


-1
2018-04-18 18:20



Нет, NTFS поддерживает hardlinks и имеет с NTFS 3.1 (текущая версия с XP / 2003). - Chris S