Jaka jest różnica między łączem symbolicznym a skrótem?

Odpowiedzi:

57

Myślę, że ważną kwestią jest to, że skróty są tylko plikiem. Mają rozmiar (mały, który odwołuje się tylko tam, gdzie wskazują) i wymagają aplikacji do obsługi tego typu pliku, aby można go było użyć.

Dowiązanie symboliczne to poziom systemu plików i wszystko traktuje go jak plik oryginalny. Aplikacja nie wymaga specjalnego wsparcia, aby korzystać z dowiązania symbolicznego.

Phoshi
źródło
6
Polecenia drzewo Walking (coś jak narzędzi uniksowych find, tar, duitp) nie muszą wiedzieć o dowiązania symboliczne lub mogą zrobić kilka bardzo głupich rzeczy. Na przykład oślepienie następujących dowiązań symbolicznych może tworzyć cykle w systemie plików i to źle .
dmckee,
9
@dmckee; Bardzo dobry punkt, podczas gdy żadna aplikacja nie wymaga szczególnego wsparcia nimi, oni potrzebują szczególnego wsparcia nie za nimi!
Phoshi,
Tak, nie potrzebujesz wsparcia, aby z nich korzystać , ale musisz o nich wiedzieć .
dmckee,
@ Phoshi Co dokładnie rozumiesz przez „i aby aplikacja mogła obsługiwać ten typ pliku, wymagana jest aplikacja”. Czy możesz to wyjaśnić przykładem?
Geek
6
@Geek: „Skrót” to w rzeczywistości plik, który przechowuje ścieżkę pliku innego pliku. Kiedy ją czytasz, czytasz specjalnie sformatowany plik, który mówi ci, gdzie szukać dalej. Jeśli twoja aplikacja nie nasłuchuje i po prostu odczytuje plik dosłownie, nie będziesz go śledził. Dowiązanie symboliczne jest na poziomie systemu plików, to sam system plików zawiera „prawdziwą” ścieżkę do danych, a gdy próbujesz uzyskać do nich dostęp, odzyskujesz wskazane dane.
Phoshi,
20

„Łącze symboliczne” może faktycznie funkcjonalnie zastępować katalog lub plik i jest powszechnie stosowane w środowiskach Unix / Linux. Chociaż najwyraźniej jest to obsługiwane w systemie Windows, nie widziałem jeszcze żadnego faktycznego wykorzystania tego.

„Skrót” to zwykły plik, który zawiera odniesienie do pliku docelowego lub katalogu wraz z innymi rzeczami, takimi jak ikona do wyświetlenia. W przeciwieństwie do dowiązania symbolicznego, w DOS-ie nie można „cd ./shortcut-name” (w systemach Unix / Linux można „cd ./symlink-name” i będzie działał jak prawdziwy podkatalog).

Ponadto w większości aplikacji Windows, po kliknięciu skrótu w dowolnym oknie dialogowym Plik-> Otwórz GUI, pole nazwy pliku zapełnia się nazwą tego skrótu, a także działa jak podkatalog, podczas gdy w systemie Unix / Linux interfejs GUI traktuje dowiązanie symboliczne jako ścieżka (bez zmiany pola nazwy pliku).

Randolf Richardson
źródło
W systemach Unix / Linux istnieją również „Twarde linki”, które są zawsze stosowane tylko do plików (nie katalogów). Są to naturalne wpisy nazwy pliku w systemie plików, które akurat wskazują te same dane pliku, co inna pozycja pliku w innym miejscu (nie musi znajdować się w tym samym katalogu).
Randolf Richardson
4
@Randolf: 1) W systemie Windows istnieją również łącza twarde . 2) Jedną z funkcji skrótów powłoki jest automatyczne śledzenie celu - jeśli cel zostanie przeniesiony, przez większość czasu skróty będą działać. (W domenie AD można nawet śledzić pliki na komputerach; na przykład, jeśli przenosisz HD gdzie indziej.) 3) Jednym z zastosowań dowiązań symbolicznych jest przekierowanie pliku lub katalogu do innej lokalizacji - mogą wskazywać na pliki (w przeciwieństwie do skrzyżowań ) i katalogi (w przeciwieństwie do twardych linków), systemy plików (w przeciwieństwie do twardych linków) i, AFAIK, mogą nawet wskazywać lokalizację sieci.
grawity
Późny komentarz i nie jestem pewien, czy po prostu nie wiem, co robię z skrótami, ale musiałem utworzyć dowiązanie symboliczne zamiast skrótu do mojego pliku vimrc (odwołuję się do projektu dotfiles, którego używam w osobny katalog).
making3
10

Jak wspomnieli inni, dowiązanie symboliczne jest jednym z rodzajów łączy dostępnych na poziomie systemu plików, co czyni go przejrzystym dla aplikacji. Uważam, że ta dokumentacja jest bardzo pomocna (zwłaszcza sekcja „Przycinanie / rozwijanie / łączenie zewnętrznych połączeń / dowiązań symbolicznych”). Narzędzie tam też wygląda ładnie. (Wspominając o tym i mklink, mam nadzieję, że więcej wyszukiwań znajdzie tę dyskusję).

Skrót jest plikiem, a nie rzeczywistym łączem, i ogólnie jest z powodzeniem stosowany jako łącze, gdy jest interpretowane przez interfejs użytkownika systemu Windows (interfejs użytkownika). Na przykład po dwukrotnym kliknięciu skrótu do folderu system Windows przekierowuje do innej lokalizacji. (Obejmuje to ogólne okna dialogowe otwierania plików i zapisywania plików, które są wywoływane przez większość aplikacji). Na pulpicie mam skrót do tego folderu: C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ G

