Что такое жесткая ссылка в Linux?

9

Я искал вокруг и пытаюсь понять разницу между жесткой ссылкой и символической ссылкой (soft link).

Я нашел эту ссылку довольно полезной. Но мне все еще не очень ясно. Я понимаю, что мягкая ссылка не является копией исходного файла, но является ли жесткая ссылка копией или нет?

ICN
источник

Ответы:

15

Чтобы использовать аналогию с доставкой почты, символическая ссылка - это что-то вроде адреса пересылки ... когда кто-то пытается открыть символическую ссылку, он открывает «файл» (не буквально файл), сохраненный там, и видит, что он Вместо этого следует взглянуть на файл с другим именем, поэтому он откроет другой файл.

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

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

Flimzy
источник
+1 за очень хорошую аналогию, которая упростила бы меня, когда я пытался обдумать это.
Джон Гарденье
1
+1, но две второстепенные детали: 1) Возможно иметь несколько адресов для одного и того же места в реальном мире, просто не часто. 2) Возможно, самое важное различие между жесткой ссылкой и копией состоит в том, что, если у вас есть /fooи /bar, изменение /fooтакже изменится, /barесли это жесткие ссылки (потому что это два имени для одного и того же файла), но не если они копии (потому что это два совершенно независимых файла).
Дейв Шерохман
3

Нет. Вторая (и все последующие) жесткая ссылка на файл - это указатель на те же самые inode на диске.

Игнасио Васкес-Абрамс
источник
3

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

С другой стороны, символическая ссылка - это направление доступа к файлу с определенным именем. Он говорит любой программе: «Если вы хотите использовать этот файл, он там». Вот почему, если вы удалите цель символической ссылки, символическая ссылка прекратит работу. И если вы удалите ссылку, цель не будет затронута.

Майкл Лоуман
источник
2

Файл в * nix системе состоит из двух частей. одна часть данных, а другая - inode. В inode хранится мета-информация (информация, относящаяся к данным, например, место, где она хранится на жестком диске). Жесткая ссылка делает создает точную копию этого inode. В то время как ссылка sym создает индекс, который указывает на индекс фактического индекса. Таким образом, данные inode в hardlink такие же, как target, но разные данные в sym link. Короче говоря, ссылки sym и жесткие ссылки различаются по содержанию данных inode, а не данных файла. Это мое понимание разницы между символьной ссылкой и жесткой ссылкой. Поначалу мне было непросто понять это, так как это что-то более сложное для разработчиков, и я не разработчик. О знающие, поправьте меня, если я ошибаюсь.

bagavadhar
источник
3
«Каталог» в * nix - это список имен файлов и номеров инодов. Жесткие ссылки - это две записи каталога, которые имеют одинаковый номер инода и, следовательно, ссылаются на точно такой же инод, а не на копии инода. Символьная ссылка - это запись каталога, которая указывает на другую запись каталога (по имени), а не на какой-либо конкретный индекс. (Ладно, на самом деле он имеет индекс, но этот индекс относится к записи каталога, а не к файлам данных.)
Рэнди Оррисон,