Нет, жесткая ссылка совершенно другая. Мягкая ссылка ближе к ярлыку Windows (хотя есть важные различия, символические ссылки больше похожи на ярлыки Windows, чем жесткие ссылки). Жесткая ссылка - это совсем другое, и она вам почти никогда не понадобится.
Вкратце, мягкая ссылка создается с помощью этой команды:
ln -s foo bar
Если вы затем запустите ls -l
, вы увидите:
lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
В ->
означает , что bar
является ссылкой foo
. Таким образом, открытие bar
, например, с помощью текстового редактора, фактически откроет отдельный файл foo
. Тем не менее, удаление bar
будет просто удалить ярлык, это не повлияет на файл foo
.
Жесткие ссылки, с другой стороны, создаются с помощью этой команды:
ln foo bar
Если вы сейчас запустите ls -l
, нет никаких признаков какой-либо связи между файлами:
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
Но - и это очень важно - это фактически один и тот же файл . Файлы в файловых системах Unix хранятся с использованием инодов ; inode - это, по сути, способ, которым файловая система отображает имя файла в определенном месте на физическом жестком диске. Таким образом, жесткие ссылки - это файлы, которые указывают на тот же индекс, что и их цель. Другой способ выразить это так: все файлы на самом деле являются жесткими ссылками, указывающими на их иноды. Создание жесткой ссылки на файл просто создает новый указатель (файл) в файловой системе, который указывает на тот же индекс. Каждый индекс может иметь несколько файлов, указывающих на него, либо один, либо ни одного.
Чтобы понять это более четко, используйте, ls -i
который показывает индекс, связанный с файлом. Давайте создадим мягкую ссылку и жесткую ссылку и посмотрим, что произойдет:
ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
Теперь проверьте их inode:
Как вы можете видеть выше, оба foo
и HardLinkToFoo
имеют один и тот же индекс (16648029), тогда как SoftLinkToFoo имеет другой (16648036).
Что произойдет , если мы переименуем foo
с mv foo bar
?
Красный цвет указывает на сломанную мягкую ссылку, цель которой больше не может быть найдена. Это связано с тем, что программные ссылки указывают на имя файла, а не его индекс. Обратите внимание, что несмотря на изменение имени, индекс остается неизменным, так что с жесткой связью все в порядке, он все еще работает.
Таким образом, жесткие ссылки на самом деле являются двумя проявлениями одного и того же файла; они являются указателями на один и тот же раздел диска. Мягкие ссылки - это просто ярлыки. Чтобы провести реальную аналогию, жесткие ссылки - это два разных телефонных номера для одной и той же телефонной линии, а программные ссылки - как две разные телефонные линии в одном доме.