Czy twarde linki są równoważne skrótom Windows?

52

Wikipedia definiuje stały link jako:

pozycja katalogu, która wiąże nazwę z plikiem w systemie plików. (Sam katalog jest specjalnym rodzajem pliku, który zawiera listę takich pozycji.) Termin ten jest używany w systemach plików, które umożliwiają utworzenie wielu dowiązań twardych dla tego samego pliku.

Zastanawiam się, czy pojęcie twardego łącza jest równoważne z pojęciem skrótu w systemie Windows .

Jeśli twarde linki nie są równoważne skrótom, to jaka jest najbliższa funkcja systemu Windows do twardych linków?

Computernerd
źródło
1
Istnieją naprawdę świetne referencje z tej strony wiki, którą udostępniłeś.
ekscentryczny
8
Microsoft NTFS obsługuje hardlink i są one bardzo podobne do hardlink unix. Myślę, że skróty są specjalnym obiektem w środowisku Windows, ale nie są powiązane z organizacją systemu plików w przeciwieństwie do prawdziwych
linków
Poniższy link zawiera dobre wyjaśnienia: comptb.cects.com/…
3
Myślę, że paralela jest myląca. Skróty to „interfejs” łączy tylko pliki z informacjami tekstowymi o celu, które są interpretowane przez interfejs, a nie przez system plików. Z wiersza poleceń tak naprawdę nie wskazują na coś w sensie systemu plików. Windows (lub lepiej NTFS) ma odpowiednie dowiązania symboliczne en.wikipedia.org/wiki/NTFS_symbolic_link , które nie są skrótami ani dowiązaniami stałymi. Używam ich w systemie Windows, aby mieć foldery Dropbox w dowolnym miejscu, nie można tego zrobić za pomocą skrótów.
alfC
5
Pliki skrótów systemu Windows są bardzo podobne do plików .desktop systemu Linux. Linuksowe dowiązania symboliczne i dowiązania twarde to zupełnie inna rzecz, która czasem służy temu samemu celowi.
mikebabcock

Odpowiedzi:

113

Nie, twardy link jest zupełnie inny. Miękki link jest bliższy skrótowi Windows (chociaż istnieją istotne różnice, dowiązania symboliczne są bardziej podobne do skrótów Windows niż twarde). Twardy link to inna rzecz, której prawie nigdy nie będziesz potrzebować.

W skrócie, za pomocą tego polecenia tworzony jest miękki link:

ln -s foo bar

Jeśli następnie uruchomisz ls -l, zobaczysz:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Te ->środki, które barznajduje się link do foo. Tak więc otwarcie bar, na przykład za pomocą edytora tekstu, faktycznie otworzy osobny plik foo. Jednak usunięcie barspowoduje jedynie usunięcie skrótu, nie wpłynie na plik foo.

Natomiast twarde linki są tworzone za pomocą tego polecenia:

ln foo bar

Jeśli teraz uruchomisz ls -l, nic nie wskazuje na związek między plikami:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Ale - i to jest bardzo ważne - to w rzeczywistości ten sam plik . Pliki w systemach plików Unix są przechowywane przy użyciu i- węzłów ; i-węzeł to po prostu sposób, w jaki system plików odwzorowuje nazwę pliku na określoną lokalizację na fizycznym dysku twardym. Tak więc twarde linki to pliki, które wskazują ten sam i-węzeł, co ich cel. Innym sposobem na umieszczenie tego jest to, że wszystkie pliki są w rzeczywistości twardymi linkami wskazującymi na ich i-węzły. Utworzenie twardego łącza do pliku powoduje utworzenie nowego wskaźnika (pliku) w systemie plików, który wskazuje ten sam i-węzeł. Każdy i-węzeł może mieć wiele plików wskazujących go lub jeden lub żaden.

Aby to lepiej zrozumieć, użyj, ls -iktóra pokazuje i-węzeł powiązany z plikiem. Utwórzmy miękki link i twardy link i zobaczmy, co się stanie:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Teraz sprawdź ich i-węzły:

wprowadź opis zdjęcia tutaj

Jak widać powyżej, oba mają fooi HardLinkToFooten sam i-węzeł (16648029), podczas gdy SoftLinkToFoo ma inny (16648036).

Co się stanie, jeśli zmiana nazwy fooz mv foo bar?

wprowadź opis zdjęcia tutaj

Kolor czerwony oznacza zerwane miękkie łącze, którego nie można już znaleźć celu. Wynika to z faktu, że miękkie linki wskazują nazwę pliku, a nie jego i-węzeł. Zauważ, że pomimo zmiany nazwy, i-węzeł pozostaje taki sam, więc hardlink jest w porządku, nadal działa.

Podsumowując, twarde linki są w rzeczywistości dwoma przejawami tego samego pliku; są wskaźnikami do tej samej sekcji dysku. Miękkie linki to tylko skróty. Aby przyjąć analogię ze świata rzeczywistego, twarde linki są jak dwa różne numery telefonów dla tej samej linii telefonicznej, a miękkie linki są jak dwie różne linie telefoniczne w tym samym domu.

terdon
źródło
6
@Kiwy Odwrotnie: absolutne dowiązania symboliczne zawodzą na wiele różnych sposobów (gdy tylko przeniesiesz dane, zamontujesz je w innym miejscu, utworzysz kopię zapasową ...) i najlepiej ich unikać.
Gilles 'SO - przestań być zły'
3
Warto również zauważyć, że usunięcie (za pomocą rmlub unlink()) twardego łącza zmniejsza tylko liczbę linków, dopóki liczba linków nie osiągnie zera, gdy zwolnione zostaną bloki zajmowane przez zawartość pliku. Nie jestem pewien, czy powiedzenie „twarde linki są w rzeczywistości dwoma instancjami tego samego pliku” jest ściśle poprawne, ponieważ te dwie nazwy wskazują na ten sam i-węzeł, a tym samym tę samą treść, zamiast dwóch instancji samego pliku w jakiś sens.
Emmet
7
Zauważ, że skrót Windows jest plikiem używanym przez powłokę i dlatego może robić rzeczy, o których powłoka wie, ale nie system plików. Na przykład możesz tworzyć skróty do przestrzeni nazw powłoki (np. Panel sterowania, Komputer itp.) Lub możesz tworzyć skróty do aplikacji, które mają zostać zainstalowane (które zostaną zainstalowane przy pierwszym użyciu). Te rzeczy nie mają bezpośredniego odpowiednika w świecie systemów plików.
Joey,
2
Uwielbiam tę odpowiedź, ale w rzeczywistości dość słabo rozumie, czym jest skrót do systemu Windows. @Shaakunthala poniżej ma lepszą odpowiedź, ponieważ skrót Windows jest bardziej jak plik .desktop systemu Linux niż dowiązanie symboliczne.
mikebabcock
18

Istnieje dobre wyjaśnienie, czym są miękkie i twarde linki, ale jedno musi zostać wyjaśnione.

Okna skróty są równoważne lub podobne do ani miękkimi linkami , ani twardych linków . Na poziomie systemu plików są to tylko pliki. To powłoka, która rozumie ich strukturę i interpretuje je jako linki. Skróty systemu Windows mogą również wskazywać na obiekty w przestrzeni nazw powłoki, które nie są powiązane z systemem plików (drukarki, elementy panelu sterowania, foldery wirtualne).

Skróty systemu Windows oprócz nazwy obiektu systemu plików zawierają następujące informacje: PIDL (nieprzezroczysta binarna „ścieżka” w przestrzeni nazw powłoki), opis, skrót klawiszowy, ikona, katalog roboczy. System Windows dodaje także identyfikatory obiektów NTFS, jeśli używany jest system plików NTFS, aby naprawić zepsute skróty.

Z grubsza odpowiednikiem skrótu Windows jest plik .desktop . Zobacz to pytanie na SuperUser: Czy w Linuksie istnieje odpowiednik .lnk?

Athari
źródło
6

Nie. W systemie Linux rzeczy działają inaczej.

Każdy plik jest reprezentowany przez obiekt o nazwie „i-węzeł”. Z każdym i-węzłem jest powiązany numer (ID).

Jak wiemy, ludzie nie są dobrzy w zapamiętywaniu liczb, ale imion. (Tak ewoluowały książki telefoniczne)

Dlatego nazwa pliku pojawiła się na zdjęciu, aby nadać każdemu i-węzłowi czytelną dla człowieka nazwę. Zasadniczo hardlink wiąże nazwę pliku z i-węzłem. I-węzeł może mieć wiele dowiązań twardych. Jeśli dla danego i-węzła nie ma żadnych dowiązań twardych, miejsce na dysku używane przez i-węzeł może zostać ponownie przydzielone na nowe pliki. Co oznacza, że ​​dla każdego pliku musi znajdować się co najmniej jedno dowiązanie twarde. Nazwa pliku (zwizualizowana jako nazwa pliku / ikona widoczna w przeglądarce plików) jest dowiązaniem twardym.

