Насколько я понимаю, жесткие ссылки включают в себя копию исходного файла и что я могу удалить файл с жесткими ссылками в одном каталоге, и он все равно будет существовать в другом каталоге.
Если это так, зачем мне вообще использовать жесткие ссылки? Почему бы просто не иметь два отдельных файла?
Жесткая ссылка - это обычно второе имя файла для того же файла. Таким образом, если вы жестко связываете файл, он будет только один раз в файловой системе и, следовательно, будет занимать место только один раз. Таким образом, вы хотите использовать это, если вы хотите сэкономить дисковое пространство
источник
В файловых системах Unix каждое имя файла на самом деле представляет собой жесткую ссылку на местоположение данных на диске, называемую inode. Если вы создадите новую жесткую ссылку на существующий файл, это не займет дополнительного места на диске, поскольку это просто еще один указатель на те же данные. Если вы редактируете данные по той или иной ссылке (или редактируете inode напрямую), оба файла будут изменены.
Система ведет подсчет того, сколько жестких ссылок имеет каждый индекс. Когда количество ссылок равно 0, файл больше не может быть достигнут, и данные помечены как безопасные для перезаписи. Таким образом, при наличии файла с 2 жесткими ссылками, если вы удалите любую ссылку, данные не будут удалены. Только если вы удалите оба, данные исчезнут.
Вы можете увидеть номера файлов inode, используя
-i
переключатель кls
команде.Мягкая ссылка, с другой стороны, указывает на другой файл по имени файла. Если вы переместите или удалите исходный файл, ссылка будет разорвана.
источник
Со ссылкой на часть вопроса, которая задала вопрос «зачем мне вообще использовать жесткие ссылки?»:
Файлы с жесткой связью (или, в этом отношении, файлы с мягкой (символической) связью предлагают полезный способ иметь один исполняемый файл, который можно сделать для маскировки для различных целей.
То есть имя, по которому вызывается код, может быть проверено, чтобы определить, какие параметры доступны для выполнения. Это позволяет разрабатывать и упаковывать один большой кусок кода со всеми общими функциями, необходимыми для слегка разных целей. С точки зрения пользователя, спецификация «что» для запуска (по имени) ограничивает выбор и представление более управляемым подмножеством опций.
Классический пример - LVM. В свое время HP-UX используются файлы жестко связаны для различных исполняемых файлов (например
vgdisplay
,vgcreate
,vgextend
и т.д. В настоящее время , как Linux, эти команды на самом деле символические (мягкие) ссылки кlvm
исполняемым.источник