
Символическая ссылка (симлинк) – это специальный файл в файловой системе, который не содержит никаких данных, а является ярлыком, указывающим на другой объект (файл или папку). При обращении к симлинку операционная система считает, что это оригинальный файл (папка), и работает с ним совершенно прозрачно.
Символьные ссылки довольно часто используются в Windows для системных файлов и каталогов. Их можно использовать, когда нужно переместить большие файлы на другой диск и Windows должна считать, что они все еще находятся в исходном каталоге (например, когда вы хотите сэкономить место на SSD, переместив некоторые каталоги на более медленный и большой HDD, не нарушая работу программ). Вы можете использовать симлинки на файловом сервере SMB, когда каталоги, расположенные в разных LUN, должны быть доступны в одной точке входа.
В Windows для томов NTFS доступны три типа файловых ссылок: жесткие ссылки, мягкие ссылки (симлинки) и точки пересечения.
- Жесткие ссылки могут указывать только на локальный файл, но не на папку. Жесткая ссылка – это ссылка на другой файл на том же томе без дублирования файла. Она имеет тот же размер и свойства, что и исходный файл (но не занимает реального места на диске);
- Точки пересечения (Directory Hard Link) могут указывать только на каталог (на том же или другом томе);
- Символьные ссылки (soft link, symlink) могут указывать на локальный файл, папку или сетевой ресурс на удаленном компьютере (по пути UNC). Поддерживаются относительные пути.
В большинстве случаев симлинк можно использовать для решения большинства задач, когда необходимо создать ссылку на объект.
Как создать символическую ссылку в Windows?
Для создания символических или жестких ссылок в Windows можно использовать встроенную программу mklink инструмент или PowerShell.
Команда mklink имеет простой синтаксис. Чтобы создать символическую ссылку на файл, укажите имя ссылки и целевой объект, на который она должна указывать. Можно задать тип ссылки: /D
– символическая (мягкая) ссылка на каталог, /H
– жесткая ссылка, /J
– точка пересечения.
Если вы хотите разрешить пользователям, не являющимся администраторами, создавать символические ссылки, добавьте группу пользователей в Создание символических ссылок Опция GPO (Computer Configuration -> Window Settings -> Security Settings -> User Rights Assignment в редакторе GPO). По умолчанию в политику добавляется только локальная группа администраторов. После изменения параметра обновите локальную групповую политику: gpupdate /force
Создайте символическую ссылку на файл 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"
Теперь, когда вы откроете папку C:\PS\Downloads, вы увидите содержимое каталога, на который она ссылается.
Отобразите содержимое папки C:\PS:
dir c:\ps
Как видите, атрибуты некоторых файлов показывают, что это симлинк (simlinkd). Объект, на который они ссылаются, также отображается. В File Explorer симлинки отображаются как значки ярлыков, а целевой объект, на который они указывают, отображается в их свойствах.
Вы также можете создать символическую ссылку в Windows с помощью PowerShell (в этом примере я использую относительные пути для создания симлинка):
New-Item -ItemType SymbolicLink -Path ".\test\tmpfiles" -Target "..\tmp\files"
Вы можете создать символическую ссылку на общую сетевую папку на удаленном компьютере или сервере. Укажите адрес общего сетевого ресурса в формате 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 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:\
– указать имя диска или путь к папке для поиска симлинков
Вы также можете получить список всех символических ссылок на диске с помощью PowerShell. Просто просканируйте все папки и найдите объекты NTFS с атрибутом ReparsePoint:
Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction 'silentlycontinue' | Where { $_.Attributes -match "ReparsePoint"}