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

59

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

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

Аарон К
источник
С практической точки зрения ответ заключается в том, что вы почти всегда хотите использовать символическую ссылку. Насколько я понимаю, жесткие ссылки в основном предназначены для сохранения места, особенно в таких вещах, как моментальные снимки и инкрементные резервные копии, где последовательные моментальные снимки содержат много идентичных файлов, которые вряд ли изменятся в будущем.
Райан Томпсон
Должно ли это быть перенесено в Unix и Linux? См. Unix.stackexchange.com/questions/9575/…
ripper234
2
Нет, это не должно быть перенесено. Поскольку оригинальный вопрос относится не только к Unix - Windows поддерживает жесткие и программные ссылки.
Ричард Вест
1
некоторые приложения будут ломаться (а иногда и плохо), если вы используете мягкую ссылку - особенно для каталогов: мягкая ссылка будет разыменована, а когда это произойдет, и приложение сравнит, скажем /var/opt/log/appname(его config) со значением разыменования, скажем /apps/appname/logs, оно будет жаловаться это не совпадение Исправление для этого заключается в использовании mount --bind(в Linux) для перемонтирования исходного каталога в новое место.
Уоррен
1
Просто чтобы прояснить пару моментов, включенных в другие ответы ... Windows может создавать жесткие ссылки (хотя я считаю, что они ведут себя немного иначе, чем в Unix). Посмотрите на команду mklink и аргумент h. (Если вы введете mklink в командную строку, вы увидите файл справки, который включает основной синтаксис.)

Ответы:

68

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

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

(Некоторые детали вспомнили mat1t . Спасибо.)

dmckee
источник
Хорошее резюме. Каждый пользователь Linux должен знать это (хотя жесткие ссылки очень редки).
Артем Руссаковский
Ответ dmckee содержит подробности о семантике в значительной степени. Единственная деталь, которую я хотел бы добавить, - это объяснение того, что происходит на более высоком уровне: мягкая ссылка - это отдельный файл, а жесткая ссылка - это запись в каталоге, указывающая на существующие данные. В Википедии есть больше деталей о жестких и мягких ссылках.
Мистер Блестящий и Новый
хорошая сумма, очень
полезная
9
Следует также отметить, что жесткие ссылки имеют общие права доступа и информацию о владельце.
Кори С.
6
Пожалуйста, добавьте, что 2 жесткие ссылки создаются автоматически с именем. и .. каждый раз, когда вы создаете папку. В Linux это единственные действительные жесткие ссылки на папку.
Мирча Вутцовичи
10

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

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

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

Мэтью Стиплз
источник
-1

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

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

Реджинальд Кинкейд
источник
3
Нет, NTFS поддерживает жесткие ссылки и имеет NTFS 3.1 (текущая версия начиная с XP / 2003).
Крис С