Mklink for windows xp

Жесткие и символические ссылки давно знакомы и активно используются Linux-администраторами, в то время как их Windows коллеги используют их гораздо реже, а некоторые вообще не знают о такой возможности. Тем не менее такая возможность в Windows существует и позволяет значительно упростить некоторые сценарии работы с папками и файлами. В данной статье мы рассмотрим все виды ссылок, доступные в среде ОС Windows, а также разные способы работы с ними, начиная от командной строки и заканчивая PowerShell.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Жесткие ссылки (HardLink)

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

Мы можем переименовывать, копировать, перемещать (в пределах логического тома) ссылки — размер занимаемого места при этом не изменится. При удалении ссылок файл продолжает существовать до тех пор, пока не будет удалена последняя жесткая ссылка на него. Фактически отличить, где находится оригинальный файл, а где жесткая ссылка невозможно, по сути, файл на разделе это и есть жесткая ссылка.

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

Для создания жесткой ссылки можно воспользоваться утилитой mklink:

mklink /H C:\Folder1\LinkFileName C:\Folder\FileName

Где ключ /H предписывает создать именно жесткую ссылку, далее следует путь к новому файлу и целевому файлу, на который мы делаем ссылку. Путь можно указывать как абсолютные, так и относительные, в имени создаваемого файла не забывайте указывать расширение.

windows-hardlink-and-symlink-001.png

Ссылки можно создавать и при помощи PowerShell, для этого воспользуйтесь командой:

New-Item -ItemType HardLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName

Команда другая, но принцип тот же самый: -ItemType — тип создаваемой ссылки, в нашем случае жесткая ссылка, -Path — путь к создаваемому файлу ссылки, -Target — файл на который мы делаем ссылку.

windows-hardlink-and-symlink-002.png

Можно ли сделать жесткую ссылку на директорию? Нет, только на файлы.

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

При желании мы можем провернуть даже такой фокус:

windows-hardlink-and-symlink-003.png

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

Но при этом надо очень внимательно относиться к вопросу одновременного редактирования файла, так как он существует в единственном экземпляре, но доступен по множеству ссылок в этом сценарии могут возникнуть самые разные коллизии.

Точки соединения (Junction)

Очень старая технология, поддерживаемая еще начиная с Windows 2000, позволяет сделать один из каталогов псевдонимом другого каталога. Чем-то напоминает символические ссылки, но в крайне упрощенном варианте. В качестве цели можно использовать только локальные папки, но при этом нет ограничения по размещению их на одном томе. Т.е. целевая папка может находиться на диске C:, а точка соединения для нее на диске D: и все будет работать. Точки соединения поддерживаются файловыми системами NTFS и ReFS.

Для создания точки соединения можно использовать mklink:

mklink /J D:\LinkFolder C:\Folder

Ключ /J указывает на создание точки соединения, далее следует папка каталога-псевдонима и папка целевого каталога. При любом изменении целевого каталога (перемещение, переименование, удаление) точка соединения перестает работать.

Обратите внимание, что данная папка в проводнике отображается как ярлык, а выводе команды dir как точка соединения.

windows-hardlink-and-symlink-004.png

Это же действие в 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:\Folder1\LinkFileName C:\Folder\FileName

При создании ссылки не забываем указать расширения для файла. Как и в случае с точкой соединения символическая ссылка отображается в виде ярлыка и обозначается в выводе команды dir:

windows-hardlink-and-symlink-005.png

Для создания символической ссылки на директорию добавьте ключ /D:

mklink /D D:\LinkFolder C:\Folder

В PowerShell все проще, тип объекта будет определен автоматически:

New-Item -ItemType SymbolicLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName

Если в качестве цели указан файл — будет создана ссылка на файл, каталог — ссылка на каталог.

При переименовании, перемещении или удалении исходного файла или каталога все символические ссылки работать перестанут:

windows-hardlink-and-symlink-006.png

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Table of Contents

  • Introduction
  • Shortcut vs Simbolic Links
    • Shortcuts
    • Symbolic Links
  • How to create Symbolic Links
  • Conclusion

In this post we’ll explain the concept of symbolic links, a neat feature available in NFTS-enabled Windows operating system that can be used to create «proxies» or «pointers» for files or folders located elsewhere. In a nutshell, a symbolic link is a file-system object that has the sole purpose to point to another file system object: the object acting as a pointer is the symbolic link, while the one being pointed to is called target.

