Чем отличается жёсткая ссылка от символической?

Разрывающаяся цепь

В одном из предыдущих постов я описывал процесс создания символических ссылок в Windows, где упомянул, что помимо них существуют ещё жёсткие ссылки. Там же я обещал отдельно рассказать об их отличии друг от друга.

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

Жёсткая ссылка — это фактически указатель на область диска, содержащую файл. Жёсткую ссылку можно понимать как ещё одно, полностью равноправное, имя файла. Здесь важно помнить, что удаление

Cравнение жёстких и символических ссылок

Покажем, как работают жёсткие и символические ссылки и различия в их поведении на примере. Для этого запустим консоль (терминал) Mac OS X или другой *nix системы. Здесь будет использоваться терминал Mac OS X, однако, используемые команды должны работать в любой *nix системе (Linux, AIX и т.д.).

Для начала, создадим файл file.a а содержимым «aaa»:

echo "aaa" > file.a

clip_image001

Затем, создадим на него две ссылки: символическую и жёсткую:

ln -s file.a link1
ln file.a link2

clip_image002

Теперь попробуем прочитать содержимое файла по обеим ссылкам:

cat link1
aaa
cat link2
aaa

clip_image003

Обе ссылки работают нормально.

А сейчас, удалим оригинальный файл и попробуем прочитать по ссылкам его содержимое ещё раз.

rm file.a
cat link1
cat: link1: No such file or directory
cat link2
aaa

clip_image004

Первая (символическая) ссылка оказывается битой, а по второй (жёсткой) ссылке по-прежнему находится файл с содержимым «aaa»:

Создадим новый файл с тем же именем file.a, но с другим содержимым:

echo "bbb" > file.a

clip_image005

А теперь снова попробуем прочитать его содержимое по ссылкам.

cat link1
bbb
cat link2
aaa

clip_image006

Первая (символическая) ссылка снова работает, и по ней находится новый файл, с содержимым «bbb». А вот вторая (жёсткая) ссылка всё ещё указывает на старый файл с содержимым «aaa».

В графическом интерфейсе Mac OS X папка, где мы проводили этот эксперимент, будет выглядеть следующим образом:

clip_image007

Система называет символьную ссылку «псевдонимом» файла. А вот жёсткую ссылку она воспринимает так же, как и обычный файл.

Выводы

Чтобы полностью удалить информацию, содержащуюся в файле, для которого создано несколько жёстких ссылок, необходимо удалить каждую их них. Также, жёсткая ссылка, в силу своей природы (указывание непосредственно на область диска, где находится информация), никогда не будет «битой». Эти свойства жёстких ссылок активно используются в *nix операционных системах.

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

Возможностью создания символических ссылок в Windows я воспользовался для более удобной организации проектных файлов при разработке нового дизайна этого сайта. Об этой своей маленькой хитрости, позволившей мне «обмануть» один плагин для PhpStorm от JetBrains, я расскажу в следующем посте.

Полезная статья? Их будет больше, если вы поддержите меня!

https://money.yandex.ru/embed/small.xml?account=410011399843532&quickpay=small&yamoney-payment-type=on&button-text=06&button-size=l&button-color=orange&targets=%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D1%8E+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82+lexpenz.com&default-sum=50&successURL=