
В чем разница между символической ссылкой и ярлыком?
решение1
Я думаю, что важным моментом является то, что ярлыки — это просто файл. У них есть размер (небольшой, который просто указывает, куда они указывают) и для их использования требуется приложение, поддерживающее этот тип файла.
Символическая ссылка находится на уровне файловой системы, и ее видят все.какисходный файл. Приложению не нужна специальная поддержка для использования символической ссылки.
решение2
"Символическая ссылка" может фактически выступать в качестве замены каталога или файла в функциональном смысле и обычно используется в средах Unix/Linux. Хотя, по-видимому, в Windows есть поддержка этого, я пока не видел ни одного фактического использования этого.
"Ярлык" — это просто обычный файл, который содержит ссылку на файл или каталог назначения, а также некоторые другие вещи, такие как значок, который будет отображаться. В отличие от символической ссылки, вы не можете "cd ./shortcut-name" в DOS (в Unix/Linux вы можете "cd ./symlink-name", и это будет работать как настоящий подкаталог).
Кроме того, в большинстве приложений Windows при нажатии на ярлык в любом диалоговом окне Файл->Открыть графического интерфейса поле имени файла заполняется именем файла этого ярлыка, и он действует как подкаталог, в то время как в Unix/Linux графический интерфейс обрабатывает символическую ссылку как путь (без изменения поля имени файла).
решение3
Как уже упоминалось, символическая ссылка — это один из видов ссылок, доступных на уровне файловой системы, что делает ее прозрачной для приложений. Я обнаружил,эта документацияочень полезно (особенно раздел "Обрезка/Раскрутка/Сращивание внешних соединений/Символических связей"). И инструмент там тоже выглядит неплохо. (Упоминание об этом и mklink, надеюсь, больше поисковиков найдут это обсуждение.)
Ярлык — это файл, а не настоящая ссылка, и он обычно успешно используется как ссылка, когда интерпретируется пользовательским интерфейсом Windows. Например, когда вы дважды щелкаете по ярлыку папки, Windows перенаправляет вас в это другое место. (Сюда входят общие диалоги открытия и сохранения файлов, которые вызывают большинство приложений.) На моем рабочем столе есть ярлык для этой папки: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\G
Имя файла ярлыка: C:\Users\user5\Desktop\Games.lnk, хотя Windows подавляет расширение .lnk и показывает только "Games", даже если вы уберете галочку "скрывать расширения для зарегистрированных типов файлов". Но если вы откроете командную строку и выполните dir, вы увидите это:
C:\Users\user5\Desktop>dir "g*"
Volume in drive C has no label.
Volume Serial Number is 900...
Directory of C:\Users\user5\Desktop
03/08/2014 05:30 PM 1,710 Games.lnk
1 File(s) 1,710 bytes
0 Dir(s) 246,818,222,080 bytes free
Я могу создать эквивалент с помощью символической ссылки, используя опцию \D (для каталога):
C:\Users\user5\Desktop>mklink /D mysymlink "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G
C:\Users\user5\Desktop>cd mysymlink
C:\Users\user5\Desktop\mysymlink>
(Возможен также вариант соединения каталогов (\J), поскольку это ссылка на папку.) Проводник Windows, как и эта консоль и большинство приложений, позволит вам перейти «вниз» в этот кажущийся подкаталог, вместо того, чтобы (a) перенаправляться «через» него в другое место или (b) завершаться ошибкой.
Ярлыки не ведут себя как подкаталоги. Я могу вызвать поведение файлов по умолчанию в пользовательском интерфейсе Windows с помощью этой команды (она открывает папку "G" в проводнике Windows):
C:\Users\user5\Desktop>"Games.lnk"
В то время как mysymlink указан (см. количество) как настоящий подкаталог и не может быть запущен таким образом:
C:\Users\user5\Desktop>dir "my*"
Volume in drive C has no label.
Volume Serial Number is 900...
Directory of C:\Users\user5\Desktop
03/29/2014 06:08 PM <DIR> mysubdir
03/29/2014 05:40 PM <SYMLINKD> mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
0 File(s) 0 bytes
2 Dir(s) 246,816,153,600 bytes free
C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.
И наоборот, вы не можете изменить каталог на ярлык:
C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.
Пользовательский интерфейс Windows позволяет вам щелкнуть правой кнопкой мыши, чтобы изменить свойства ярлыка. Или, ниже показано, что именно хранится в файле .lnk (двоичные данные), хотя шестнадцатеричный редактор отобразил бы лучше:
C:\Users\user5\Desktop>notepad.exe "Games.lnk"
В то время как попытка запустить Блокнот в реальной подпапке приводит к появлению сообщения об ошибке «Отказано в доступе» и пустому Блокноту.
И наоборот, если я создам символическую ссылку на файл (не на папку), я смогу запустить его с помощью Notepad. Из следующих вызовов notepad.exe первые два работают, а третий завершается неудачей (он открывает файл .LNK, двоичный gobbledegook).
C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt
C:\Users\user5\Desktop>notepad.exe "symplain.txt"
C:\Users\user5\Desktop>notepad.exe "plain.txt"
C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"
Это касается не только консоли. Копирование ярлыка в Блокнот на рабочий стол и попытка перетащить на него каждый из трех элементов приводит к точно такому же поведению. (Потому что перетаскивание, в отличие от двойного щелчка, позволяет приложению интерпретировать ярлык.)
О различиях между символическими ссылками каталогов и соединениями см.это обсуждение, и вот оченьполезное описание:
«Главное отличие в том, как Windows разрешает символические ссылки и соединения каталогов, заключается в том, где происходит обработка. Windows обрабатывает символические ссылки в локальной системе, даже если они ссылаются на местоположение на удаленном файловом сервере. Windows обрабатывает соединения каталогов, которые ссылаются на удаленный файловый сервер, на самом сервере. Таким образом, символические ссылки на сервере могут ссылаться на местоположения, которые доступны только с клиента, например, другие клиентские тома, тогда как соединения каталогов не могут. Чтобы решить эту проблему, Windows Vista поддерживает новый тип символических ссылок как для файлов, так и для каталогов.
«Многие команды файловой системы были обновлены, чтобы понимать последствия символических ссылок. Например, команда Delete знает, что не следует переходить по ссылкам, что привело бы к удалению цели, а вместо этого удалять ссылку. Однако, поскольку не все приложения могут правильно обрабатывать символические ссылки, для создания символической ссылки требуется новая привилегия Create Symbolic Link, которая по умолчанию есть только у администраторов».
решение4
Иногда полезно иметь функциональный пример, поэтому я объясню, как я использую эту функцию.
Я использую Google Drive для резервного копирования файлов, но иногда мне нужно сделать резервную копию файлов в определенной папке (я не могу переместить их в ../Google Drive). Особенно в Windows 10 универсальные приложения, файлы конфигурации и т. п. хранятся в appdata, и большую часть времени я не могу изменить это местоположение.
Я использую родное приложение Windows stikynot и хотел сделать резервную копию своих заметок, поэтому я использовал здесь символическую ссылку. Google Drive распознает ссылку как реальный файл и отлично синхронизирует файлы, в то время как реальный файл все еще находится в папке appdata.
Когда у меня локально хранятся файлы, например, папки проектов, которые я не хочу синхронизировать с облаком, я использую сочетания клавиш (скопировать, вставить->вставить сочетание клавиш).