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

Разрывающаяся цепь
{lang: 'ru'}

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

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

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

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

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

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

clip_image001

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

clip_image002

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

clip_image003

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

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

clip_image004


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

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

clip_image005

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

clip_image006

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

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

clip_image007

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

Выводы

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

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

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


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