Ссылки в Windows, символьные и не только
Предыстория
В своём топике "Впечатления от Яндекс.Субботника" хабрачеловек absolvo высказал удивление, что один из докладчиков не знал о том, что символьные ссылки есть и в Windows. Честно говоря, не знал этого и я, поэтому поинтересовался об этих ссылках в комментариях.
Думаю, то, что удалось выяснить, может показаться кому-нибудь полезным.

Сразу оговорюсь, что под ссылками в Windows я понимаю ссылки в NTFS. В FAT механизмов ссылок, насколько мне известно, предусмотрено не было.
Ядро Windows поддерживает следующие виды ссылок:
- Hard Links — жёсткие ссылки, как в *nix. Доступны начиная с Windows NT4.
- Junction Points — аналог символических ссылок. Доступен начиная с Windows 2000 (NTFS 5).
- Symbolic Links — символьные ссылки. Доступны начиная с Windows Vista.
Hard Links можно создавать только на файлы, Junction Points — только на директории, Symbolic Links — на файлы и директории. В дальнейшем под «жёсткими ссылками» подразумеваются Hard Links, под «символьными» — Junction Points и Symbolic Links.
Жёсткие ссылки действительны в пределах одного раздела, символьные — могут пересекать границы разделов. В связи с этим символьные ссылки могут поломаться, если структуру разделов поменять.
Не со всем, что поддерживается ядром, умеет нормально работать эксплорер. Будьте осторожны при использовании Junction Points в версиях Windows до Vista. При удалении Junction Point эксплорер может залезть внутрь директории, на которую ссылается Junction Point и поудалять там всё, а затем удалить Junction Point, хотя должен лишь удалить ссылку. Наверняка могут возникнуть проблемы и при перемещении или копировании Junction Point'ов.
Мне неизвестно, нормально ли в версиях Windows до Vista относятся к Junction Points стандартные утилиты типа rmdir.
Дополнительные материалы по теме
Отмечу англоязычную статью, в которой описаны нюансы использования ссылок и некоторые программы, позволяющие с ними работать. Статья устаревшая, так что в ней говорится только о Hard Links и Junction Points (причём на последние в статье нередко ссылаются, как на symbolic links...).
По словам хабрачеловека SamDark , хорошее описание всех видов ссылок есть ещё в справке по NTFS Links (дополнению для Total Commander, см. ниже).
Софт
Теперь можно перейти к рассмотрению программ для работы со ссылками. Да-да, если вы не пользуетесь FAR (см. ниже), вам понадобятся отдельные программы. Все программы, перечисленные ниже, бесплатны.
Утилиты от Microsoft
Windows >= Vista
В Windows Vista добавили команду
mklink для создания символьных и жёстких ссылок (спасибо за информацию хабрачеловеку metamorph ).Windows >= 2000
fsutil hardlink create ссылка файлСоздаёт Hard Link на файл (источник).
linkd ссылка директорияСоздаёт Junction Point на директорию (источник). Утилита входит в Microsoft Windows Resources Kit.
Расширения для Explorer
NTFS Link интегрируется в Explorer и добавляет во всплывающее меню, появляюшееся после перетаскивания правой кнопкой мыши, пункты «Create junction point» и «Create hard link». Кроме того, она перехватывает вызовы Explorer'а, обеспечивая нормальное перемещение/копирование/удаление созданных ссылок.
NTFS Links (не путать с дополнением для Total Commander, см. ниже) — абсолютно аналогичная программа. Спасибо за комментарий хабрачеловеку vpbar .
Я рекомендую: Link Shell Extension — аналогичная программа, обладающая расширенным функционалом и очень подробным описанием. Спасибо за комментарий хабрачеловеку versia .
NTFS Links — дополнение для Total Commander
Страница программы (за информацию спасибо хабрачеловеку SamDark ). Плагин может запускаться как отдельная программа, вне Total Commander'а.
FAR
Консольный файловый менеджер FAR уже давно поддерживает Hard Links и Junction Points «из коробки». Для создания ссылки используйте сочетание клавиш Alt-F6 ;-) Спасибо за комментарий хабрачеловеку 4xis .
Junction Link Magic
Junction Link Magic — программа с графическим интерфейсом для создания, изменения и модификации Junction Points. Спасибо за комментарий хабрачеловеку vady .
Junction — консольная программа для создания Junction Points
Junction лучше, чем
linkd, тем, что не нужно тащить весь Resource Kit :-) Спасибо за комментарий хабрачеловеку corp .UPD: обновил топик с учётом комментариев.



комментарии (102)