Символическая ссылка (симлинк, символьная ссылка, Symbolic link) это специальный файл на файловой системе, которые сам не содержит данных, а является по сути ярлыком, указывающим на какой-то другой объект (файл или папку). При обращении к симлику операционная система считает, что это оригинальный файл (папка) и работает с ними совершенно прозрачно.
Символические ссылки используются в Windows довольно часто для системных файлов и каталогов. Пользователь может их применять, когда нужно перенести часть “тяжелых” файлов на другой диск, но чтобы Windows считала, что файлы все еще находятся в исходном каталоге (например в ситуациях, когда нужно экономить место на SSD, перенеся некоторые каталоги на более медленный и емкий SSD, не нарушая работоспособности программ). Можно использовать симлинки на SMB файловом сервере, когда каталоги с разных LUN должны быть доступны через одну точку входа.
В Windows есть три типа файловых ссылок для NTFS томов: жесткие, мягкие (симлинки), точки соединения (Junction point).
- Hard Links (жесткие ссылки) – могут указывать только на локальный файл, но не на папку. Такой файл – это ссылка на другой файла на этом же диске без фактического дублирования самого файла. У него отображается такой же размер и свойства, как у целевого файла (но реальное место на диске он не занимает);
- Junction Points (Directory Hard Link, точка соединения) – могут указывать только на папку (на этом же или на другом разделе);
- Symbolic Links (мягкая ссылка, симлинк) – могут указывать на локальный файл, папку и сетевой каталог на удаленном компьютере (UNC), поддерживаются относительные пути.
В подавляющем большинстве случаев вам будет достаточно функционала symbolic link, как наиболее универсального средства создания ссылки на любой объект.
Как создать символическую ссылку в Windows?
Для создания символических и жестких ссылок в Windows можно использовать встроенную утилиты mklink или PowerShell.
Синтаксис у утилиты
mklink
простой. Чтобы создать символическую ссылку на файл, нужно указать имя ссылки и целевой объект, на который она должна указывать. Можно указать тип ссылки:
/D
— символьная (мягкая) ссылка на каталог,
/H
— жесткая ссылка,
/J
– точка соединения (Junction point).
Чтобы использовать mklinkдля создания символических ссылок нужно запустить командную строку с правами администратора. Иначе при запуске команды появится ошибка “
You do not have sufficient privilege to perform this operation
”.
Если вам нужно разрешить создавать символические ссылки обычным пользователям, нужно добавить группу пользователей в параметр групповой политики Create Symbolic Links (Computer configuration -> Window Settings -> Security settings -> User Rights Assignment в редакторе GPO). По умолчанию в этой политике добавлена только локальная группа «Administrators». Обновите локальные политики после изменения параметра: gpupdate /force
Создадим в каталоге C:PS символическую ссылку на файл notepad.exe:
mklink C:PSnote.exe c:WindowsSystem32notepad.exe
Должно появится сообщение:
symbolic link created for C:PSnote.exe <<===>> c:WindowsSystem32notepad.exe
Теперь для запуска процесса notepad.exe можно использовать символическую ссылку note.exe.
Теперь создадим в этом каталоге симлинк на другой каталог на этом же диcке:
mklink /D “C:PSDownloads” “C:UsersuserDownloads”
Теперь при переходе в каталог C:PSDownloads вы будете видеть содержимое каталога, на который он ссылается.
Выведем содержимое каталога C:PS:
Dir c:ps
Как вы видите, в атрибутах некоторых файлов указано, что это symlink/simlinkd. Также указан объект, на который они ссылаются. В Windows File Explorer симлинки отображаются с иконками ярлыков, а в их свойствах можно посмотреть целевой объект на который они ссылаются.
Также можно создать символически ссылки в Windows 10 с помощью PowerShell (в этом примере я использую относительные пути, чтобы создать символическую ссылку):
New-Item -ItemType SymbolicLink -Path ".testtmpfiles" -Target "..tmpfiles"
Можно создать символическую ссылку на сетевую папку на удаленном компьютере/сервере. Адрес сетевой папки нужно указывать в формате UNC. Следующий пример создаст симлинк на сетевой каталог на сервере:
mklink /D c:psshare \mskfs01Share
Например, подключим административную шару C$ с удаленного компьютера по IP адресу:
mklink /D c:remotePCserver1 \192.168.31.15С$
Если при доступе к сетевой папке через симлинк, вы получили ошибку
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
Вы можете работать с символическими ссылками, как с обычными объектами файловой системы, можно переименовать, переносить или удалить их. Система автоматически изменит настройки таких симлинков, чтобы они указывали на верные целевые объекты.
Для удаления симлинков используются обычные команды, как и для удаления файлов:
Del c:psnote.exe
RD c:psdownloads
Как найти и вывести все символические ссылки на диске?
В 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"}
Доброго времени суток! Сегодня рассмотрим интересную тему под названием «Символьные ссылки». Вариантов использования данного инструмента не так уж много. К примеру, если вы используете часть оперативной памяти как RAM-диск, можно перенести какую-либо игру или её часть (скажем папки с графикой) и создать символьную ссылку. Это значительно ускорит загрузку уровней и карт. Также символьные ссылки можно использовать для переноса папки пользователя целиком, но об этом напишу в одной из следующих статей.
Что такое симлинк?
Итак, что такое символьная ссылка или симлинк? Для начала процитирую Википедию:
Символьная ссылка (также симлинк от англ. Symbolic link, символическая ссылка) — специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу). Символьная ссылка занимает ровно столько места в файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).
Итак, это файл, который содержит в себе только ссылку на другой файл или каталог, ничего больше. Система же при обращении к этому файлу ведет себя точно так же, как если бы это был файл(папка), на который ссылается символьная ссылка. Что на самом деле является очень удобным. К примеру,на рабочем столе можно создать ряд символьных ссылок на часто используемые папки, и копирование файлов в эти папки окажется секундным делом. Теперь попробуем создать символьную ссылку для произвольной папки.
Инструкция по созданию символьной ссылки
1) Создаем (или копируем) папку в нужном нам месте. В моем случае я создам папку mkfolder на локальном диске D :
2) Открываем командную строку, для этого жмём Win+R и в открывшемся окне пишем cmd:
3) В открывшемся окне командной строки нам необходимо создать символьную ссылку для нашей папки. Делается это с помощью команды mklink. В моем случае я пишу так, создавая в корне диска С папку с именем mklink, которая будет ссылать на папку D:mkfolder :
mklink /j "c:mklink" "d:mkfolder"
где, mklink — команда создания символьной ссылки
/j — атрибут создания соединения для каталога
c:mklink — место создания файла с символьной ссылкой / имя новой символьной ссылки
d:mkfolder — Путь, на который ссылается символьная ссылка
4) Жмём клавишу Enter, и, если всё введено правильно, командный интерпретатор Windows сообщит о создании соединения:
5) Пройдем на диск C и посмотрим на созданную символьную ссылку:
6) Главное её отличие от обычного ярлыка в том, что если зайти в папку mklink, система будет считать, что вы находитесь именно на диске C в папке mklink, но на самом деле вы будете видеть и работать с файлами, которые находятся на диске D в папке mkfolder:
Альтернативный способ
Мне символьные ссылки нужны довольно редко и я без проблем запомнил команду командной строки и использую первый метод. Но в Windows есть альтернативный способ для папок:
1) Копируем папку, для которой нам нужно создать символьную ссылку.
2) Идём в каталог:
C:Users*имя пользователя*AppDataRoamingMicrosoftWindowsNetwork Shortcuts
Папка AppData скрытая, для того чтобы включить отображение скрытых папок, воспользуйтесь этой статьей.
3) Жмём правой клавишей по окну каталога и выбираем «Вставить ярлык». Система создаст символьную ссылку до исходного каталога и теперь её можно перенести в нужное для вас место и переименовать.
На этом всё. Надеюсь эта статья оказалась вам полезной, нажмите одну из кнопок ниже, чтобы рассказать о ней друзьям. Также подпишитесь на обновления сайта, введя свой e-mail в поле справа.
Спасибо за внимание
Материал сайта Skesov.ru
- Распечатать
Оцените статью:
- 5
- 4
- 3
- 2
- 1
(26 голосов, среднее: 4.8 из 5)
Поделитесь с друзьями!
Как создавать и удалять симлинки
Обновлено: 07.07.2020
Опубликовано: 25.01.2017
Используемые термины: Симлинк, Windows, Linux.
Работы с символьными ссылками в Windows ведутся из командной строки.
Синтаксис
mklink <имя создаваемого симлинка> <на что ведет симлинк>
Симлинк на файл
mklink C:UsersdmoskDesktopcmd.exe C:Windowssystem32cmd.exe
* в данном примере на рабочем столе пользователя dmosk будет создан симлинк на файл cmd.exe.
Симлинк на директорию
mklink /D «C:UsersdmoskDesktopСетевая папка» \dmosk.localshare
* в примере создается симлинк на сетевую папку \dmosk.localshare
** так как в названии папки есть пробел, путь заключен в кавычки.
Для создания ссылки на папку доступен также ключ /J. Созданная таким образом ссылка будет по некоторым особенностям напоминать жесткую ссылку.
Удалить симлинк
В Windows его можно удалить в проводнике, как обычный файл или папку.
Или использовать командную строку.
Для папки:
rmdir «C:UsersdmoskDesktopСетевая папка»
Для файла:
del C:UsersdmoskDesktopcmd.exe
Разрешить симлинки в Windows
Если при попытке перейти по символьной ссылке мы получим ошибку «Символическая ссылка не может быть загружена, так как ее тип отключен», открываем командную строку от администратора и вводим команду:
fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
Если это не помогло, пробуем создать симлинк с ключом /J.
Linux и FreeBSD
Создание
Общий синтаксис
ln -s <на какой существующий объект будет вести> <создаваемый симлинк>
В системах на базе Linux (например, Ubuntu или CentOS) и FreeBSD симлинк для каталога и файла создаются одинаково:
ln -s /usr/share/nginx/html/index.php /home/dmosk/
ln -s /usr/share/nginx/html /home/dmosk/
* в первом примере создана символьная ссылка в домашней директории пользователя dmosk на файл index.php; во втором — на каталог /usr/share/nginx/html.
Удаление
Также используется одна команда:
rm /home/dmosk/index.php
Была ли полезна вам эта инструкция?
Да Нет
Жесткие и символические ссылки давно знакомы и активно используются Linux-администраторами, в то время как их Windows коллеги используют их гораздо реже, а некоторые вообще не знают о такой возможности. Тем не менее такая возможность в Windows существует и позволяет значительно упростить некоторые сценарии работы с папками и файлами. В данной статье мы рассмотрим все виды ссылок, доступные в среде ОС Windows, а также разные способы работы с ними, начиная от командной строки и заканчивая PowerShell.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Жесткие ссылки (HardLink)
Жесткие ссылки представляют собой дополнительную запись в файловой таблице раздела для существующего файла. Таким образом жесткая ссылка ничем не отличается от исходного файла, но файл при этом не копируется физически и остается на диске в единственном экземпляре. При изменении файла по любой из жестких ссылок, остальные обновляются автоматически (что логично, так как файл один).
Мы можем переименовывать, копировать, перемещать (в пределах логического тома) ссылки — размер занимаемого места при этом не изменится. При удалении ссылок файл продолжает существовать до тех пор, пока не будет удалена последняя жесткая ссылка на него. Фактически отличить, где находится оригинальный файл, а где жесткая ссылка невозможно, по сути, файл на разделе это и есть жесткая ссылка.
Жесткая ссылка может существовать только в пределах логического тома, поддерживается файловыми системами NTFS и ReFS начиная со сборки 19536.
Для создания жесткой ссылки можно воспользоваться утилитой mklink:
mklink /H C:Folder1LinkFileName C:FolderFileName
Где ключ /H предписывает создать именно жесткую ссылку, далее следует путь к новому файлу и целевому файлу, на который мы делаем ссылку. Путь можно указывать как абсолютные, так и относительные, в имени создаваемого файла не забывайте указывать расширение.
Ссылки можно создавать и при помощи PowerShell, для этого воспользуйтесь командой:
New-Item -ItemType HardLink -Path C:Folder1LinkFileName -Target C:FolderFileName
Команда другая, но принцип тот же самый: -ItemType — тип создаваемой ссылки, в нашем случае жесткая ссылка, -Path — путь к создаваемому файлу ссылки, -Target — файл на который мы делаем ссылку.
Можно ли сделать жесткую ссылку на директорию? Нет, только на файлы.
Вроде бы все понятно, но если внимательный читатель заглянет в свойства папки с жесткой ссылкой, то он увидит, что ее размер равен исходному файлу, если сделаем в ней еще одну жесткую ссылку — двум исходным файлам. Как так? Не стоит переживать, все нормально. Для операционной системы жесткая ссылка ничем не отличается от обычного файла и при подсчете свободного места учитывается размер каждой ссылки, но на самом деле на диске хранится единственная копия. В этом можно убедиться, если одновременно с созданием жестких ссылок контролировать свободное место на диске.
При желании мы можем провернуть даже такой фокус:
Какой вывод можно сделать из того, что мы увидели и где нам могут пригодиться жесткие ссылки? Прежде всего для предоставления пользователям доступа к объемным архивам, образам или инсталляционным пакетам. Скажем у вас есть файловый сервер и несколько отделов, каждому из которых нужно предоставить доступ к одному и тому же большому файлу. При этом вы можете не бояться, что кто-то удалит файл, он удалит его только у себя в директории, для остальных пользователей он останется доступен.
Но при этом надо очень внимательно относиться к вопросу одновременного редактирования файла, так как он существует в единственном экземпляре, но доступен по множеству ссылок в этом сценарии могут возникнуть самые разные коллизии.
Точки соединения (Junction)
Очень старая технология, поддерживаемая еще начиная с Windows 2000, позволяет сделать один из каталогов псевдонимом другого каталога. Чем-то напоминает символические ссылки, но в крайне упрощенном варианте. В качестве цели можно использовать только локальные папки, но при этом нет ограничения по размещению их на одном томе. Т.е. целевая папка может находиться на диске C:, а точка соединения для нее на диске D: и все будет работать. Точки соединения поддерживаются файловыми системами NTFS и ReFS.
Для создания точки соединения можно использовать mklink:
mklink /J D:LinkFolder C:Folder
Ключ /J указывает на создание точки соединения, далее следует папка каталога-псевдонима и папка целевого каталога. При любом изменении целевого каталога (перемещение, переименование, удаление) точка соединения перестает работать.
Обратите внимание, что данная папка в проводнике отображается как ярлык, а выводе команды dir как точка соединения.
Это же действие в PowerShell:
New-Item -ItemType Junction -Path D:LinkFolder -Target C:Folder
Комментировать здесь особо нечего, краткость не входит в число добродетелей PowerShell, но не оставляет места догадкам, все просто и понятно.
Зачем сейчас нужны точки соединения? После появления в NT 6.0 настоящих символических ссылок не нужны, но вы можете встретиться с ними как в устаревших системах, так и в современных, где они могут присутствовать в виде наследия. Поэтому знать о них и уметь с ними работать современному администратору надо.
Символические ссылки (SymbolicLink)
Пожалуй, самый популярный вид связи, позволяет создавать множество псевдонимов для файлов или каталогов размещая их на любых поддерживаемых локальных файловых системах. В качестве цели могут быть использованы как локальные, так и сетевые объекты. При создании символической ссылки можно использовать как абсолютные, так и относительные пути. Но в последнем случае вы не можете перемещать ссылку — она перестанет работать. Символические ссылки поддерживаются начиная с NT 6.0 (Vista и Server 2008) и работают с файловыми системами NTFS и ReFS.
Для создания символических ссылок можно использовать mklink, без параметров она создает симлинк для файла:
mklink C:Folder1LinkFileName C:FolderFileName
При создании ссылки не забываем указать расширения для файла. Как и в случае с точкой соединения символическая ссылка отображается в виде ярлыка и обозначается в выводе команды dir:
Для создания символической ссылки на директорию добавьте ключ /D:
mklink /D D:LinkFolder C:Folder
В PowerShell все проще, тип объекта будет определен автоматически:
New-Item -ItemType SymbolicLink -Path C:Folder1LinkFileName -Target C:FolderFileName
Если в качестве цели указан файл — будет создана ссылка на файл, каталог — ссылка на каталог.
При переименовании, перемещении или удалении исходного файла или каталога все символические ссылки работать перестанут:
При копировании символической ссылки за пределы локального тома будет скопирован исходный файл, даже если целевой том поддерживает работу со ссылками, но это не мешает создать новую ссылку на другом томе.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Symlink – also called a Symbolic link or Soft link – could be one of the most hidden concepts for computer users. However, that does not take away its importance and the benefits it offers. How about accessing folders and files from different folders without maintaining duplicate copies? Yes, that’s the power of Symlink.
What is a Symlink or Symbolic Link
Symlink are shortcut files that refer to a physical file or folder located elsewhere. Symlinks act as virtual files or folders, which can be used to link with individual files or folders, making them appear as if they are stored in the folder with Symlinks, even though the Symlinks is only pointing to their real location.
Don’t confuse Symlink as just shortcuts
It is important to understand that Symlinks are more than just Shortcuts that as a Windows user you already know. A shortcut file simply points to the desired file while Symlink will make it look like the linked file is actually there. Once you click on the Symlink, you will be directed to the actual file location.
Structure of a Symlink
A Symlink is build of a text string that is automatically interpreted and followed by the operating system as a path to another file or directory. This other file or directory is called the “target“.
Symlink exists independent of its target. If a Symlink is deleted, its target remains unaffected. If a Symlink points to a target, and sometime later that target is moved, renamed or deleted, the symbolic link is not automatically updated or deleted, but continues to exist and still points to the old target. However, such Symlinks pointing to moved or non-existing targets are sometimes called broken, orphaned, dead, or dangling.
Benefits of Symlinks
- Symlinks consume very little space and are very fast to create. You save a lot of hard disk space with Symlinks
- Contrary to hard links, symlinks can link to files across file systems. Remember, if you delete the original file, the hard link still keeps it alive, a Symlink doesn’t
- Symlinks maintain the folder structure in which the Symlinks are contained. For example, let’s say there is a txt file is contained in the “Utility” folder which is located at /D/Myfolder/Utility/windowsclub.txt . Now if a Symlink for the Utility folder was created in the Dropbox folder, and you went searching for windowsclub.txt within the Dropbox folder, the file path would read /D/Myfolder/Utility/windowsclub.txt rather than transforming back to the original/actual file path.
- Using Symlinks you can store your media files Music/Videos on another hard drive, but make them show up in your standard Music/Videos folders, so they’ll be detected by your media programs
- Developers often replace duplicate copies of shared files/folders with symlinks referencing physical files/folders. Replacing redundant copies of files can save a great deal of physical disk space, and significantly reduce the time taken to copy/backup/deploy/clone projects.
Significance of Symlinks in today’s development world
As Yosef Durr, Lead Senior Program Manager, Microsoft mentions on Windows Blog,
Many popular development tools like git and package managers like npm recognize and persist symlinks when creating repos or packages, respectively. When those repos or packages are then restored elsewhere, the symlinks are also restored, ensuring disk space (and the user’s time) isn’t wasted. Git, for example, along with sites like GitHub, has become the main go-to-source code management tool used by most developers today.
The use of package managers in modern development has also exploded in recent years. For example, node package manager (npm) served ~400 million installs in the week of July 1st, 2015, but served more than 1.2 billion installs just one year later – a 3x increase in just one year! In late June 2016, npm served more than 1.7 billion node packages in just seven days!
Although Symlinks have distinct advantages, it was primarily utilized by UNIX-compatible operating systems like Linux, FreeBSD, OSX, etc., where symlinks can be created without restrictions. For Windows users, although Symlinks was made available starting from Windows Vista, it was difficult and tedious to create.
Because of Windows Vista’s security requirements, users needed local admin rights and, importantly, had to run mlink in a command-line console elevated as administrator to create/modify Symlinks. This latter restriction resulted in Symlinks being infrequently used by most Windows developers and caused many modern cross-platform development tools to work less efficiently and reliably on Windows.
However, now on Windows 10 or Windows 11, once a user with admin rights enables Developer Mode, anybody on the PC can run the mklink command without elevating a command-line console.
How do you create Symlinks
Symlinks can be created either using the mklink command or the CreateSymbolicLink API.
You can make Symlinks or Symbolic Links in Windows, using the command-line utility: mklink. The syntax is as follows:
MKLINK [[ /D] | [ /H] | [ /J]] Link Target
Where –
- /D: creates a symbolic directory link or soft link
- /H: creates a hard link to a file instead of a symbolic link
- /J: creates a Directory Junction link
Target: Specifies the path that the new link refers to.
Now for example, if you want d:Data to be made available from the folder D:Maindata use:
C:mklink /D D:Maindata D:Data
Now, if you now look in D:Maindata, you will see whatever files that were there in the other directory. It has always been there in Linux, but this feature has now been made available in Vista too.
Using mklink command
While using mklink command, use the below syntax:
“mklink /prefix link_path file/folder_path”
Note: mklink can create several types of links. Below are the types-
- /D Creates a directory symbolic link. The default is a file symbolic link.
- /H Creates a hard link instead of a symbolic link.
- /J Creates a Directory Junction.
For instance, I created a directory junction of my Music folder to my desktop. Refer the below screenshot-
So when I click on the Symlink, it looks that my music files are stored in C:Users<username>DesktopMusic although it is originally present in C:Users<username>Music.
Remember, if your path has any spaces in it, then you need to place quotes around it.
Using CreateSymbolicLink
To enable the new behavior when using the CreateSymbolicLink API, there is an additional dwFlags option you will need to set the value as:
SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
0x2
So by choosing the above value, you have specified the flag to allow the creation of symbolic links when the process is not elevated.
To read more on how to create Symlink using CreateSymbolicLink API, visit windows.com.
Read: Create Hardlinks, Symbolic Links, Junctions, Volume Mountpoints.
Conclusion
It can be said that Symlinks are more useful than mere shortcuts however they are a bit difficult to create. An average PC user may still find it a little scary to create. What’s more, even today, many users struggle to understand the concept of shortcuts well and hence may struggle to differentiate Symlinks and understand its use.
Having said that, it is almost a guarantee that you will find it easy to change whatever settings you can so that a program is pointing to the right directory, and you don’t really create a Symlink, but knowing how to set up and use a good Symlink can be really handy.
Symlink – also called a Symbolic link or Soft link – could be one of the most hidden concepts for computer users. However, that does not take away its importance and the benefits it offers. How about accessing folders and files from different folders without maintaining duplicate copies? Yes, that’s the power of Symlink.
What is a Symlink or Symbolic Link
Symlink are shortcut files that refer to a physical file or folder located elsewhere. Symlinks act as virtual files or folders, which can be used to link with individual files or folders, making them appear as if they are stored in the folder with Symlinks, even though the Symlinks is only pointing to their real location.
Don’t confuse Symlink as just shortcuts
It is important to understand that Symlinks are more than just Shortcuts that as a Windows user you already know. A shortcut file simply points to the desired file while Symlink will make it look like the linked file is actually there. Once you click on the Symlink, you will be directed to the actual file location.
Structure of a Symlink
A Symlink is build of a text string that is automatically interpreted and followed by the operating system as a path to another file or directory. This other file or directory is called the “target“.
Symlink exists independent of its target. If a Symlink is deleted, its target remains unaffected. If a Symlink points to a target, and sometime later that target is moved, renamed or deleted, the symbolic link is not automatically updated or deleted, but continues to exist and still points to the old target. However, such Symlinks pointing to moved or non-existing targets are sometimes called broken, orphaned, dead, or dangling.
Benefits of Symlinks
- Symlinks consume very little space and are very fast to create. You save a lot of hard disk space with Symlinks
- Contrary to hard links, symlinks can link to files across file systems. Remember, if you delete the original file, the hard link still keeps it alive, a Symlink doesn’t
- Symlinks maintain the folder structure in which the Symlinks are contained. For example, let’s say there is a txt file is contained in the “Utility” folder which is located at /D/Myfolder/Utility/windowsclub.txt . Now if a Symlink for the Utility folder was created in the Dropbox folder, and you went searching for windowsclub.txt within the Dropbox folder, the file path would read /D/Myfolder/Utility/windowsclub.txt rather than transforming back to the original/actual file path.
- Using Symlinks you can store your media files Music/Videos on another hard drive, but make them show up in your standard Music/Videos folders, so they’ll be detected by your media programs
- Developers often replace duplicate copies of shared files/folders with symlinks referencing physical files/folders. Replacing redundant copies of files can save a great deal of physical disk space, and significantly reduce the time taken to copy/backup/deploy/clone projects.
Significance of Symlinks in today’s development world
As Yosef Durr, Lead Senior Program Manager, Microsoft mentions on Windows Blog,
Many popular development tools like git and package managers like npm recognize and persist symlinks when creating repos or packages, respectively. When those repos or packages are then restored elsewhere, the symlinks are also restored, ensuring disk space (and the user’s time) isn’t wasted. Git, for example, along with sites like GitHub, has become the main go-to-source code management tool used by most developers today.
The use of package managers in modern development has also exploded in recent years. For example, node package manager (npm) served ~400 million installs in the week of July 1st, 2015, but served more than 1.2 billion installs just one year later – a 3x increase in just one year! In late June 2016, npm served more than 1.7 billion node packages in just seven days!
Although Symlinks have distinct advantages, it was primarily utilized by UNIX-compatible operating systems like Linux, FreeBSD, OSX, etc., where symlinks can be created without restrictions. For Windows users, although Symlinks was made available starting from Windows Vista, it was difficult and tedious to create.
Because of Windows Vista’s security requirements, users needed local admin rights and, importantly, had to run mlink in a command-line console elevated as administrator to create/modify Symlinks. This latter restriction resulted in Symlinks being infrequently used by most Windows developers and caused many modern cross-platform development tools to work less efficiently and reliably on Windows.
However, now on Windows 10 or Windows 11, once a user with admin rights enables Developer Mode, anybody on the PC can run the mklink command without elevating a command-line console.
How do you create Symlinks
Symlinks can be created either using the mklink command or the CreateSymbolicLink API.
You can make Symlinks or Symbolic Links in Windows, using the command-line utility: mklink. The syntax is as follows:
MKLINK [[ /D] | [ /H] | [ /J]] Link Target
Where –
- /D: creates a symbolic directory link or soft link
- /H: creates a hard link to a file instead of a symbolic link
- /J: creates a Directory Junction link
Target: Specifies the path that the new link refers to.
Now for example, if you want d:Data to be made available from the folder D:Maindata use:
C:mklink /D D:Maindata D:Data
Now, if you now look in D:Maindata, you will see whatever files that were there in the other directory. It has always been there in Linux, but this feature has now been made available in Vista too.
Using mklink command
While using mklink command, use the below syntax:
“mklink /prefix link_path file/folder_path”
Note: mklink can create several types of links. Below are the types-
- /D Creates a directory symbolic link. The default is a file symbolic link.
- /H Creates a hard link instead of a symbolic link.
- /J Creates a Directory Junction.
For instance, I created a directory junction of my Music folder to my desktop. Refer the below screenshot-
So when I click on the Symlink, it looks that my music files are stored in C:Users<username>DesktopMusic although it is originally present in C:Users<username>Music.
Remember, if your path has any spaces in it, then you need to place quotes around it.
Using CreateSymbolicLink
To enable the new behavior when using the CreateSymbolicLink API, there is an additional dwFlags option you will need to set the value as:
SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
0x2
So by choosing the above value, you have specified the flag to allow the creation of symbolic links when the process is not elevated.
To read more on how to create Symlink using CreateSymbolicLink API, visit windows.com.
Read: Create Hardlinks, Symbolic Links, Junctions, Volume Mountpoints.
Conclusion
It can be said that Symlinks are more useful than mere shortcuts however they are a bit difficult to create. An average PC user may still find it a little scary to create. What’s more, even today, many users struggle to understand the concept of shortcuts well and hence may struggle to differentiate Symlinks and understand its use.
Having said that, it is almost a guarantee that you will find it easy to change whatever settings you can so that a program is pointing to the right directory, and you don’t really create a Symlink, but knowing how to set up and use a good Symlink can be really handy.