Jaka jest różnica między linkiem twardym a linkiem symbolicznym?

450

Jak mówi tytuł, chciałbym poznać różnicę między linkiem twardym a miękkim utworzonym przez polecenie ln . Polecenie man ln dostarcza informacji, ale nie odpowiada w wystarczającym stopniu na moje pytanie.

Ponadto byłoby miło, gdyby ktoś mógł zapewnić ustawienie, w którym preferowane może być dowiązanie twarde w stosunku do dowiązania symbolicznego.

    
zadawane ste_kwr 29.02.2012, 10:03
źródło

10 odpowiedzi

34

W systemie Linux / Unix skróty są znane jako łącza

Link są dwa typy: miękkie linki (dowiązania symboliczne) lub twarde linki.

  1. Miękkie linki (dowiązania symboliczne)

    Można tworzyć łącza do plików i katalogów, a także tworzyć łącza (skróty) na różnych partycjach i z innym numerem i-węzła z oryginału.

    Jeśli prawdziwa kopia zostanie usunięta, link nie zadziała .

  2. Twarde linki

    Twarde linki są tylko dla plików; nie można łączyć z plikiem na innej partycji o innym numerze i-węzła.

    Jeśli prawdziwa kopia zostanie usunięta, link zadziała , ponieważ uzyskuje dostęp do podstawowych danych, do których uzyskiwała realna kopia.

Pytanie: Jak utworzyć miękki link?

Odpowiedź: Miękki link można utworzyć za pomocą ln -s ; Najpierw musisz zdefiniować źródło, a następnie zdefiniować cel. (Pamiętaj, że musisz zdefiniować pełne ścieżki zarówno źródła, jak i miejsca docelowego, w przeciwnym razie nie zadziała.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Jakwidaćmainnyi-węzełimożebyćwykonanynainnejpartycji.

Pytanie:jakutworzyćtwardylink?

Odpowiedź:możnautworzyćtwardylinkzln;Najpierwmusiszzdefiniowaćźródło,anastępniezdefiniowaćcel.(Pamiętaj,żemusiszzdefiniowaćpełnąścieżkęźródłowąidocelową,wprzeciwnymrazieniezadziała.)

Załóżmy,żemamskryptwkatalogu/scriptonazwiefirefox.

ls-i#Showsyoutheinode5898242firefoxln/scripts/firefox/scripts/on-fire(Source)(Destination)

Jak widać, ma on ten sam i-węzeł. Jeśli usuniemy oryginał, link będzie działał i będzie działał jak oryginał.

Powyżej sprawdzam, czy link działa, a następnie skasuję oryginalny skrypt firefox.

Masz pytanie: Byłoby miło, gdyby ktoś mógł zapewnić ustawienie, w którym preferowane może być dowiązanie twarde w stosunku do dowiązania symbolicznego.

Odpowiedz : w zależności od układu partycji dysku Twarde linki mają ograniczenie, że muszą znajdować się na tej samej partycji (-1 punkt) i może tylko linkować do plików (-1 punkt) ), ale +1 punkt jeśli oryginał zostanie usunięty, link będzie działał i zachowuje się jak oryginał.

Z drugiej strony, miękkie łącze może wskazywać na katalogi lub pliki (+1 punkt) i nie ma ograniczeń partycji (+1 punkt), ale (- 1 punkt) jeśli źródło zostaje usunięty, link nie działa.

    
odpowiedział Qasim 09.05.2013, 02:42
źródło
316

Twardy link nie jest wskaźnikiem do pliku, jest to pozycja katalogu (plik) wskazująca na ten sam i-węzeł. Nawet jeśli zmienisz nazwę drugiego pliku, twardy link nadal wskazuje na plik. Jeśli zastąpisz inny plik nową wersją (kopiując go), twardy link nie wskaże nowego pliku. Możesz mieć tylko twarde linki w tym samym systemie plików. Z twardymi linkami nie masz pojęcia oryginalnych plików i linków, wszystkie są równe (pomyśl o tym jako o odwołaniu do obiektu). To koncepcja bardzo niskiego poziomu.

