- Жесткие и символьные (символические) ссылки в Windows
- Жесткие и символьные (символические) ссылки в Windows
- Виджеты на рабочий стол
- В Экселе не двигается курсор по ячейкам: в чем может быть проблема?
- Не работает правая кнопка мыши в Excel: где кроется проблема?
- Не работает фильтр в Excel: загвоздка, на которую мы часто не обращаем внимания
- Не отображаются листы в Excel: как вернуть вкладки без танцев с бубнами
- Жесткие ссылки или Hard Link
- Символьные ссылки или Symbolic Link
- Символические ссылки Windows – работа с MKLINK.
- СПРАВКА, или что такое ссылка для Windows?
- Чем отличаются символьные ссылки от стандартных ярлыков?
- Создавая ссылки для Windows: mklink
- А зачем это надо-то?
- Ссылки Windows из mklink: о чём следует помнить?
- Точки стыка (жёсткие связи), соединения и символические ссылки файловой системы NTFS
Жесткие и символьные (символические) ссылки в Windows
Жесткие и символьные (символические) ссылки в Windows
Виджеты на рабочий стол
В Экселе не двигается курсор по ячейкам: в чем может быть проблема?
Не работает правая кнопка мыши в Excel: где кроется проблема?
Не работает фильтр в Excel: загвоздка, на которую мы часто не обращаем внимания
Не отображаются листы в Excel: как вернуть вкладки без танцев с бубнами
Если вам когда-то приходилось просматривать расположения файлов штатных программ Windows, то возможно вы замечали одну странность. Некоторые файлы приложений дублируются, причем несколько раз. Например, в 64-разрядной Windows 8.1 обнаруживается целых 6 исполняемых файлов Блокнота notepad.exe, находящихся в разных каталогах системного раздела. Зачем вообще нужно такое странное дублирование?
А необходимо оно для обеспечения совместимости со сторонними приложениями, использующими Блокнот для каких-то своих нужд. Причина проста – в разных программах прописанный путь к Блокноту может отличаться, и чтобы исключить проблемы, разработчики Microsoft решили разместить notepad.exe в нескольких местах. То же самое касается ряда других штатных приложений, например, WordPad.
Жесткие ссылки или Hard Link
На самом деле дублирование совсем необязательно должно иметь место. То, что вы видите и определяете как реальный файл, в действительности может оказаться Hard Link — ссылкой особого типа, используемой для формирования путей к какому-нибудь файлу. Такие ссылки называются жесткими. Любопытно, что файл в NTFS может иметь до 1023 жестких ссылок, и все они будут выглядеть как его точная копия за исключением имени и размера. Как и ярлыки, жесткие ссылки могут иметь разные имена.
Зато содержимое и атрибуты у них общие, и если вы измените их в одной такой ссылке, то изменения коснуться всех остальных ссылок, даже тех, которые были удалены в Корзину. Что касается размера жестких ссылок, то это всего лишь одна видимость. Не имеющие практически никакого веса, ссылки этого типа определяются Проводником как имеющие реальный вес файлы, что иногда вызывает у пользователей немало вопросов и затруднений при ручной очистке ряда системных каталогов, того же Winsxs. Есть у Hard Link и свои ограничения. Так, создавать жесткие ссылки можно только на файлы и только в пределах одного тома.
К счастью, сталкиваться с жесткими ссылками рядовым пользователям приходится нечасто, иначе это наверняка бы привело к неразберихе и серьезным проблемам. Описывать все особенности поведения жестких ссылок мы не будем, так как это заняло бы слишком много времени. Вместо этого предлагаем вам создать Hard Link самостоятельно и поэкспериментировать с ними. Вот вам пример. Создайте на рабочем столе простой текстовый файл file1.txt и что-нибудь напишите в него. Теперь откройте командную строку и создайте на него пару жестких ссылок с именами file2.txt и file2.txt. Вот так:
fsutil hardlink create file2.txt file1.txt
fsutil hardlink create file3.txt file1.txt
Обратите внимание, что после команды create первым идет имя жесткой ссылки, а затем имя оригинального файла. Также вы можете создавать жесткие ссылки на другие жесткие ссылки. В общем, развлекайтесь. Уверен, что вы найдете для себя немало интересного.
Символьные ссылки или Symbolic Link
В отличие от жестких, символьные ссылки или Symbolic Link обладают большей гибкостью. Предназначаются они для удобной организации объектов файловой системы, а также оптимизации производительности приложений на SSD-дисках. Ссылки этого типа могут создаваться и для файлов, и для каталогов, в том числе сетевых; они поддерживают связь между томами, используя относительные пути. Принципом работы символьная ссылка напоминает обычный ярлык.
Использование Symbolic Link может иметь смысл при необходимости получения доступа к одному файлу из разных мест. Создаются символьные ссылки командой mklink:
mklink D:\file2.txt %userprofile%\desktop\file1.txt
Первым после команды идет путь к символьной ссылке, вторым – путь к оригинальному файлу. Если нужно создать символьную ссылку для каталога, используется та же команда mklink, но с ключом \d.
mklink \d D:\folder2 %userprofile%\desktop\folder1
Внешне символьные ссылки почти ничем не отличаются от обычных ярлыков, за исключением пометки symlink в свойствах файла или даты создания вместо пути к оригиналу в каталоге. Также если вы удалите оригинал, а затем попробуете перейти по символьной ссылке, то она просто не откроется, тогда как при попытке открыть битый ярлык появится сообщение о недоступности оригинального файла. Но самое главное отличие от ярлыков в том, что при работе с символьными ссылками Windows по-прежнему будет считать, что вы работаете с оригинальным объектом.
На этом пока все. В следующий раз мы рассмотрим способ применения символьных ссылок на более конкретных примерах, а заодно узнаем, какие используются утилиты для работы с жесткими и символьными ссылками.
Символические ссылки Windows – работа с MKLINK.
Как создаются и работают ссылки Windows, или что можно сделать при помощи mklink.
Внутренние символьные ссылки Windows чем-то напоминают ярлыки. Они создаются системой с единственной целью: заставить Windows думать, что папка или файл, реально или физически располагающиеся на диске (разделе) 1, нужно искать на диске (разделе) 2. При этом и создаётся ссылка, которая сохраняет все свойства при операциях с объектами – при добавлении файлов в эту папку ссылка переносит их именно в реально (физически) существующее местоположение. Таким образом, символьная или символическая ссылка Windows позволяет отображать папку C:\Директория1\ как, например, D:\Директория2\. При этом “подлога” не заметит ни вкрадчивый пользователь, ни даже служебные программы. Если для вас этого немного сложновато, то вы сейчас увидите, что таких ссылок и “поддельных” папок в Windows очень много. А некоторых директорий и системных папок, к которым мы привыкли относится как к неприкосновенным, …вообще не существует: это и есть обыкновенные для Windows символические ссылки. Созданные с их помощью “виртуальные” папки хранятся только на диске RAM.
СПРАВКА, или что такое ссылка для Windows?
Ссылка сама по себе – это цепочка символов, которая указывает/перенаправляет на объект, реально или физически существующий. Нужно различать постоянные (фиксированные, жёсткие – хардлинки) и гибкие (временные, символьные – симлинки) ссылки. Первые – когда, файл указывает на файл. Во втором случае – а это как раз наш – виртуальная папка указывает на целевую. Кроме всего, есть ещё и связующие ссылки, которые по сути являются теми же прямыми, но соединяют не файлы, а, используя различные переходы, папки и директории. При этом все папки остаются на прежних местах. Подробнее о типах ссылок в NTFS-системе – в конце статьи.
Если вы перешли на современную платформу со времён ещё Windows XP, вы можете вспомнить, что все пользовательские данные тогда хранились в одной только папке – C:\Documents and Settings. Она была отправной точкой для остальных папок и файлов. Со времён Vista базовых папок стало две: С:\Пользователи (данные программ и настроек для конкретной учётной записи) и C:\ProgramData (данные для всей системы в целом, которые разделяли все установленные в Windows Vista/7 программы и приложения: и встроенные и со стороны). Однако, с целью обеспечения обратной совместимости с приложениями для предыдущих поколений Windows, папку C:\Documents and Settings … решили пока оставить. Вот так: физически её давно уже не существует, однако в проводнике она отображена. И успешно содержит в себе две указанные выше папки нового поколения Windows. Если не очень заняты, полюбопытствуйте прямо сейчас, обратив внимание на само содержимое папок:
А вот она в Windows 7:
загляните внутрь папки Documents and Settings: ничего не замечаете?
А в Windows 10 этой папки нет? Вскроем скрытые файлы и папки:
Да нет, всё на месте:
Обратите внимание на Cвойства папки. Если вы не проводили дополнительный операций с разрешениями для папок и файлов, папку Documents and Setting вы вообще не сможете открыть. И всё по той же причине: её просто не существует, но “старым” службам и программам она необходима по определению. Так, Windows сохранила в своё время за пользователями право использовать устаревшие, но привычные (и, тем более, оплаченные по лицензии) программы. Особенно это касается пакета Microsoft Office. А та, как вы уже поняли, без папки обойтись не могла. Кстати, в этих фактах и кроется небольшая для первооткрывающих ссылки загадка: создаются они в основном для системных нужд. Вообще, все символьные ссылки в Windows делятся на две условные категории: системные связи и связи конечного пользователя. При этом по умолчанию символьные ссылки система для нас с вами не создаёт.
Чем отличаются символьные ссылки от стандартных ярлыков?
Да, на первый взгляд ничем. По крайней мере, функции очень похожи. Но, присмотревшись, разницу можно увидеть и обычному пользователю. Начать можно с того, что символьная ссылка является неким указателем, работающем на уровне файловой структуры. Ярлык – порождение конкретного процесса. То бишь Проводника (он же explorer.exe). Таким образом ярлык – реально существующий и занимающий конкретное пространство файл, а символьной ссылки как таковой не существует. Это типа такой “призрак”, системная голограмма, артефакт (он всегда весит 0 байт). В этом легко убедиться, создав ссылку и ярлык для одного объекта и посмотрев их Свойства.
Далее. Ярлык – файл, содержащий в себе конкретный путь от точки А в точку Б. Смысл его работы прост – дважды щёлкнули и перенеслись в нужном направлении. Всё: ярлык “появился” и “исчез” в ожидании следующего вызова. Символьная ссылка живёт постоянно и начинает работу вместе с включением системы. Так, щёлкнув по ярлыку, тот переносит вас к конкретному файлу или папке. Щёлкая по одноимённой символьной ссылке, создаётся впечатление, что в папке уже существует целый набор файлов. В этом (в том числе) вы можете убедиться, используя командную консоль: добраться до нужной папки вы можете, “зарядив” ссылку. В консоли такая операция с ярлыком не прокатит.
Таким образом, в отличии симлинка от обычного ярлыка и кроется её основное предназначение: Windows относится к симлинку как к настоящей папке. Т.е. разницы между ними нет. Одна и та же папка может находится сразу в нескольких местах. Представьте, что у вас есть программа, файлы которой ОБЯЗАТЕЛЬНО должны находиться по адресу C:\Program Files. Только системный диск забит и места на диске С уже нет. А вот другой диск или том под буквой, например, D полупуст. Вам нужно лишь перетащить вашу программу на диск D, создав попутно папку типа D:\Программа, создав в папке C:\Program Files симлинк на D:\Программа. И, если в вашем арсенале есть такие инструменты как виртуальный хранилища данных на манер like Dropbox, Google Drive, Яндекс.Диск или OneDrive, пространство рабочей зоны Windows можно серьёзно увеличить.
Создавая ссылки для Windows: mklink
В том виде, как вы их знаете, ссылки в Windows создаются в момент установки, что забирает львиную долю процесса инсталляции системы. Однако в числе инструментов из числа служебных утилит есть та, с помощью которой ссылки можно создавать самостоятельно. Знакомьтесь – mklink. В консоли cmd от имени администратора можно найти по утилите справку:
Итак, что видно по справке?
- mklink может создавать ссылки не только на сами папки и файлы, но и на такие же символьные ссылки
- если не использовать аргумент /d, будет создана символьная ссылка на файл
- если флаг /d применяется в команде, то появится символьная ссылка на папку/директорию
Давайте на секунду остановимся. Если вы наткнулись на статью случайно, вероятно, что и пояснение по используемым флагам /D и /J из справки утилиты не сильно разъяснит ситуацию (конкретно, разницу между этими флагами команды). И, опять же, умение правильно создать символьную ссылку или указующее соединение из mklink зависит от того, верно ли вы понимаете разницу в объясняемых справкой пунктах о /D (символьной ссылке), /J (соединениях каталогов) и /H (жёсткой ссылке). Об этом – в конце статьи.
Итак, создавать “собственные папки” просто. Например, мне нужно заставить появиться некую папку Директория на диске С, которая (на самом деле) является реально существующей у меня папкой по адресу D:\hacking\Python. Так и запишем:
Если название папки содержит несколько слов с пробелами, поместите весь путь (включая имя диска) целиком в команде в кавычки “” . Далее, немного усложним задачу, для чего создадим папку, создадим в ней файл, добавим для всего этого символическую ссылку, в окончание её же и удалим. Вот команды, а вы проверьте после ввода каждой из них, что происходит на диске С: с помощью проводника.
А зачем это надо-то?
Да, казалось бы, в том варианте как описывается, разницы между созданием обычного ярлыка для файла или папки нет. Но это лишь на первый взгляд. Ну, представьте себе, что купленная только что игра требует установиться в корневую C:\Games (как обычно), требуя при том свободного места на диске С этак Гбайт 30. И при этом карта системного диска С выглядит примерно так:
Есть второй том, там ещё есть место, но что толку-то? Простым решением был бы … перенос папки C:\Games на диск, видимо, D. Вручную это делать? Безошибочно это редко удаётся. А вот команда
справится с задачей в два счёта. И оп: игра-то думает, что её установили в нужную папку. А это не так, на самом деле. Какие ещё варианты? Я не особо игрок, но для меня, обладателя огромного количества виртуальных машин, которые занимают немало пространства, в такой ситуации тоже есть свои плюсы как решить проблему нехватки пространства для кучи виртуальных Windows.
Кроме того, создание ссылки подразумевает возможность быстрого к ней обращения: фактически вы создаёт новый путь. А он может быть максимально коротким. И тут в дело вступает возможность быстрого доступа из поисковой строки. Например, на одном из томов хранятся памятные фотографии, причём доступ к ним ограничен, а путь бесконечно долог для проводника. Создадим ссылку на манер:
А теперь набираем WIN + R, вводим D:\Фотки и работаем как хотим:
Ссылки Windows из mklink: о чём следует помнить?
- будущая ссылка и целевая папка должны быть на локальных томах; создание hard-ссылки с сетевым назначением не прокатит;
- имя создаваемой ссылки должно быть уникальным; по существующим или зарезервированным адресам/именам утилита вернёт ошибку;
- объединить две или более директорий одной ссылкой-папкой у меня так и не получилось;
- переименовывать папки-ссылки можно также, как и обычные папки; они всё равно будут указывать на реально существующее местоположение целевой папки;
- при этом Windows не делает никаких различий между “фейковой” папкой и реально существующей; файлы легко и надёжно перемещаются в папку-ссылку и обратно. Однако консоль cmd выдаёт истинную функцию папки-ссылки (созданной с флагом /j):
ссылка помечена как Junction, а не DIR
Точки стыка (жёсткие связи), соединения и символические ссылки файловой системы NTFS
Итак, в чём основные отличия связующих ссылок?
Жёсткая ссылка (hard link) – это файл, представляющий другой файл, находящийся на том же томе без дублирования его свойств. Жёстких ссылок на один файл может быть создано несколько, но на файл, находящийся в другом разделе (а тем более диске), жёсткую ссылку не поставить. Более того, жёсткие ссылки работают только с файлами – никаких директорий. Преимуществом жёсткой ссылки является тот факт, что, являясь копией настоящего, она не требует дополнительного пространства на диске. Так, если вы создали 5 ссылок на 1 файл весом 100 Мб, общий объём занимаемого места так и останется 100 Мб (а не 600 Мб). Любую из этих ссылок можно удалить, остальные и сам файл-оригинал останутся. А все изменения в файле отображаются и в ссылках.
Соединения для каталога – это ссылки на целевую директорию/папку. Соединения уже видят не только собственные тома, но и соседние разделы. Но, опять же, лишь в пределах локальной машины. Также не требуют свободного места, лишь указывая на оригинальную директорию. Если ту удалить или переместить, связи сломаются, и ссылки работать не будут. Помните историю про Documents and Settings? Это и есть пример такого соединения.
Символические ссылки появились с Windows Vista. Они представляют собой объект файловой системы, указывающий на другой объект. Это “супер-продвинутый” ярлык. И такие “ярлыки” могут указывать на любые файлы и папки в пределах локальной сети (с установленными Windows Vista и позднее). Объёмы жёсткого диска также не используются. Кроме того, связь по такой ссылке может осуществляться в виде абсолютного (полного) маршрута и относительного пути к целевой папке/файлу. Первый вариант – это всем знакомый по проводнику тип тропинки Диск:\Каталог\Подкаталог\Файл. В относительной ссылке пути к целевой директории могут перемежёвываться. Но объединяет их одно – система и программы воспринимает ссылки и цель как одно и тоже. При редактировании ссылок и цели ссылки наследуют свойства предыдущего варианта связей NTFS-системы.
Отличия между типами связей можно представить в таком виде:
Закончить можно ещё одним фактом: создание связи между файлами или каталогами в NTFS ни в коем случае не подразумевает копирование или резервирование целевых файлов или папок. И Windows не следит за состоянием цепочки: удаляете цель – получаете ошибку.
Ну, вот такая в целом ситуация с типами внутренних связей Windows. Успехов.