Яка різниця між символічним посиланням та ярликом?
Яка різниця між символічним посиланням та ярликом?
Відповіді:
Я думаю, що важливим моментом є те, що ярлики - це лише файл. Вони мають розмір (Невеликий, який лише посилається на те, де вони вказують), і для їх використання потрібна програма для підтримки цього файлу.
Символічне посилання - це рівень файлової системи, і все розглядає його як вихідний файл. Програмі не потрібна спеціальна підтримка для використання символічного посилання.
find
, tar
, du
і т.д.) дійсно потрібно знати про символічних посиланнях або вони можуть зробити деякі дуже дурні речі. Наприклад, сліпування наступних символьних посилань може створювати цикли у файловій системі, і це погано .
"Символічна посилання" насправді може функціонувати як заміна каталогу або файлу функціонально, і зазвичай використовується в середовищах Unix / Linux. Хоча, очевидно, є підтримка цього в Windows, я ще не бачив фактичного використання цього.
"Ярлик" - це лише звичайний файл, який містить посилання на цільовий файл чи каталог разом із деякими іншими речами, такими як значок, що відображається. На відміну від Symbolic Link, ви не можете "cd ./shortcut-name" в DOS (в Unix / Linux ви можете "cd ./symlink-name", і він буде працювати як справжній підкаталог).
Крім того, у більшості програм Windows, коли ви натискаєте ярлик у будь-якому діалоговому вікні Файл-> Відкрити графічний інтерфейс, поле вашого імені файлу заповнюється іменем файлу цього ярлика, а також воно діє як підкаталог, в той час як в Unix / Linux GUI трактує символічне посилання як шлях (без зміни поля імені файлу).
Як зазначали інші, символічне посилання є одним із видів посилань, доступних на рівні файлової системи, що робить його прозорим для додатків. Я вважаю цю документацію дуже корисною (напр., Розділ "Обрізати / відкручувати / зрощувати зовнішні з'єднання / символічні посилання"). І інструмент там теж виглядає приємно. (Згадуючи це, і mklink, сподіваємось, що більше дискусій знайде цю дискусію.)
Ярлик - це файл, а не реальна посилання, і він, як правило, успішно виконується лише як посилання, коли його інтерпретують інтерфейс Windows (користувальницький інтерфейс). Наприклад, коли ви двічі клацніть по ярлику папки, Windows перенаправляє вас до іншого місця. (Сюди входять загальні діалогові діалогові вікна відкриття та збереження файлів, до яких звертається більшість програм.) На робочому столі у мене є ярлик до цієї папки: C: \ ProgramData \ Microsoft \ Windows \ Меню Пуск \ Програми \ G
Ім'я файлу ярлика: C: \ Users \ user5 \ Desktop \ Games.lnk, хоча Windows пригнічує розширення .lnk і просто показує "Ігри", навіть якщо ви зніміть позначку "приховати розширення для відомих типів файлів". Але якщо ви відкриєте командний рядок і зробите реж, ви побачите це:
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, як і ця консоль та більшість програм, дозволить переглядати "вниз" цей очевидний підкаталог, а не (а) перенаправляти "через" в інше місце розташування або (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"
У той час як при спробі виконати Блокнот у фактичній підпапці з'являється повідомлення про помилку "Доступ заборонено" та порожній Блокнот.
І навпаки, якщо я створюю файл посилання (не папка symlink), я можу запустити його за допомогою 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, яку мають лише адміністратори за замовчуванням. "
"Символічні посилання відрізняються від ярликів тим, що вони пропонують прозорий шлях * до потрібного об'єкта даних, за допомогою ярлика (.lnk) щось потрібно прочитати та інтерпретувати вміст файлу ярлика, а потім відкрити файл, на який він посилається (тобто це двоступеневий процес). Коли програма використовує симпосилання, вона отримує негайний доступ до об'єкта даних, на який посилається симпосилання (тобто це одноетапний процес). "
Джерело: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html
Іноді добре мати функціональний приклад, тому я погано пояснюю, як я використовую цю функцію.
Я використовую диск Google для резервного копіювання файлів, але іноді я хочу створити резервну копію файлів у певній папці (я не можу перемістити їх на ../google-диск). Особливо з Windows 10 універсальними програмами, конфігураційні файли та інше зберігаються в appdata, і більшу частину часу я не можу змінити це місце.
Я використовую рідну програму Windows stikynot, і я хотів створити резервну копію своїх нотаток, тому я тут використав симпосилання. Диск Google розпізнає посилання як фактичний файл і синхронізує файли просто чудово, в той час як фактичний файл все ще знаходиться в папці appdata.
Коли у мене локально є такі файли, як папки проектів, які я не хочу синхронізувати з хмарою, я використовую ярлики (копіювати, вводити-> ярлик ярлика).