Z drugiej strony dowiązanie symboliczne wskazuje na inną ścieżkę (nazwę pliku); rozwiązuje nazwę pliku za każdym razem, gdy uzyskujesz do niego dostęp za pomocą dowiązania symbolicznego. Jeśli przeniesiesz plik, dowiązanie symboliczne nie zostanie wykonane. Jeśli zastąpisz plik innym, zachowując nazwę, dowiązanie symboliczne wskaże nowy plik. Dowiązania symboliczne mogą obejmować systemy plików. W przypadku dowiązań symbolicznych masz bardzo wyraźne rozróżnienie między rzeczywistym plikiem i dowiązaniem symbolicznym, które nie zapisuje żadnych informacji obok ścieżki o pliku, do którego prowadzi.

    
odpowiedział vartec 18.05.2011, 11:51
źródło
297

"Obraz jest wart tysiąca słów".

I,"Przykład wart jest stu akapitów ..."

Utwórz dwa pliki:

$ touch blah1   
$ touch blah2

Wprowadź do nich kilka danych:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

I zgodnie z oczekiwaniami:

$cat blah1; cat blah2
Cat
Dog

Stwórzmy twarde i miękkie linki:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Zobaczmy, co się stało:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Zmiana nazwy blah1 nie ma znaczenia:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

bla1-hard wskazuje na i-węzeł, zawartość pliku - który nie został zmieniony.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Nie można znaleźć zawartości pliku, ponieważ miękkie łącze wskazuje na nazwę, która została zmieniona, a nie na zawartość.
Podobnie, jeśli bla jest usuwany, blah1-twardy nadal zawiera treść; jeśli blah2 zostanie usunięty, blah2-soft jest po prostu linkiem do nieistniejącego pliku.

Źródło

: rażąco kopiowanie z StackOverflow!

    
odpowiedział ABcDexter 21.07.2016, 09:33
źródło
88

Obie są wskaźnikami do plików; różnicą jest rodzaj wskaźnika. Dowiązanie symboliczne wskazuje na inny plik według nazwy . Ma specjalny bit trybu, który identyfikuje go jako dowiązanie symboliczne, a jego zawartość jest nazwą rzeczywistego pliku. Ponieważ zawiera tylko nazwę, ta nazwa w rzeczywistości nie musi istnieć lub może istnieć w innym systemie plików. Jeśli zastąpisz podany plik (zmienisz jego zawartość bez wpływu na jego nazwę), link nadal będzie zawierał tę samą nazwę, a teraz wskazuje nowy plik. Możesz łatwo zidentyfikować dowiązanie symboliczne i zobaczyć nazwę pliku, do którego on prowadzi.

Twardy link wskazuje na plik po numerze i-węzła. W związku z tym twarde linki nie różnią się od imienia pliku. Nie ma "prawdziwej" nazwy w odróżnieniu od nazwy twardego linku; wszystkie twarde linki są równie poprawnymi nazwami pliku. Z tego powodu plik, do którego prowadzi łącze, musi istnieć i znajdować się w tym samym systemie plików, w którym próbujesz utworzyć łącze. Jeśli usuniesz oryginalną nazwę, to twardy link nadal wskazuje ten sam plik. Ponieważ wszystkie twarde linki są równie poprawnymi nazwami pliku, nie można na nie spojrzeć i zobaczyć inne nazwy pliku; aby to znaleźć, musisz przejrzeć każdy plik i porównać jego numer i-węzła, aby znaleźć inne nazwy, które mają ten sam numer i-węzła.

Możesz określić, ile nazw ma plik z wyjścia ls -l . Pierwsza liczba po trybie pliku to liczba linków. Plik z więcej niż jednym linkiem ma gdzieś inne imię i odwrotnie, plik z linkiem tylko 1 nie ma (innych) twardych linków.

    
odpowiedział psusi 18.05.2011, 17:23
źródło
57