Nazwa pliku skrótu to: C: \ Users \ user5 \ Desktop \ Games.lnk, chociaż system Windows pomija rozszerzenie .lnk i wyświetla po prostu „Gry”, nawet jeśli odznaczysz „ukryj rozszerzenia dla znanych typów plików”. Ale jeśli otworzysz wiersz polecenia i zrobisz katalog, zobaczysz to:

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

Mogę utworzyć ekwiwalent za pomocą dowiązania symbolicznego, używając opcji \ D (dla katalogu):

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>

(Złącze katalogu (\ J) jest również opcją, ponieważ jest to łącze do folderu). Eksplorator Windows, podobnie jak ta konsola i większość aplikacji, pozwoli ci przeglądać „w dół” tego widocznego podkatalogu, zamiast (a) przekierowywania „w poprzek” do innej lokalizacji lub (b) awaria.

Skróty nie zachowują się jak podkatalogi. Za pomocą tego polecenia mogę wywołać domyślne zachowanie pliku interfejsu użytkownika systemu Windows (spowoduje to otwarcie folderu „G” w Eksploratorze Windows):

C:\Users\user5\Desktop>"Games.lnk"

Podczas gdy mysymlink jest wymieniony (patrz liczba) jako prawdziwy podkatalog i nie można go uruchomić w ten sposób:

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.

I odwrotnie, nie można zmienić katalogu na skrót:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

Interfejs użytkownika systemu Windows pozwala kliknąć prawym przyciskiem myszy, aby edytować właściwości skrótu. Lub poniżej pokazano dokładnie, co jest faktycznie przechowywane w pliku .lnk (dane binarne), chociaż edytor szesnastkowy byłby lepszy:

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

Podczas próby uruchomienia Notatnika na rzeczywistym podfolderze pojawia się komunikat o błędzie „Odmowa dostępu” oraz pusty Notatnik.

I odwrotnie, jeśli utworzę symlink pliku (nie symlink folderu), mogę uruchomić go za pomocą Notatnika. Z następujących wywołań notepad.exe pierwsze dwa działają, a trzecie kończy się niepowodzeniem (otwiera plik .LNK, binarny 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"

To nie jest tylko konsola. Skopiowanie skrótu do Notatnika na mój pulpit i próba przeciągnięcia i upuszczenia każdego z nich na trzy powoduje zachowanie dokładnie tego samego. (Ponieważ przeciąganie i upuszczanie, w przeciwieństwie do podwójnego kliknięcia, pozwala aplikacji interpretować skrót).

Jeśli chodzi o różnice między dowiązaniami symbolicznymi i połączeniami katalogów, zobacz tę dyskusję , a oto bardzo pomocny opis :

„Główną różnicą w sposobie, w jaki system Windows rozpoznaje dowiązania symboliczne i połączenia katalogów, jest miejsce, w którym odbywa się przetwarzanie. Windows przetwarza dowiązania symboliczne w systemie lokalnym, nawet jeśli odnoszą się do lokalizacji na zdalnym serwerze plików. Windows przetwarza połączenia katalogu, które odnoszą się do zdalnego serwer plików na samym serwerze. Dowiązania symboliczne na serwerze mogą zatem odnosić się do lokalizacji, które są dostępne tylko z poziomu klienta, podobnie jak inne woluminy klienta, podczas gdy połączenia katalogów nie. Aby rozwiązać ten problem, system Windows Vista obsługuje nowy typ dowiązań symbolicznych dla obu plików i katalogi.

„Wiele poleceń systemu plików zostało zaktualizowanych, aby zrozumieć implikacje dowiązań symbolicznych. Na przykład polecenie Usuń wie, aby nie podążać za dowiązaniami, co spowodowałoby usunięcie obiektu docelowego, ale zamiast tego usunąć łącze. Jednak ponieważ nie wszystkie aplikacje może poprawnie obsługiwać łącza symboliczne, utworzenie łącza symbolicznego wymaga nowego uprawnienia Utwórz łącze symboliczne, które domyślnie mają tylko administratorzy. ”

Jon Coombs
źródło
2

„Łącza symboliczne różnią się od skrótów tym, że oferują przezroczystą * ścieżkę do pożądanego obiektu danych, za pomocą skrótu (.lnk) coś musi odczytać i zinterpretować zawartość pliku skrótu, a następnie otworzyć plik, do którego się odwołuje (tj. jest to proces dwuetapowy). Gdy aplikacja używa dowiązania symbolicznego, uzyskuje natychmiastowy dostęp do obiektu danych, do którego odwołuje się dowiązanie symboliczne (tzn. jest to proces jednoetapowy). ”

Źródło: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html

ariefcfa
źródło
0

Czasami dobrze jest mieć funkcjonalny przykład, więc źle wytłumaczę, jak korzystam z tej funkcji.

Używam dysku Google do tworzenia kopii zapasowych plików, ale czasami chcę wykonać kopię zapasową plików w określonym folderze (nie mogę przenieść ich na dysk ../google). Zwłaszcza w przypadku uniwersalnych aplikacji systemu Windows 10 pliki konfiguracyjne i takie są przechowywane w appdata i przez większość czasu nie mogę zmienić tej lokalizacji.

Korzystam z natywnej aplikacji Windows stikynot i chciałem wykonać kopię zapasową notatek, więc użyłem tutaj dowiązania symbolicznego. Dysk Google rozpoznaje link jako rzeczywisty plik i synchronizuje pliki w porządku, podczas gdy rzeczywisty plik nadal znajduje się w folderze appdata.

Kiedy mam lokalnie pliki takie jak foldery projektów, których nie chcę synchronizować z chmurą, używam skrótów (kopiuj, wklej> wklej).

sommmen
źródło