If you think that we’re talking about shortcuts, you’re wrong: although there are indeed similarities between the two concepts, the actual implementation is completely different. To better understand these kinds of difference, though, is advisable to step back and talk about what aliases and shortcuts actually are and how they do differ in a typical operating system.

Introduction

In general terms, an alias is defined as an alternate name for someone or something: the noun is derived from the Latin adverb alias, meaning «otherwise» and, by extension, «also known as» (or AKA). In information technology, and more specifically in programming languages, the word alias is often used to address an alternative name for a defined data item, which can be defined only once and then referred by one or multiple aliases: such item can be an object (i.e. a class instance), a property, a function/method, a variable, and so on. In short words, we can say that an alias is an alternate (and arguably most efficient) way to reference to the same thing. This eventually led to a more widespread usage, also including e-mail aliases — a feature of many MTA services that allows to configure multiple e-mail prefixes for a single e-mail account —  and other implementations based upon the overall concept.

The main characteristic of an alias lies in the fact that it is an alternative reference to  the same item: it different from other common terms frequently used in information technology, such as the shortcut — which defines a quicker way to reachyet not reference to — a given item, target, or goal. To explain it even better, we could say that the alias is a different way to address something, while the shortcut is a different way to reach it. Such difference can be trivial or very important, depending of what we need to do.

Shortcut vs Simbolic Links

The perfect example to visualize the differences between shortcuts and aliases is a typical Windows operating system. From the desktop to the start menu, a Windows environment is tipically full of shortcuts: we do have shortcuts to run programs, to look into the recycle bin, to open a folder (which can contains other shorcuts), and so on. In a nutshell, a Windows shortcut is basically just a file that tells Windows what other file needs to be opened whenever it gets clicked, executed or activated: we could just say that a shortcut is a physical resource designed to redirect to another (different) resource: it help us to get there, yet it’s not an alternate way to address it. This means, for example, that its reference won’t be affected if we delete it. It also means that we can change its reference at any time, without altering its status (it will still be a shortcut) and without affecting its previous reference (cause they are completely different things and not related in any way).

An alias doesn’t work like that: whatever command we issue to it would likely have effect on the actual item to which it refers: we could say that an alias is a different (and additional) path to access the same resource. As a matter of fact, it ultimately depends on how the alias feature has been implemented on that specific scenario we’re dealing with, but that’s how it usually works in most programming languages, operating systems, database services and similar IT environments that usually make use of the concept. That’s how it works on UNIX, where aliases are called links, and also in Windows NTFS, where they are known as symbolic links.

Shortcuts

In modern Windows, a shortcut is an handle that allows the user to find a file or resource located elsewhere. Microsoft Windows introduced such concept in Windows 95 with the shell links, which are still being used nowadays: these are the files with the .lnk extension you most likely already know (the .url extension is used when the target is a remote location, such as a web page). Microsoft Windows .lnk files operate as Windows Explorer extensions, rather than file system extensions.

From a general perspective, a shortcut is basically a regular file containing path data: we can think on them as text files which only contain a URI for a file, a folder or any other external resource (UNC share, HTTP(s) address, and so on): that URI gets executed whenever the user clicks on (executes) them, as long as the operating system allows it — which is the default behaviour by default, but can be disabled for security reasons. Anyway, shortcuts are treated like ordinary files by the file system and by software programs that are not aware of them: only software programs that understand what shortcuts are and how they work — such as the Windows shell and file browsers — are able to «properly» treat them as references to other files.

Symbolic Links

Conversely from aliases, NTFS symbolic links (also known as symlink) have been implemented to function just like the UNIX aliases: for that very reason, they are transparent to users and applications. They do appear just any other standard file or folder, and can be acted upon by the user or application in the same manner. Such «transparency» makes them perfect to aid in migration and/or application compatibility tasks: whenever we have to deal with an «hardcoded» path that cannot be changed, and we don’t want to physically move our files there, we can create a symbolic link pointing to that address and fix our issue for good.

On Windows Vista and later, including Windows 10, symbolic links can be created uisng the mklink.exe command-line tool in the following way:

mklink [[/d] | [/h] | [/j]] <Link> <Target>

