Содержание
Эта статья – одна их тех, которые я собирался писать годами, но всё руки не доходили. Не буду вокруг да около, в рамках челленджа нет места лени – буду писать!
Что такое ссылка
Со ссылками я познакомился ещё в Linux, тогда же они показались прикольным изобретением! И до недавнего времени я не знал, что ссылки есть и в Windows. Ну если не брать во внимание ярлыки – то хоть и похоже на ссылку, но всё-таки немного не то, о чём идёт речь.
Смысл ссылок становится понятен, когда немного разберёшься в том, как устроена файловая система. Что в общем виде объект “файл” ссылается на какой-либо кластер в файловой системе, в котором лежат его данные. Так вот, может быть так, что на один и тот же кластер ссылается более, чем один файл.
Какие бывают ссылки
Разумеется, ссылки бывают различных видов. Как и в системах на базе Linux.
Жёсткие ссылки
Действительны только в пределах одного раздела (это как раз тот тип, о котором я говорил – когда в MFT одна файловая запись указывает на тот же самый кластер, что и другая. Файл на диске живёт, пока есть хотя бы одна жёсткая ссылка на него. Ну и разумеется, работает только с файлами.
Символьные ссылки
Может указывать на файлы или каталоги, а также указывать на объект на другом разделе. Нечто похожее на ярлык, только более низкоуровневое.
Точки присоединения
Работают только с каталогами. Возможно вы сталкивались с возможностью создания точки присоединения в окне создания нового раздела:
Иначе говоря, можно одну папку отобразить на другую.
Чтобы это было понятно – вспомните, например, как в XP было “Documents and Settings”, а начиная с Windows 7 стало “Users”, но можно залезть на “Documents and Settings” (оставлено для совместимости) и попасть туда же… Также и ProgramData и ряд других специальных каталогов, которые являются ничем иным, как точками присоединения.
Зачем нужны ссылки
Исходя из видов ссылок вытекают и варианты их использования.
- Если на разделе заканчивается место, можно “перенести” части какой-либо тяжёлой программы/игры, указав соответственно символьные ссылки на новое место. Программа будет работать с файлами на другом разделе так же, как если бы они были у неё под боком.
- Если нужно открыть доступ только лишь к некоторым файлам на закрытом сетевом ресурсе и не хочется копировать эти файлы в общедоступный каталог – можно создать жёсткие ссылки на них в этом каталоге, унаследуя права доступа каталога файлы будут доступны, однако дисковое место не будет занято дублями.
- Можно обойти ограничение в 260 символов пути в Windows, об этом я уже писал тут.
- Да мало ли чего ещё может придумать мозг админа!
Примеры работы со ссылками
Для создания ссылок есть много различных программ. Я использую “Link Shell Extension“, для проводника Windows. Есть плагины для Total Commander, Far Manager и даже консольные программы.
После установки программы достаточно кликнуть правой кнопкой мыши на файловом объекте:
Затем перейти в каталог, где требуется создать ссылку и выбрать соответствующий пункт:
Готово! Вы – великолепны!
От Sysinternal есть неплохая утилитка – Junctions – хорошо работает с точками привязки. Работать с ней можно так (с правами администратора):
> junction64.exe "C:\Users\Dmitry\Music" "E:\Music"
Готово! Теперь наш каталог Music в профиле пользователя ссылается на другой жёсткий диск и соответствующий каталог “E:\Music”.
С помощью этой же программы можно перенести папки приложений, которые любят “забиваться” – например iTunes и т.д., из Application Data куда-нибудь, где побольше места, не забивая профиль пользователя.
Ну и немаловажно познакомиться с командой mklink в Windows:
Дополнение! Вот написал статью и уже через неделю пригодились знания – мелочь, а приятно. Поделюсь кейсом.
Было нужно заставить корректно работать одну программу, которая искала свою базу в каталоге P:\PROGA\BAZA (условно), но под буквой P: был сетевой диск, который ссылался на каталог P:\PROGA другого компьютера, там P – логический (на корень P$ не получилось сделать, хз почему).
Так вот, на обоих компах одна и та же прога. Пути к базам жёстко зашиты внутри, менять нельзя (прога под DOS). И вот на одном нужно заставить прогу видеть базу по родному пути P:\PROGA\BAZA, а на втором – по P:\BAZA, но чтобы она думала, что путь точно такой же.
Как решал:
Перешёл в каталог P:\PROGA и создал Junction Point с именем PROGA, который ссылается на “.” – текущую папку.
Таким образом первая прога видит свой путь без изменений по P:\PROGA\BAZA, а вторая – заходит на диск P:, заходит на Junction с именем PROGA (думая, что это каталог PROGA) и попадает снова на свой диск P: (думая, при этом, что она уже в P:\PROGA) и смело идёт дальше в BAZA.
В общем организовал небольшую петлю, но это сработало! И радости не было предела.
Comments: