Link в Windows: создание символических и жёстких ссылок

Команда mklink в командной строке Windows выдаёт ошибку «Отказано в доступе» — с такой ситуации чаще всего начинается знакомство пользователя с механизмом ссылок в этой системе. Причина почти всегда одна: консоль запущена без прав администратора, а создание символических ссылок требует повышенных привилегий. Достаточно открыть командную строку от имени администратора — и та же команда выполнится успешно.

Под словом link в контексте Windows обычно понимают три разных механизма: обычные ярлыки (.lnk), символические ссылки (symbolic link) и жёсткие ссылки (hard link). Они работают по-разному, и выбор неправильного типа приводит к тому, что программа «не видит» файлы или перенос папки на другой диск ломается. В этой статье разберём, чем отличаются эти варианты, как их создавать и какие ошибки встречаются чаще всего.

Что такое ссылка в Windows и зачем она нужна

Ссылка — это объект файловой системы, который указывает на другой файл или папку. Для пользователя и большинства программ ссылка выглядит как обычный каталог или документ, хотя физически данные лежат в другом месте — например, на другом диске. Это удобно, когда системный раздел переполнен, а программа жёстко привязана к своему пути.

Типичный сценарий: перенести тяжёлую папку с SSD на HDD, оставив для системы иллюзию, что она на прежнем месте. Другой частый случай — объединить файлы из разных каталогов в одну библиотеку без дублирования данных. В обоих сценариях помогает именно символическая ссылка, а не обычный ярлык.

  • 🔗 Ярлык (.lnk) — файл-указатель, который понимает проводник, но многие программы его игнорируют.
  • 🔗 Символическая ссылка — прозрачная для приложений подмена пути, работает на уровне файловой системы.
  • 🔗 Жёсткая ссылка — второе имя для того же файла в пределах одного тома, данные физически одни.
  • 🔗 Junction (точка соединения) — разновидность ссылки только для папок, исторически старший механизм.

Ярлык, символическая ссылка и жёсткая ссылка: в чём разница

Ярлык — это просто маленький файл с расширением .lnk, содержащий путь к цели. Проводник умеет его открывать, но если подсунуть ярлык программе вместо реальной папки, она, скорее всего, увидит неизвестный файл и откажется работать. Именно поэтому для «переноса» папок ярлыки бесполезны.

Жёсткая ссылка устроена иначе: она создаёт дополнительное имя для уже существующего файла внутри одного раздела NTFS. Удаление одного имени не удаляет данные, пока существует хотя бы одна ссылка. Ограничение существенное: жёсткая ссылка не может указывать на другой диск и не работает с папками.

Символическая ссылка — самый гибкий вариант. Она может указывать на файл или каталог, в том числе на другом диске и даже на сетевом ресурсе. Платой за гибкость является требование прав администратора при создании (либо включённый режим разработчика в современных версиях Windows).

ТипЦельДругой дискПрава администратора
Ярлык (.lnk)Файлы и папкиДаНе требуются
Жёсткая ссылкаТолько файлыНетОбычно не требуются
Символическая ссылкаФайлы и папкиДаТребуются*
JunctionТолько папкиЛокальные томаОбычно не требуются

*В актуальных версиях Windows 10 и 11 создание символических ссылок без прав администратора возможно при включённом режиме разработчика. Наличие и поведение этой опции зависит от версии системы, поэтому сверяйтесь с настройками своей сборки.

📊 Какой тип ссылки вы используете чаще всего?
Обычные ярлыки
Символические ссылки (mklink /D)
Жёсткие ссылки
Не знал(а) о разнице до этой статьи

Основной инструмент — встроенная команда mklink, доступная в командной строке. Важный нюанс: она существует только в cmd.exe, а не в PowerShell напрямую, хотя из PowerShell её можно вызвать через cmd /c. Сначала откройте командную строку от имени администратора: нажмите Win + S, введите «cmd», щёлкните правой кнопкой и выберите запуск с повышенными правами.

Синтаксис команды следующий:

mklink /D "C:\Путь\К\Ссылке" "D:\Путь\К\Реальной\Папке"

Ключ /D создаёт ссылку на каталог, без ключа создаётся ссылка на файл, /H — жёсткая ссылка, /J — точка соединения. Порядок аргументов часто путают: первым указывается путь новой ссылки, вторым — путь существующей цели. Если перепутать местами, команда либо завершится ошибкой, либо создаст ссылку не там, где ожидалось.

☑️ Перед созданием символической ссылки

Выполнено: 0 / 5

Типичная практическая задача — перенос папки на другой диск. Сначала переместите саму папку, например с C:\Games\MyGame на D:\MyGame, убедитесь, что на старом месте её больше нет, и затем создайте ссылку:

mklink /D "C:\Games\MyGame" "D:\MyGame"

После этого программа, обращающаяся к старому пути, продолжит работать, физически читая данные с диска D.

Создание ссылки через PowerShell

В PowerShell используется командлет New-Item с параметром типа элемента. Это удобнее для скриптов автоматизации, где логика уже написана на PowerShell и вызывать cmd не хочется.

New-Item -ItemType SymbolicLink -Path "C:\Link" -Target "D:\RealFolder"

Для жёсткой ссылки тип указывается как HardLink. Как и в случае с mklink, для символических ссылок сеанс PowerShell нужно запускать от имени администратора, если не включён режим разработчика. Если команда возвращает ошибку привилегий — это первое, что стоит проверить.

⚠️ Внимание: удаление символической ссылки на папку через проводник удаляет только саму ссылку, но при работе из некоторых сторонних файловых менеджеров и скриптов возможно рекурсивное удаление содержимого целевой папки. Перед массовыми операциями удаления проверяйте поведение инструмента на тестовых данных.

Типичные ошибки и их решения

Самая частая ошибка — Отказано в доступе или сообщение о недостатке привилегий. Решение: перезапустить консоль от имени администратора. Если права есть, а ошибка остаётся, проверьте, не включена ли политика безопасности, ограничивающая создание ссылок, — это встречается на корпоративных машинах, управляемых администратором.

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

  • 🛠️ Проверьте, что консоль запущена с правами администратора — заголовок окна это показывает.
  • 🛠️ Убедитесь, что по пути ссылки нет одноимённой папки или файла.
  • 🛠️ Проверьте файловую систему: символические и жёсткие ссылки требуют NTFS, на FAT32 и exFAT они не работают.
  • 🛠️ Для сетевых путей учитывайте, что доступ по ссылке зависит от настроек политики Remote-to-Remote и может быть заблокирован.
⚠️ Внимание: не создавайте символические ссылки внутрь системных каталогов Windows вроде C:\Windows или C:\Program Files без полного понимания последствий. Ошибочная ссылка в таких местах способна нарушить работу обновлений и установленных программ.
Почему программа всё равно не видит ссылку

Некоторые приложения намеренно проверяют, является ли каталог точкой повторной обработки (reparse point), и отказываются работать со ссылками из соображений безопасности. Также антивирус может блокировать обращения через символические ссылки. Если программа «не видит» ссылку, проверьте её журналы ошибок и временно протестируйте с отключённой защитой — только для диагностики.

Как проверить и удалить ссылку

Увидеть, что папка является ссылкой, можно в проводнике: на значке появляется маленькая стрелка, как у ярлыка, а в свойствах иногда отображается целевой путь. Надёжнее — команда dir в командной строке: ссылки помечаются как <SYMLINKD> или <JUNCTION> с указанием цели в квадратных скобках.

Удаляется ссылка как обычный объект: выделите её в проводнике и нажмите Delete, либо используйте rmdir для ссылки на папку и del для ссылки на файл. Целевые данные при этом остаются нетронутыми — удаляется только указатель. Именно этим ссылки безопаснее перемещений: эксперимент легко откатить, просто удалив ссылку и вернув папку на место.

Если сомневаетесь, что перед вами — ссылка или реальная папка, выполните dir /AL в родительском каталоге: команда покажет только объекты-ссылки. Это быстрый способ аудита перед удалением.

Когда ссылка не поможет: ограничения метода

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

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

Часто задаваемые вопросы

Чем символическая ссылка отличается от ярлыка?

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

Почему mklink выдаёт «Отказано в доступе»?

Чаще всего командная строка запущена без прав администратора. Закройте консоль и откройте её заново через правый клик с выбором запуска от имени администратора. На управляемых корпоративных компьютерах возможна также блокировка политикой безопасности.

Можно ли создать ссылку на другой диск?

Символическая ссылка — да, она может указывать на другой локальный диск и даже на сетевой ресурс. Жёсткая ссылка работает только в пределах одного тома NTFS и только для файлов.

Что будет, если удалить символическую ссылку?

Удалится только сама ссылка-указатель, целевая папка или файл останутся на месте. Это делает ссылки безопасным инструментом: эксперимент всегда можно отменить без потери данных.

Работают ли ссылки на FAT32 или exFAT?

Нет. Символические ссылки, жёсткие ссылки и junction требуют файловую систему NTFS. На разделах FAT32 и exFAT команда mklink завершится ошибкой.