„Połączenie katalogu” vs „symboliczne łącze do katalogu”?

392

W kontekście NTFS:

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

/D Tworzy dowiązanie symboliczne do katalogu. Domyślnie jest dowiązaniem symbolicznym pliku.
/H Tworzy dowiązanie twarde zamiast dowiązania symbolicznego.
/J Tworzy połączenie katalogu.
Link określa nową nazwę dowiązania symbolicznego.
Target określa ścieżkę (względną lub bezwzględną), do której odnosi się nowy link.

  1. Czy połączenie katalogu nie jest dokładnie tym samym, co symboliczne łącze do katalogu ?

    Jaka jest różnica między mklink /D f1 f2i mklink /J f1 f2?

  2. Ponieważ „katalog” jest w rzeczywistości tylko plikiem , jaka byłaby różnica między dowiązaniem symbolicznym katalogu a dowiązaniem symbolicznym pliku?

Pacerier
źródło
2
Powiązane: superuser.com/q/347930/24500
surfasb

Odpowiedzi:

364

Połączenie to zdecydowanie nie to samo, co dowiązanie symboliczne katalogu, chociaż zachowują się podobnie. Główna różnica polega na tym, że jeśli patrzysz na zdalny serwer, połączenia są przetwarzane na serwerze, a dowiązania symboliczne katalogu są przetwarzane na kliencie . Zobacz także komentarz Matthew na temat tego, że oznacza to, że dowiązania symboliczne w lokalnym systemie plików mogą wskazywać na zdalne systemy plików.

Załóżmy, że na komputerze o nazwie Alice należy umieścić punkt połączenia c:\myjpi symboliczne łącze do katalogu c:\mysymlink, oba wskazujące c:\targetfolder. Podczas korzystania z Alicji nie zauważysz dużej różnicy między nimi. Ale jeśli używasz innej maszyny o nazwie Bob, to punkt połączenia

\\Alice\c$\myjp wskaże na \\Alice\c$\targetfolder

ale symboliczny link

\\Alice\c$\mysymlink wskaże na \\Bob\c$\targetfolder

(Zastrzeżenie: domyślnie system nie śledzić dowiązania na tomach odległych, więc w większości przypadków drugi przykład rzeczywiście spowodować albo „Nie można odnaleźć pliku” lub „Symboliczny link może nie nastąpić, ponieważ jego typ jest wyłączone” )

Różnica między dowiązaniem symbolicznym katalogu a dowiązaniem symbolicznym pliku polega na tym, że jeden reprezentuje katalog, a drugi plik. Ponieważ cel łącza nie musi istnieć podczas tworzenia łącza, system plików musi wiedzieć, czy powiedzieć aplikacjom, że jest to katalog, czy nie.

Należy również zauważyć, że utworzenie dowiązania symbolicznego wymaga specjalnych uprawnień (domyślnie dostępne tylko dla procesów z podwyższonym poziomem uprawnień), natomiast utworzenie połączenia wymaga jedynie dostępu do systemu plików.

Harry Johnston
źródło
13
Żeby było jasne: mogą istnieć inne subtelniejsze różnice funkcjonalne między połączeniami katalogów a symbolicznymi linkami do katalogów. Zdalna vs. lokalna rzecz jest najbardziej oczywista z punktu widzenia użytkownika (w przeciwieństwie do dewelopera).
Harry Johnston,
12
@MatthewSteeples masz na myśli to, że jeśli utworzę dowiązanie symboliczne C:\testlink(które wskazuje C:\testna mój komputer) i ktoś zdalnie C:\testlinkuzyska dostęp do mojego komputera i kliknie , rozwiąże to problem C:\testna komputerze HIS, natomiast jeśli utworzę złącze katalogu C:\testlink(co wskazuje na C:\testna moim komputerze), a ktoś zdalnego dostępu do mojego komputera i kliknie C:\testlink) prowadziłoby to do niego C:\testna moim komputerze? A może źle to zrozumiałem?
Pacerier
9
@Pacerier w tym kontekście tak, ale dowiązania symboliczne pozwalają mieć folder na twoim komputerze, który wskazuje na udział sieciowy (ponieważ są one rozwiązane po stronie klienta). Np. C: \ MyNetworkShare może faktycznie wskazywać na \\ Alice \ Share
Matthew Steeples
6
@MatthewSteeples, ale czy nie moglibyśmy utworzyć złącza katalogu, C:\MyNetworkSharektóre również wskazuje \\Alice\Share?
Pacerier,
8
@Pacerier, nie, punkty połączeń muszą być lokalne.
Harry Johnston,
55

Złożona rozmowa boli mózg - lubię wykresy:

Załóżmy, że dowolny MyLinkjest dowiązaniem symbolicznym, a dowolny MyJuncoznacza skrzyżowanie wskazujące Target as created.

na przykład

mklink /D MyLink C:\T_Dir do tworzenia dowiązania symbolicznego do katalogu docelowego

mklink /J MyJunc C:\T_Dir do utworzenia połączenia katalogu z katalogiem docelowym

Gdzie składnia jest taka, mklink [/J,/D] [link path] [target path]jak na maszynie lokalnej


 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 ***

Błąd * 1 - Jeśli odblokowałeś dostęp do zdalnych dowiązań symbolicznych na komputerze lokalnym, to zadziałałoby .. ale tylko na komputerze lokalnym, na którym został odblokowany

Still.Tony
źródło
3
To takie dziwne. Nawet względne dowiązania symboliczne nie działają zdalnie. Np. Tworzę katalog d:\_tmp\data. Utwórz link tak: d:\_tmp>mklink /d data-link data. Zdalny użytkownik ma pełny dostęp do d:\_tmpwszystkich podfolderów, ALE wciąż nie będzie mógł otworzyć d:\_tmp\data-link.
Nux
4
Jest tak, ponieważ gdy dowiązanie symboliczne jest oceniane po stronie klienta, wskazywałoby ono na d: \ _ tmp \ data na kliencie, a nie na serwerze.
apraetor
Myślę, że powód, dla którego jest to dziwne, jest jasny. Ale zgadzam się z @Nux, że to dziwne, przynajmniej w przypadku względnych dowiązań symbolicznych.
Jon Coombs
Complex talk hurts brain -- I like chartsUwielbiam to zdanie i tabelę.
Luke
46

Dowiązania symboliczne mają większą funkcjonalność, podczas gdy połączenia wydają się być raczej starszą funkcją ze względu na ich ograniczenia, ale implikacje bezpieczeństwa dla tych ograniczeń są szczególnie ważne, dlaczego połączenie może być preferowane zamiast łącza symbolicznego. Zdalne kierowanie sprawia, że ​​dowiązania symboliczne są bardziej funkcjonalne, ale także podnosi ich profil bezpieczeństwa, a skrzyżowania można uznać za bezpieczniejsze, ponieważ są ograniczone do lokalnych ścieżek . Tak więc, jeśli chcesz mieć link lokalny i możesz żyć z absolutną ścieżką, prawdopodobnie lepiej jest z skrzyżowaniem; w przeciwnym razie weź pod uwagę symboliczne łącze dla jego dodatkowych umiejętności.

wprowadź opis zdjęcia tutaj

** Stwierdzenie różnicy prędkości / złożoności pochodzi z niezweryfikowanego stwierdzenia we wpisie w Wikipedii na temat punktów ponownej analizy NTFS (dobry odczyt). *


Inne porównania linków NTFS

Oto kilka innych porównań na ten temat, ale mogą one wprowadzać w błąd przy rozważaniu skrzyżowań, ponieważ nie wymieniają korzyści wymienionych powyżej.

Zaczerpnięte stąd (dobra lektura wprowadzająca)

wprowadź opis zdjęcia tutaj

Ze strony SS64 na MKLink

wprowadź opis zdjęcia tutaj


Komentarze na temat terminologii

Połączenia są dowiązaniami symbolicznymi

Połączenia i dowiązania symboliczne naprawdę robią to samo w ten sam sposób (punkty ponownej analizy), oprócz wyżej wymienionych różnic w ich przetwarzaniu. W rzeczywistości technicznie Junction jest dowiązaniem symbolicznym, a czasami dokumentacja może nazywać Junction dowiązaniem symbolicznym, jak ma to miejsce w tym przypadku . Jest to coś, o czym należy pamiętać w odniesieniu do terminologii.

NTFS

Mimo że PO to określa, warto zauważyć, że „dowiązanie symboliczne” jest bardzo ogólnym terminem, który nie jest specyficzny dla NTFS. Mówiąc ściślej, to porównanie dotyczy połączeń NTFS vs. dowiązań symbolicznych NTFS.

u8it
źródło
3
Ktoś przetestował szybkość przetwarzania połączeń w porównaniu do dowiązań symbolicznych?
1000 Gb / s
Tabela zalet / wad była bardzo pomocna, dziękuję!
GordonM,