W systemie Windows skrót jest osobnym plikiem (plik * .lnk). Zawiera informacje o oryginalnym pliku (oczywiście ścieżka pliku). W postrzeganiu Linuksa skrót Windows byłby kolejnym i-węzłem połączonym na stałe z nazwą pliku kończącą się na „.lnk”.

Shaakunthala
źródło
3
NTFS faktycznie działa bardzo podobnie. Plik jest wpisem w MFT, a wpisy katalogu po prostu mapują nazwy plików na identyfikatory plików. Obsługuje twarde linki, a od 2008/7 / Vista (?), Nawet dowiązania symboliczne. W tym momencie największą różnicą jest kultura.
cHao
2

W systemie Windows możesz również tworzyć twarde linki, jeśli masz system plików NTFS.

fsutil hardlink create target_file source_file

Pliki muszą znajdować się na tym samym dysku logicznym.

Zjawa
źródło
Zgadza się - NTFS obsługuje również dowiązania twarde. Często narzędzia wymagają uprawnień administratora, aby je utworzyć. O „tym samym dysku logicznym” - bardziej precyzyjnie byłoby powiedzieć, że muszą znajdować się w tym samym systemie plików. Dysk logiczny może być wszystko, łącznie z literą dysku utworzonego przez substkomendy. Narzędzie może tego nie wiedzieć / nie dbać o to, a tym samym odmówić utworzenia twardego łącza. Bardzo przydatną rzeczą jest rozszerzenie powłoki powłoki, które umożliwia eksploratorowi ich utworzenie.
Tobias
1

Duża różnica: nie można utworzyć twardego łącza dla folderów, ale dla plików.

Skróty można utworzyć dla folderów, więc nie można powiedzieć, że są one równoważne.

Twoje pytanie powinno być różnicą między dowiązaniem symbolicznym lub dowiązaniem miękkim a skrótem .

zgodnie z tym:

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.

„Skrót” to zwykły plik, który ma odniesienie do docelowego pliku lub katalogu.

Więc po kliknięciu skrótu zmienisz katalog na rzeczywisty plik, podczas gdy soft-link będzie odnosił się do jego lokalizacji tak, jakby to był rzeczywisty plik, do tego w Linuksie możesz użyć terminala i cd do dowiązań symbolicznych, podczas gdy nie możesz cd do skrótów .

Skrót systemu Windows i program uruchamiający Linux (wskazujący na jakąś lokalizację) byłyby identyczne.

nux
źródło
2
Co? Miękkie linki to tylko pliki, choć dziwne, zajmują również na przykład i-węzły. NIE są one traktowane jako oryginalne (to są linki dowiązania). Chociaż prawdą jest, że twarde linki nie są dozwolone dla katalogów w większości systemów operacyjnych, jest to tylko funkcja bezpieczeństwa i istnieją wyjątki od tego (na przykład wehikuł czasu OSX). I oczywiście możesz cd na skróty (zakładam, że masz na myśli skróty Windows, ponieważ, jak mówisz, możesz cd na skróty).
terdon
1
czy jesteś pewien, że możesz użyć cmd, aby cd do skrótu.
nux
1
Właśnie uruchomiłem maszynę wirtualną z systemem Windows i utworzyłem skrót do folderu na pulpicie, skróty systemu Windows są bardzo podobne (jeśli nie identyczne) do dowiązań symbolicznych. Chociaż z jakiegoś powodu nie można do nich wykonać cd za pomocą cmd.exe, możesz utworzyć plik .lnk w katalogu i używać go za pomocą Eksploratora.
terdon
1
w dół wyborcy powinni dać powód do downvoting
Nux
5
Przepraszamy, wciąż niepoprawne. Dowiązania symboliczne to pliki zawierające ich cel jako zwykły tekst (patrz tutaj ), dowiązania symboliczne nie są traktowane jako oryginalne, to cała różnica między dowiązaniami symbolicznymi a dowiązaniami stałymi. Wyrzutnie systemu Linux (zakładam, że masz na myśli pliki .desktop) nie mają z tym nic wspólnego, są zupełnie inne. Jak sam twierdzisz, skróty systemu Windows mogą wskazywać na pliki (w tym programy) i foldery (Mac i Windows mają foldery, Linux ma katalogi). Pliki pulpitu pozwalają tylko uruchomić program. Nigdzie nie łączą się.
terdon