Яка різниця між символічним посиланням та ярликом?


Відповіді:


57

Я думаю, що важливим моментом є те, що ярлики - це лише файл. Вони мають розмір (Невеликий, який лише посилається на те, де вони вказують), і для їх використання потрібна програма для підтримки цього файлу.

Символічне посилання - це рівень файлової системи, і все розглядає його як вихідний файл. Програмі не потрібна спеціальна підтримка для використання символічного посилання.


6
Дерево ходьба команда (всі як утиліти UNIX find, tar, duі т.д.) дійсно потрібно знати про символічних посиланнях або вони можуть зробити деякі дуже дурні речі. Наприклад, сліпування наступних символьних посилань може створювати цикли у файловій системі, і це погано .
dmckee

9
@dmckee; Дуже добре, хоча жодна програма не потребує конкретної підтримки, щоб слідувати за ними, їм потрібна конкретна підтримка, щоб не слідувати за ними!
Phoshi

Так, для їх використання не потрібна підтримка, але потрібно знати про них.
dmckee

@Phoshi Що саме ви маєте на увазі під "і для їх використання потрібна програма, яка підтримує цей тип файлу". Можете пояснити, будь ласка, прикладом?
Geek

6
@Geek: "Ярлик" - це фактично файл, який містить файловий шлях іншого файлу. Прочитавши його, ви прочитаєте спеціально відформатований файл, який підкаже, де шукати далі. Якщо ваша програма не слухає, а просто читає файл дослівно, ви не стежите за ним. Символічне посилання на рівні файлової системи, саме файлова система тримає "справжній" шлях до даних, і при спробі отримати доступ до них ви отримуєте дані, на які вказували.
Фоші

20

"Символічна посилання" насправді може функціонувати як заміна каталогу або файлу функціонально, і зазвичай використовується в середовищах Unix / Linux. Хоча, очевидно, є підтримка цього в Windows, я ще не бачив фактичного використання цього.

"Ярлик" - це лише звичайний файл, який містить посилання на цільовий файл чи каталог разом із деякими іншими речами, такими як значок, що відображається. На відміну від Symbolic Link, ви не можете "cd ./shortcut-name" в DOS (в Unix / Linux ви можете "cd ./symlink-name", і він буде працювати як справжній підкаталог).

Крім того, у більшості програм Windows, коли ви натискаєте ярлик у будь-якому діалоговому вікні Файл-> Відкрити графічний інтерфейс, поле вашого імені файлу заповнюється іменем файлу цього ярлика, а також воно діє як підкаталог, в той час як в Unix / Linux GUI трактує символічне посилання як шлях (без зміни поля імені файлу).


У Unix / Linux також є "жорсткі посилання", які застосовуються лише до файлів (а не до каталогів). Це записи природних імен файлів у файловій системі, які просто вказують на ті самі дані файлу, що й інші записи файлів десь в іншому місці (не повинно бути в одному каталозі).
Рандольф Річардсон

4
@Randolf: 1) жорсткі посилання існують і в Windows. 2) Однією з особливостей ярликів оболонки є автоматичне відстеження цілі - якщо ціль переміщена, більшість часу ярлики продовжуватимуть працювати. (У домені AD навіть можна відслідковувати файли через комп’ютери; наприклад, якщо ви переміщуєте HD в інше місце.) 3) Одне використання символьних посилань - це перенаправлення файлу або каталогу в інше місце - вони можуть вказувати на файли (на відміну від переходів ) та каталоги (на відміну від жорстких посилань), перехресні файлові системи (на відміну від жорстких посилань) та, AFAIK, можуть навіть вказувати на мережеві локації.
grawity

Пізній коментар, і я не впевнений, чи просто я не знаю, що я роблю зі скороченнями, але мені довелося створити символічне посилання замість ярлика для мого файлу vimrc (я посилаюся на проект dotfiles, який я використовую в окремий каталог).
прийняття3

10

Як зазначали інші, символічне посилання є одним із видів посилань, доступних на рівні файлової системи, що робить його прозорим для додатків. Я вважаю цю документацію дуже корисною (напр., Розділ "Обрізати / відкручувати / зрощувати зовнішні з'єднання / символічні посилання"). І інструмент там теж виглядає приємно. (Згадуючи це, і 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, яку мають лише адміністратори за замовчуванням. "


2

"Символічні посилання відрізняються від ярликів тим, що вони пропонують прозорий шлях * до потрібного об'єкта даних, за допомогою ярлика (.lnk) щось потрібно прочитати та інтерпретувати вміст файлу ярлика, а потім відкрити файл, на який він посилається (тобто це двоступеневий процес). Коли програма використовує симпосилання, вона отримує негайний доступ до об'єкта даних, на який посилається симпосилання (тобто це одноетапний процес). "

Джерело: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html


0

Іноді добре мати функціональний приклад, тому я погано пояснюю, як я використовую цю функцію.

Я використовую диск Google для резервного копіювання файлів, але іноді я хочу створити резервну копію файлів у певній папці (я не можу перемістити їх на ../google-диск). Особливо з Windows 10 універсальними програмами, конфігураційні файли та інше зберігаються в appdata, і більшу частину часу я не можу змінити це місце.

Я використовую рідну програму Windows stikynot, і я хотів створити резервну копію своїх нотаток, тому я тут використав симпосилання. Диск Google розпізнає посилання як фактичний файл і синхронізує файли просто чудово, в той час як фактичний файл все ще знаходиться в папці appdata.

Коли у мене локально є такі файли, як папки проектів, які я не хочу синхронізувати з хмарою, я використовую ярлики (копіювати, вводити-> ярлик ярлика).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.