В одном из предыдущих постов я описывал процесс создания символических ссылок в Windows, где упомянул, что помимо них существуют ещё жёсткие ссылки. Там же я обещал отдельно рассказать об их отличии друг от друга.
Если говорить простыми словами, то символическая ссылка — это ссылка на имя файла. Вне зависимости от того, что именно лежит на диске под этим именем. Т.е. если мы удалим файл, на который до этого указывала символическая ссылка, а потом заменим его на совсем другой, но с таким же именем, по существующей ссылке будет открываться новый файл.
Жёсткая ссылка — это фактически указатель на область диска, содержащую файл. Жёсткую ссылку можно понимать как ещё одно, полностью равноправное, имя файла. Здесь важно помнить, что удаление
Cравнение жёстких и символических ссылок
Покажем, как работают жёсткие и символические ссылки и различия в их поведении на примере. Для этого запустим консоль (терминал) Mac OS X или другой *nix системы. Здесь будет использоваться терминал Mac OS X, однако, используемые команды должны работать в любой *nix системе (Linux, AIX и т.д.).
Для начала, создадим файл file.a а содержимым «aaa»:
1 |
echo "aaa" > file.a |
Затем, создадим на него две ссылки: символическую и жёсткую:
1 2 |
ln -s file.a link1 ln file.a link2 |
Теперь попробуем прочитать содержимое файла по обеим ссылкам:
1 2 3 4 |
cat link1 aaa cat link2 aaa |
Обе ссылки работают нормально.
А сейчас, удалим оригинальный файл и попробуем прочитать по ссылкам его содержимое ещё раз.
1 2 3 4 5 |
rm file.a cat link1 cat: link1: No such file or directory cat link2 aaa |
Первая (символическая) ссылка оказывается битой, а по второй (жёсткой) ссылке по-прежнему находится файл с содержимым «aaa»:
Создадим новый файл с тем же именем file.a, но с другим содержимым:
1 |
echo "bbb" > file.a |
А теперь снова попробуем прочитать его содержимое по ссылкам.
1 2 3 4 |
cat link1 bbb cat link2 aaa |
Первая (символическая) ссылка снова работает, и по ней находится новый файл, с содержимым «bbb». А вот вторая (жёсткая) ссылка всё ещё указывает на старый файл с содержимым «aaa».
В графическом интерфейсе Mac OS X папка, где мы проводили этот эксперимент, будет выглядеть следующим образом:
Система называет символьную ссылку «псевдонимом» файла. А вот жёсткую ссылку она воспринимает так же, как и обычный файл.
Выводы
Чтобы полностью удалить информацию, содержащуюся в файле, для которого создано несколько жёстких ссылок, необходимо удалить каждую их них. Также, жёсткая ссылка, в силу своей природы (указывание непосредственно на область диска, где находится информация), никогда не будет «битой». Эти свойства жёстких ссылок активно используются в *nix операционных системах.
Символическая ссылка, де-факто, является «ярлыком» для файла, и в случае удаления последнего может перестать работать, т.к. будет указывать на уже несуществующий файл.
Возможностью создания символических ссылок в Windows я воспользовался для более удобной организации проектных файлов при разработке нового дизайна этого сайта. Об этой своей маленькой хитрости, позволившей мне «обмануть» один плагин для PhpStorm от JetBrains, я расскажу в следующем посте.
Полезная статья? Их будет больше, если вы поддержите меня!