"З'єднання каталогів" проти "символічне посилання каталогу"?


392

У контексті NTFS:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Створює символьне посилання каталогу. За замовчуванням - це символьне посилання на файл.
/H Створює жорстке посилання замість символічного посилання.
/J Створює з'єднання каталогів.
Link вказує нове символічне ім'я посилання.
Target вказує шлях (відносний чи абсолютний), на який посилається нове посилання.

  1. Чи не з'єднання каталогів є таким самим, що символічне посилання на каталог ?

    Яка різниця між mklink /D f1 f2і mklink /J f1 f2?

  2. Оскільки "каталог" насправді є лише файлом , яка буде різниця між символьним посиланням на каталог та символьним посиланням на файл?


2
Пов’язано: superuser.com/q/347930/24500
surfasb

Відповіді:


364

З'єднання, безумовно, не те саме, що символічне посилання на каталог, хоча вони поводяться аналогічно. Основна відмінність полягає в тому, що, якщо ви дивитесь на віддалений сервер, переходи обробляються на сервері, а символьні посилання каталогів обробляються у клієнта . Також дивіться коментар Метью щодо того, що це означає, що символічні посилання в локальній файловій системі можуть вказувати на віддалені файлові системи.

Припустимо, що на машині на ім'я Аліса вам слід було поставити точку з'єднання c:\myjpта символьне посилання каталогу c:\mysymlink, обидва вказують на c:\targetfolder. Поки ви використовуєте Alice, ви не помітите великої різниці між ними. Але якщо ви використовуєте іншу машину на ім'я Боб, то точка стику

\\Alice\c$\myjp вкаже на \\Alice\c$\targetfolder

але символічна ланка

\\Alice\c$\mysymlink вкаже на \\Bob\c$\targetfolder

(Caveat: за замовчуванням система не слідує посиланнями на віддалених томах, тому в більшості випадків другий приклад насправді призводить до того, що "Файл не знайдено" або "Символічне посилання неможливо дотримуватися, оскільки його тип вимкнено." )

Різниця між символьним посиланням на каталог і символьним посиланням на файл полягає лише в тому, що один представляє каталог, а один - файл. Оскільки ціль посилання не потребує існування при створенні посилання, файлова система повинна знати, чи потрібно казати програмам, що це каталог чи ні.

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


13
Просто для того, щоб було зрозуміло: між місцями з'єднань каталогів та символічними посиланнями директорій можуть існувати й інші тонкі функціональні відмінності. Віддалене порівняно з локальною річчю є найбільш очевидною з точки зору користувача (на відміну від розробника).
Гаррі Джонстон

12
@MatthewSteeples ви маєте в виду , що якщо я створюю символічне посилання C:\testlink(яка вказує C:\testна моєму комп'ютері) і хто - то віддалений доступ мій комп'ютер і натискає на C:\testlinkце дозволило б на C:\testна своєму комп'ютері, приймаючи у увагу , якщо я створюю каталог стик C:\testlink(який вказує на C:\testна моєму комп’ютері), а хтось віддалено отримує доступ до мого комп'ютера і натискає C:\testlink), це призведе його до C:\testмого комп'ютера? Або я зрозумів це неправильно?
Печер'є

9
@Pacerier в цьому контексті так, але символічні посилання дозволяють мати на своєму комп’ютері папку, яка вказує на мережеву спільну доступність (оскільки вони вирішені на стороні клієнта). Напр. C: \ MyNetworkShare насправді може вказувати на \\ Алісу \ Поділитися
Метью Стіплз

6
@MatthewSteeples, але хіба ми не могли створити з'єднання каталогів, C:\MyNetworkShareяке також вказує \\Alice\Share?
Пейс’єр

8
@Pacerier, ні, точки стику повинні бути локальними.
Гаррі Джонстон

55

Складна розмова болить мозок - мені подобаються графіки:

Припустимо, що будь- MyLinkяке символічне посилання, а будь-яке MyJunc- перехід, що вказує на Target as created.

напр

mklink /D MyLink C:\T_Dir для створення символічного посилання на цільовий каталог

mklink /J MyJunc C:\T_Dir для створення стику каталогу до цільового каталогу

Де синтаксис mklink [/J,/D] [link path] [target path]набраний на локальній машині


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

Помилка * 1 - Якщо ви розблокували доступ до віддалених символічних посилань на своїй локальній машині, це буде працювати .. але лише на локальній машині, де він розблокований


3
Це так дивно. Навіть відносні символьні посилання не працюють віддалено. Наприклад, я створюю каталог d:\_tmp\data. Створити посилання наступним чином: d:\_tmp>mklink /d data-link data. Віддалений користувач має повний доступ до d:\_tmpвсіх його папок, але він все одно не зможе відкрити d:\_tmp\data-link.
Nux

4
Це тому, що коли символічне посилання оцінюється на стороні клієнта, воно вказувало б на дані d: \ _ tmp \ на клієнті, а не на сервері.
apraetor

Я думаю, що причина, чому це дивно, зрозуміла. Але я погоджуюся з @Nux, що це дивно, принаймні у випадку відносних символьних посилань.
Джон Кумбс

Complex talk hurts brain -- I like chartsЯ люблю це речення, і діаграму теж.
Лук

46

Символічні посилання мають більшу функціональність, тоді як з'єднання майже здаються застарілою функцією через їх обмеження, але наслідки цих обмежень для безпеки є саме тим, чому перехід може бути переважнішим над символічним посиланням. Віддалене націлення робить символічні посилання більш функціональними, але також підвищує їх захисний профіль, тоді як стики можуть вважатися безпечнішими, оскільки вони обмежені локальними шляхами . Отже, якщо ви хочете локальне посилання і можете жити абсолютним шляхом, вам, мабуть, краще пройти з перемичкою; в іншому випадку розглянемо символічне посилання на його додаткові здібності.

введіть тут опис зображення

** Заява про різницю швидкості / складності походить від неперевіреного твердження у статті Вікіпедії про точки перегляду NTFS (добре прочитане). *


Інші порівняння посилань NTFS

Ось деякі інші порівняння по темі, але вони можуть бути оманливими при розгляді розв’язок, оскільки вони не перераховують переваги, які я перелічу вище.

Взято звідси (хороше вступне прочитання)

введіть тут опис зображення

Зі сторінки SS64 на MKLink

введіть тут опис зображення


Коментарі про термінологію

З'єднання - символічні посилання

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

NTFS

Незважаючи на те, що ОП це визначає, варто зазначити, що "символічне посилання" - це дуже загальний термін, не характерний для NTFS. Отже, якщо бути конкретним, це порівняння стосується символів NTFS Junctions vs. NTFS.


3
Хтось перевіряв швидкість обробки Junctions vs Symbolic Links?
1000Gbps

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