Here’s an explanation of the relevant parameters:

  • /d – This parameter creates a directory symbolic link. mklink creates a file symbolic link by default.
  • /h – This parameter creates a hard link instead of a symbolic link.
  • /j – This parameter creates a Directory Junction.
  • <Link> – This parameter specifies the name of the symbolic link that is being created.
  • <Target> – This parameter specifies the path that the new symbolic link refers to.
  • /? – This parameter displays help.

In Windows XP, where mklink.exe is not available, you can use the junction utility by Mark Russinovich, now offered by Microsoft as a part of their official Sysinternals suite (download link).

It’s worth noting that, as a viable alternative of mklink.exe, in Windows Vista and later you can also use the New-SymLink Powershell function.

Conclusion

That’s pretty much about it: we hope that this small guide will be useful for those who’re looking for a way to create symbolic links and/or to gain valuable info regarding aliases and shortcuts.

Символическая ссылка (симлинк, символьная ссылка, 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 утилита для создания симлинков в windows

Синтаксис у утилиты
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

параметр групповой политики Create Symbolic Links

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

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

Должно появится сообщение:

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

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

Теперь создадим в этом каталоге симлинк на другой каталог на этом же диcке:

mklink /D “C:\PS\Downloads” “C:\Users\user\Downloads”

пример использования mklink для создание символьных ссылок в windows

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

символическая ссылка на каталог в windows

Выведем содержимое каталога C:\PS:

Dir c:\ps

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

Dir вывести информацию о всех symlink в папке

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

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

создать SymbolicLink с помощью powershell

Можно создать символическую ссылку на сетевую папку на удаленном компьютере/сервере. Адрес сетевой папки нужно указывать в формате UNC. Следующий пример создаст симлинк на сетевой каталог на сервере:

mklink /D c:\ps\share \\mskfs01\Share

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

mklink /D c:\remotePC\server1 \\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 query SymlinkEvaluation

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

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

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

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

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

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

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

Вы можете вывести список всех символических ссылок на диске с помощью команды:

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

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

вывести все симлинке на диске в windows

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

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

MKLINK in Windows XP?

Windows XPRoman

If you need to create symbolic link in Windows XP download Junction. It can do the same and it is available for free 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

Comment *

Name *

Email *

Website

Save my name, email, and website in this browser for the next time I comment.

Windows Symbolic links, Hard links, Junctions and problem accessing remotely

Filed under: MS — raj2796 @ 11:03 am

Microsoft has once again implemented more features from rival os’s, which can only be a good thing since in this case it’s Linux. Symbolic links, hard links and junctions can now be created in windows via the mklink command, older OS’s e.g. XP need to download the resource pack and grab linkd

USAGE

Mklink – vista/windows 7/ windows 2008 / windows 8

There are 3 options for mklink

  • Symbolic links – selected via the /D flag – these are like short cuts – a symbolic link to a directory is created, the default is a file symbolic link . For those of us from Linux think softlink
  • Hard link – selected via the /H flag – only for files – if you delete the hard link you delete the actual file as opposed to symbolic links where you just delete the link to the file
  • Junction – selected via the /J flag – created a directory junction i.e. hard link to a directory

For example, if you want to create a symbolic link from your appv content directory e.g. c:\AppV\content to a dev directory e.g. c:\AppV\dev you would type:

mklink /D c:\Appv\content\dev c:\Appv\dev

as shown in the below image

Linkd - only on older machines such as XP, mklink is far better

LINKD Link [/D] Target

REMOTE ACCESS TO LINKS

I suggest using a junction, they work remotely by default, however if you need to access a symbolic link remotely you can by editing the symbolic link evaluation. MS explain this on technet here – the relevant part being:

Evaluations. A user can enable or disable any of the four evaluations that are available in symbolic links. The available evaluations are:

  • Local-to-local describes a computer accessing a local symbolic link that points to a local file or folder.
  • Local-to-remote is a computer accessing a local symbolic link that points to a Universal Naming Convention (UNC) path using the server message block (SMB) protocol.
  • Remote-to-local is a computer accessing a remote symbolic link that points to a local file or folder using SMB.
  • Remote-to-remote describes a computer accessing a remote symbolic link that points to a remote UNC path using SMB.

to allow all use the command :

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

e.g:

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Adguard аналоги для windows
  • Переход в каталог в командной строке windows
  • Powershell windows firewall status
  • Виджет стикеры на рабочий стол windows 10
  • Заставка для рабочего стола windows vista