Hardlink może działać tylko na tym samym systemie plików, jest po prostu inną nazwą dla tego samego i-węzła (pliki są wewnętrznie przywoływane przez i-węzły). Plik zostanie usunięty z dysku, gdy ostatni link do jego i-węzła zniknie (Ty rm d lub unlink d ostatni link). Twarde linki zazwyczaj działają tylko dla plików, nie katalogów.

Dowiązanie symboliczne (dowiązanie symboliczne) to specjalny plik zawierający ścieżkę do innego pliku. Ta ścieżka może być absolutna lub względna. dowiązania symboliczne mogą działać w systemach plików, a nawet wskazywać na różne pliki, na przykład, odłączając zewnętrzny dysk twardy i zastępując go innym, który ma inny plik o tej samej ścieżce. Dowiązanie symboliczne może wskazywać na pliki lub katalogi.

    
odpowiedział knittl 29.02.2012, 10:20
źródło
21

Jedna z odpowiedzi z innego wątku (obecnie połączonego z góry postu) wspomina o tej stronie które uważam za dość dobre wytłumaczenie na średnim poziomie. Jeśli gubisz się w sztuce ascii, oto wersja tl; dr:

  • Pliki standardowe to wskaźnik od systemu plików do i-węzła, który z kolei wskazuje dane fizyczne. Składnik pliku przechowuje swoje łącze do systemu plików (zasadniczo jego ścieżka) i łącze do i-węzła.
  • Twarde linki są jak pliki. Są tylko dodatkowym wskaźnikiem bezpośrednio do i-węzła.
  • Dowiązania symboliczne to oddzielne pliki (w tym osobny i-węzeł i dane), które przechowują ścieżkę do systemu plików.

Jądro i systemy plików tłumaczą wszystko przezroczyście.

Na tej podstawie:

  • Twarde linki zezwalają tylko na łączenie w tym samym systemie plików. Dowiązania symboliczne mogą wskazywać dowolną ścieżkę.
  • Twardzi (zasadniczo) wskazują na dane bezwzględne. Dowiązania symboliczne mogą wskazywać na ścieżki względne (np. ../parent.file )
  • Przez rozszerzenie, jeśli przesuniesz wskaźnik celu twardego łącza (który, pamiętaj, że sam jest w zasadzie tylko twardym łączem wskazującym na i-węzeł), twardy link nadal działa. Przeniesienie celu dowiązania symbolicznego zwykle przerwałoby dowiązanie symboliczne.
  • Rozwiązanie twardego linku byłoby szybsze, ale niezmierzone. Ta niewielka część prędkości odbywa się kosztem nieelastycznego systemu plików.

Mogłem trochę się zdezorientować, ale czytając różne rzeczy, staram się znaleźć różnicę między standardowym plikiem a twardym linkiem. Sposób, w jaki ją czytam, to każdy plik składający się z twardego linku (przechowującego nazwę pliku), który łączy się z i-węzłem, który wskazuje dane fizyczne.

Dodanie twardego linku dostarcza i-węzła z dodatkowym wskaźnikiem opartym na systemie plików. Czy to prawda?

    
odpowiedział Oli 18.05.2011, 17:10
źródło
15

Kiedy używać Soft Link:

Łączenie systemów plików: jeśli chcesz łączyć pliki w systemach plików, możesz używać tylko dowiązań symbolicznych / miękkich.

Łącza do katalogu: jeśli chcesz łączyć katalogi, musisz używać łączy miękkich, ponieważ nie możesz utworzyć twardego linku do katalogu.

Kiedy używać Hard Link:

Przestrzeń dyskowa: Łącza twarde zajmują bardzo mało miejsca, ponieważ podczas tworzenia twardych linków nie tworzy się nowych i-węzłów. W miękkich linkach tworzymy plik, który zużywa przestrzeń (zwykle 4KB, w zależności od systemu plików)

Wydajność: wydajność będzie nieco lepsza podczas uzyskiwania dostępu do twardego łącza, ponieważ masz bezpośredni dostęp do wskaźnika dysku zamiast przechodzenia przez inny plik. Przenoszenie lokalizacji pliku: jeśli przeniesiesz plik źródłowy do innej lokalizacji w tym samym systemie plików, twardy link nadal będzie działał, ale miękki link się nie powiedzie.

Redundancja: Jeśli chcesz mieć pewność, że Twoje dane są bezpieczne, powinieneś używać twardego linku, tak jak w przypadku twardego linku, dane są bezpieczne, dopóki wszystkie linki do plików nie zostaną usunięte, zamiast tego w miękkim łączu, utracisz dane, jeśli główna instancja pliku zostanie usunięta.

    
odpowiedział Osama 07.09.2014, 01:48
źródło
7

Zamieszanie pojawia się, gdy próbujesz znaleźć różnicę między "nazwą pliku" a linkiem twardym, ponieważ go nie ma.

Każdy utworzony plik składa się z danych na dysku i twardego linku - który jest nazwą pliku w katalogu i wskaźnikiem do danych na dysku. Koniec opowieści. Po usunięciu ostatniego (lub tylko) twardego łącza system operacyjny wie, że dane nie są już potrzebne.

Z tego widać, że rzeczywiste dane nigdy nie są usuwane, tylko linki są twarde. A gdy zostanie wystarczająco zatłoczone na dysku, dane mogą zostać nadpisane przez dane innego pliku. Do tego czasu dane z usuniętego pliku mogą zostać odzyskane, ale trudno je znaleźć bez twardego linku.

Dowiązania symboliczne, jak wcześniej wyjaśniono, mówią po prostu "istnieje plik o nazwie <targetname> w folderze o nazwie <targetfolder> ". Wskazują na twardy link. Nie wiedzą, gdzie są dane. Trudno o tym wiedzieć.

    
odpowiedział Gonesoft 01.03.2015, 12:28
źródło
3

Za znakomite noob -i ex-Windoze -user- przyjazne objaśnienie, z ładnymi diagramami i FAQ sprawdź tę stronę link . Ograniczenia dotyczące ich praw autorskich uniemożliwiają wypowiadanie ich, więc wystarczy podać link tutaj.

To jest moja druga, a nawet trzecia próba uchwycenia enigmy soft / hard-link, zawsze rzucanie ręcznikiem i odkładanie mojego zrozumienia na jakiś nieokreślony punkt czasu w przyszłości - jak tylko wyjaśnienia i strony podręcznika uzyskać głębokie kernelowanie i techniczną obsługę za pomocą i-węzłów i wszystkich ...

Ciesz się!

    
odpowiedział nutty about natty 10.02.2013, 17:03
źródło
0

To bardzo proste. Pliki (i katalogi!) Są przechowywane pod adresami urządzenia blokowego (HDD lub cokolwiek innego). Zwykle masz przypisaną pojedynczą nazwę do adresu i właśnie tak dostajesz swój plik. twardy link to druga, trzecia itd. Nazwa zamapowana na ten sam adres. Dowiązanie symboliczne odnosi się do symbolu - nazwy - i tak samo jak druga nazwa zamieniona na imię. Jeśli chodzi o jądro, po odczytaniu dowiązania symbolicznego zatrzymuje się i powraca do początku z wartością docelową jako nazwą pliku (mniej więcej), więc względne dowiązania symboliczne są możliwe, ale szalenie niepomocne. Nazwa celu nie jest używana powyżej poziomu systemu plików, chyba że jest wyraźnie zapytana w kodzie obszaru użytkownika.

    
odpowiedział Jim Driscoll 03.07.2016, 17:39
źródło

Przeczytaj inne pytania na temat tagów