Создание символьных ссылок (Symlinks) в Windows

Символическая ссылка (симлинк) – это специальный файл в файловой системе, который не содержит никаких данных, а является ярлыком, указывающим на другой объект (файл или папку). При обращении к симлинку операционная система считает, что это оригинальный файл (папка), и работает с ним совершенно прозрачно.

Символьные ссылки довольно часто используются в Windows для системных файлов и каталогов. Их можно использовать, когда нужно переместить большие файлы на другой диск и Windows должна считать, что они все еще находятся в исходном каталоге (например, когда вы хотите сэкономить место на SSD, переместив некоторые каталоги на более медленный и большой HDD, не нарушая работу программ). Вы можете использовать симлинки на файловом сервере SMB, когда каталоги, расположенные в разных LUN, должны быть доступны в одной точке входа.

В Windows для томов NTFS доступны три типа файловых ссылок: жесткие ссылки, мягкие ссылки (симлинки) и точки пересечения.

  • Жесткие ссылки могут указывать только на локальный файл, но не на папку. Жесткая ссылка – это ссылка на другой файл на том же томе без дублирования файла. Она имеет тот же размер и свойства, что и исходный файл (но не занимает реального места на диске);
  • Точки пересечения (Directory Hard Link) могут указывать только на каталог (на том же или другом томе);
  • Символьные ссылки (soft link, symlink) могут указывать на локальный файл, папку или сетевой ресурс на удаленном компьютере (по пути UNC). Поддерживаются относительные пути.

В большинстве случаев симлинк можно использовать для решения большинства задач, когда необходимо создать ссылку на объект.

Как создать символическую ссылку в Windows?

Для создания символических или жестких ссылок в Windows можно использовать встроенную программу mklink инструмент или PowerShell.

Команда mklink в Windowsкоманда mklink в Windows

Команда mklink имеет простой синтаксис. Чтобы создать символическую ссылку на файл, укажите имя ссылки и целевой объект, на который она должна указывать. Можно задать тип ссылки: /D – символическая (мягкая) ссылка на каталог, /H – жесткая ссылка, /J – точка пересечения.

Чтобы использовать mklink для создания символических ссылок, запустите командную строку от имени администратора. В противном случае при выполнении команды возникнет следующая ошибка: Вы не обладаете достаточными привилегиями для выполнения этой операции.

Если вы хотите разрешить пользователям, не являющимся администраторами, создавать символические ссылки, добавьте группу пользователей в Создание символических ссылок Опция GPO (Computer Configuration -> Window Settings -> Security Settings -> User Rights Assignment в редакторе GPO). По умолчанию в политику добавляется только локальная группа администраторов. После изменения параметра обновите локальную групповую политику: gpupdate /force

GPO: Разрешить создавать символические ссылки GPO: Разрешить создавать символические ссылки

Создайте символическую ссылку на файл notepad.exe в C:\PS:

mklink C:\PS\note.exe c:\Windows\System32\notepad.exe

Вы увидите следующее сообщение:

symbolic link created for C:\PS\note.exe <<===>> c:\Windows\System32\notepad.exe

Теперь вы можете использовать симлинк note.exe для запуска файла notepad.exe.

Создайте симлинк на другую папку на том же диске:

mklink /D "C:\PS\Downloads" "C:\Users\user\Downloads"

Windows cmd: символическая ссылка создана для ...Windows cmd: создана символическая ссылка для ...

Теперь, когда вы откроете папку C:\PS\Downloads, вы увидите содержимое каталога, на который она ссылается.

создание симлинка на папку Windowsсоздание симлинка на папку Windows

Отобразите содержимое папки C:\PS:

dir c:\ps

Как видите, атрибуты некоторых файлов показывают, что это симлинк (simlinkd). Объект, на который они ссылаются, также отображается. В File Explorer симлинки отображаются как значки ярлыков, а целевой объект, на который они указывают, отображается в их свойствах.

Вы также можете создать символическую ссылку в Windows с помощью PowerShell (в этом примере я использую относительные пути для создания симлинка):

New-Item -ItemType SymbolicLink -Path ".\test\tmpfiles" -Target "..\tmp\files"

Создание символической ссылки в Windows с помощью PowerShellСоздание символической ссылки в Windows с помощью PowerShell

Вы можете создать символическую ссылку на общую сетевую папку на удаленном компьютере или сервере. Укажите адрес общего сетевого ресурса в формате UNC.

mklink /D c:\ps\share \\hq-fs01\Share

Например, подключим административный ресурс C$ на удаленном компьютере, используя его IP-адрес:

mklink /D c:\remotePC\server1 \\192.168.13.10\C$

Если при доступе к ресурсу с помощью симлинка вы видите следующую ошибку:

The symbolic link cannot be followed because its type is disabled.

Проверьте, какие способы использования символических ссылок разрешены на вашем компьютере:

fsutil behavior query SymlinkEvaluation

Local to local symbolic links are enabled.
Local to remote symbolic links are enabled.
Remote to local symbolic links are disabled.
Remote to remote symbolic links are disabled.

fsutil behavior query SymlinkEvaluationfsutil behavior query SymlinkEvaluation

Чтобы включить символические ссылки на удаленные ресурсы, выполните следующие команды:

fsutil behavior set SymlinkEvaluation R2R:1
fsutil behavior set SymlinkEvaluation R2L:1

С символическими ссылками можно работать так же, как и с обычными объектами файловой системы: перемещать, переименовывать или удалять их. Windows автоматически изменит настройки символических ссылок, чтобы они указывали на правильные цели.

Для удаления символьных ссылок используются обычные команды (как для файлов):

Del c:\ps\note.exe
RD c:\ps\downloads

Как найти все символические ссылки на диске Windows?

В Windows нет встроенных инструментов для просмотра и управления всеми символьными ссылками на диске.

Перечислить все символические ссылки на диске можно с помощью этой команды:

dir /AL /S C:\ | find "SYMLINK"

  • /A – для отображения файлов с L атрибут (симлинки)
  • /S -рекурсивно выполнить команду для всех вложенных папок
  • C:\ – указать имя диска или путь к папке для поиска симлинков

Как перечислить все симлинки в каталоге или на диске WindowsКак перечислить все симлинки в каталоге или на диске Windows

Вы также можете получить список всех символических ссылок на диске с помощью PowerShell. Просто просканируйте все папки и найдите объекты NTFS с атрибутом ReparsePoint:

Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction 'silentlycontinue' | Where { $_.Attributes -match "ReparsePoint"}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *