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


37

Twrdym jest zdefiniowany jako wskaźnik do węzła. Miękki Link , znany również jako dowiązania symbolicznego , jest zdefiniowany jako niezależny plik skierowaną do innego łącza bez ograniczeń twardych linków.

Jaka jest różnica między plikiem a twardym linkiem? Twardy link wskazuje na i-węzeł, więc co to jest plik? Sama pozycja i-węzła? Lub i-węzeł z twardym łączem?

Załóżmy, że tworzę plik za pomocą dotyku. Następnie tworzony jest wpis i- węzłowy w tabeli i-węzłów . I tworzę twardy link, który ma ten sam numer i-węzła co plik. Czy utworzyłem nowy plik? Czy plik jest po prostu zdefiniowany jako i-węzeł?


To prawie na pewno duplikatem unix.stackexchange.com/questions/9575/...
infixed

7
@infixed Dokładnie nie, pytam o różnicę pliku i twardego linku.
Levent Divilioglu,

Więc cofnąłem moją pierwotną odpowiedź, która, jak sądzę, została również ujęta w odpowiedziach na to powiązane pytanie. Czy to wciąż „dokładnie nie”?
naprawiono

7
Różnica między plikiem a dowiązaniem twardym jest taka sama, jak różnica między tobą a linią z Twoim nazwiskiem w książce telefonicznej.
Jörg W Mittag

Odpowiedzi:


61

Bardzo krótka odpowiedź to:

  • plik jest anonimową kroplą danych
  • hardlink to nazwa pliku
  • dowiązanie symboliczne to specjalny plik, którego treść jest nazwą ścieżki

Pliki i katalogi uniksowe działają dokładnie tak , jak pliki i katalogi w świecie rzeczywistym (a nie jak foldery w świecie rzeczywistym); Uniksowe systemy plików mają (koncepcyjnie) następującą strukturę:

  • plik jest anonimową kroplą danych; nie ma nazwy, tylko numer (i-węzeł)
  • katalog to specjalny rodzaj pliku, który zawiera odwzorowanie nazw na pliki (a dokładniej i-węzły); ponieważ katalog jest po prostu plikiem, katalogi mogą zawierać wpisy do katalogów, tak właśnie realizowana jest rekurencja (zauważ, że kiedy wprowadzono systemy plików Unix, nie było to wcale oczywiste, wiele systemów operacyjnych nie pozwalało katalogom zawierać katalogów z powrotem następnie)
  • te wpisy katalogu nazywane są linkami stałymi
  • dowiązanie symboliczne to kolejny specjalny rodzaj pliku, którego zawartością jest nazwa ścieżki; ta ścieżka jest interpretowana jako nazwa innego pliku
  • inne rodzaje plików specjalnych to: gniazda, fifos, urządzenia blokowe, urządzenia znakowe

Mając na uwadze tę metaforę, a zwłaszcza pamiętając, że katalogi uniksowe działają jak katalogi w świecie rzeczywistym, a nie jak foldery w świecie rzeczywistym, wyjaśnia wiele „osobliwości”, które często napotykają nowi użytkownicy, na przykład: dlaczego mogę usunąć plik, którego nie chcę? masz dostęp do zapisu? Po pierwsze, nie usuwasz pliku, usuwasz jedną z wielu możliwych nazw pliku, a aby to zrobić, potrzebujesz tylko prawa zapisu do katalogu, a nie do pliku. Tak jak w prawdziwym świecie.

Lub dlaczego mogę mieć wiszące dowiązania symboliczne? Cóż, dowiązanie symboliczne po prostu zawiera nazwę ścieżki. Nic nie mówi, że tak naprawdę musi istnieć plik o takiej nazwie.

Moje pytanie brzmi: jaka jest różnica między plikiem a twardym linkiem?

Różnica między plikiem a twardym łączem jest taka sama, jak różnica między tobą a linią z Twoim imieniem i nazwiskiem w książce telefonicznej.

Twardy link wskazuje na i-węzeł, więc co to jest plik? Sam wpis i-węzła? A może i-węzeł z twardym łączem?

Plik to anonimowy kawałek danych. to jest to! Plik nie jest i-węzeł, plik ma i-węzeł, tak samo jak nie jesteś Social Security Number, ty masz SSN.

Twardy link to nazwa pliku. Plik może mieć wiele nazw.

Załóżmy, że tworzę plik za pomocą dotyku, a następnie tworzony jest wpis i- węzła w tabeli i-węzłów .

Tak.

I tworzę twardy link, który ma ten sam numer i-węzła z plikiem.

Nie. Twardy link nie ma numeru i-węzła, ponieważ nie jest to plik. Tylko pliki mają numery i-węzłów.

Hardlink wiąże nazwę z numerem i-węzła.

Czy utworzyłem nowy plik?

Tak.

Czy plik jest po prostu zdefiniowany jako i-węzeł?

Nie. Plik ma i-węzeł, to nie jest i-węzeł.


15
Nigdy tak naprawdę nie zrozumiałem (ani nie pomyślałem o tym), jaka metafora kryje się za słowem „katalog”. Przykład książki telefonicznej jest świetny; być może powinieneś to przedstawić wcześniej (kiedy pierwszy raz wspominasz o prawdziwym świecie). Podobnie, większość ludzi rzadko ma do czynienia z „plikami” poza komputerem, więc być może łatwiej byłoby powiedzieć „tak jak pliki papierowe i katalog jak książka telefoniczna”.
IMSoP

2
@IMSoP To luka pokoleniowa. Przed komputerami książka telefoniczna była jednym z rodzajów książek telefonicznych. Słownik Cambridge mówi: „ katalog: książka, która zawiera listę nazwisk, adresów lub innych faktów [... przykład] Wyszukaj ich numer w
książce

2
@Kubańczyk Rzeczywiście - ludziom, którzy pracowali w biurach pre-cyfrowych, wydaje mi się, że metafory wydają się tak oczywiste, że ich protekcjonalność wydaje się niemal protekcjonalna. Ale dla tych z mojego pokolenia i niższych jest tak niejasne, jak to, dlaczego schowek z tyłu samochodu nazywa się „bagażnikiem” lub „bagażnikiem”, więc musisz to naprawdę przeliterować.
IMSoP

Słowo „mieć” w wyrażeniu „Twardy link nie ma numeru i-węzła” jest prawdopodobnie mylące, ponieważ wtedy mówisz, że „Twarde łącze wiąże nazwę z numerem i-węzła”. Struktura danych pozycji katalogu „hardlink” faktycznie zawiera i-węzeł # - w ten sposób łącze jest „powiązane” z i-węzłem #. Przez „nie ma” myślę, że masz na myśli, że hardlink nie ma i-węzła #, który wskazuje, gdzie łącze jest przechowywane na dysku.
Kelvin

2
Mówienie, że plik ma i-węzeł, jest nieco wstecz. I-węzeł to struktura zawierająca informacje o tym, gdzie znajduje się „obiekt blob danych”. Jeśli nie ma i-węzła, nie ma pliku.
Barmar

18

Twardy link to pozycja w katalogu. Plik może zawierać wiele pozycji katalogu, jeśli występuje pod różnymi nazwami lub w różnych katalogach. Pozycja katalogu nazywa się „twardym łączem”, gdy jest umieszczana w powiązaniu z innymi pozycjami katalogu dla tego samego pliku.

I-węzeł zawiera metadane pliku inne niż jego nazwa i zawartość (lokalizacja zawartości, uprawnienia, znaczniki czasu itp.). Na jeden plik przypada jeden i-węzeł. (Nie wszystkie systemy plików umieszczają metadane w wyraźnie identyfikowalnym miejscu na dysku, które można nazwać „i-węzłem”, ale jest to wspólna architektura.) Pozycja katalogu łączy nazwę z i-węzłem. Możliwe jest, że więcej niż jedna pozycja katalogu łączy się z tym samym i-węzłem, stąd termin „link”. Taki link nazywany jest „twardym linkiem” w przeciwieństwie do „miękkich linków” lub „dowiązań symbolicznych”, które nie mówią „dla tej nazwy, użyj tego i-węzła”, ale „dla tej nazwy, wyszukaj inną nazwę”.

Traktuj pliki jako pokoje i wpisy w katalogu jako drzwi. „Otwórz plik /foo/bar” oznacza „idź do korytarza /fooi idź do pokoju bar”. „Idź do pokoju bar” naprawdę oznacza „otwórz oznaczone drzwi bari wejdź do pokoju”, ale „idź do pokoju bar” jest niczym niezwykłym sposobem na wypowiedzenie tego samego w krótszym sensie. Możliwe jest posiadanie więcej niż jednych drzwi prowadzących do tego samego pokoju.

Kiedy tworzysz twardy link do istniejącego pliku ( ln existing new), tworzysz drugi link do tego samego pliku, tzn. Tworzysz nowy wpis katalogu, który prowadzi do już istniejącego pliku. Po utworzeniu dwa wpisy katalogu mają jednakowy status: nie ma jednego „podstawowego”, a drugiego „wtórnego”, to tylko oba łącza do tego samego pliku.

Możesz także usunąć wszystkie łącza do pliku bez usuwania samego pliku. Dzieje się tak, jeśli usuniesz plik (tzn. Usuniesz wszystkie wpisy katalogu), gdy program nadal ma otwarty plik. Plik pozostaje w systemie plików, jest faktycznie usuwany tylko wtedy, gdy ostatni proces, w którym plik był otwarty, zamyka go. W metaforze pokoju i drzwi pokój, w którym nie ma drzwi, nadal zajmuje miejsce.


kiedy odpowiednio wprowadzono twarde i miękkie linki?
n611x007

2
@ n611x007: Czy możesz otworzyć nowe pytanie, jeśli masz nowe pytanie lub pytanie uzupełniające? Sekcja komentarzy nie jest odpowiednia ani przeznaczona do nowych pytań lub rozszerzonej dyskusji. Dzięki.
David Foerster

1
@ n611x007 Twarde linki są starsze niż Unix, v1 je miał . Dowiązania symboliczne w Uniksie są nieco nowsze; Wikipedia ma pewną historię.
Gilles „SO- przestań być zły”

Pokoje i drzwi to świetna analogia! Dowiązania symboliczne są wtedy jak znaki na drzwiach.
curiousdannii

1
@curiousdannii: Dowiązania symboliczne są bardziej jak pokoje z osobą siedzącą w nich, która mówi: „oi m8 złe biuro idź do # 234 zamiast tego”
Lekkość ściga się z Moniką

8

Oprócz wszystkich innych odpowiedzi chcę wskazać następujące ważne właściwości:

Softlink jest prawdziwym odniesieniem, tzn. Jest małym plikiem zawierającym nazwę ścieżki. Rozwiązanie softlink odbywa się w sposób przezroczysty dla aplikacji: jeśli proces otwiera plik, powiedz, /this/path/herektóry jest dowiązaniem symbolicznym, /that/other/pathwówczas cała operacja otwierania /that/other/pathjest wykonywana przez system operacyjny. Ponadto, jeśli /that/other/pathzdarza się, że jest to dowiązanie symboliczne, jest to również obsługiwane przez system operacyjny. W rzeczywistości system operacyjny podąża za łańcuchem dowiązań symbolicznych, dopóki nie znajdzie czegoś innego (np. Zwykłego pliku) lub dopóki nie osiągnie SYMLOOP_MAX(zobacz sysconf(3)) wielu wpisów, w którym to przypadku system operacyjny (a dokładniej: odpowiednie wywołanie systemowe) zwraca błąd i ustawia errnodo ELOOP. Tak więc okrągłe odniesienie xyz -> xyznie zatrzyma procesu. (W przypadku systemów Linux path_resolution(7)szczegółowe informacje można znaleźć.)

Zauważ, że proces może sprawdzić, czy nazwa ścieżki jest dowiązaniem symbolicznym, czy nie, poprzez użycie lstat(2)i może modyfikować swoje atrybuty pliku (przechowywane w tabeli lchown(2)i- węzłów) i inne (patrz symlink(7)cała historia).

Teraz, jeśli chodzi o uprawnienia, zauważysz, że dowiązania symboliczne zawsze mają uprawnienia 777 ( rwxrwxrwxw notacji symbolicznej). Wynika to z faktu, że wszelkie inne uprawnienia można pominąć, uzyskując dostęp do rzeczywistego pliku. I odwrotnie, 777 dla dowiązania symbolicznego nie czyni pliku dowiązania symbolicznego dostępnym, jeśli w ogóle nie był dostępny. Na przykład dowiązanie symboliczne z uprawnieniami 777 wskazujące na plik z uprawnieniami 640 powoduje, że plik nie jest dostępny dla „innych” (ogółu społeczeństwa). Innymi słowy, plik xyzjest dostępny poprzez dowiązanie symboliczne wtedy i tylko wtedy, gdy jest bezpośrednio dostępny, tj. Bez pośrednictwa. Zatem uprawnienia dowiązania symbolicznego nie mają żadnego efektu bezpieczeństwa.

Jedną z głównych widocznych różnic między dowiązaniami stałymi a dowiązaniami symbolicznymi (zwanymi także dowiązaniami miękkimi) jest to, że dowiązania symboliczne działają w różnych systemach plików, a dowiązania twarde są ograniczone do jednego systemu plików. Oznacza to, że plik na partycji A może być dowiązaniem symbolicznym z partycji B, ale nie może być stamtąd dowiązany na stałe. Wynika to z faktu, że dowiązanie twarde jest w rzeczywistości wpisem w katalogu, który składa się z nazwy pliku i numeru i-węzła oraz że numery i-węzłów są unikalne tylko dla każdego systemu plików.

Termin „hardlink” jest w rzeczywistości nieco mylący. Podczas gdy dla dowiązań symbolicznych źródło i miejsce docelowe są wyraźnie rozróżnialne (dowiązanie symboliczne ma swój własny wpis w tabeli i-węzłów), nie dotyczy to dowiązań twardych. Jeśli utworzysz hardlink dla pliku, oryginalny wpis i hardlink są nierozróżnialne pod względem tego, co było tam pierwsze. (Ponieważ odnoszą się do tego samego i-węzła, współużytkują swoje atrybuty pliku, takie jak właściciel, uprawnienia, znaczniki czasu itp.) To prowadzi do stwierdzenia, że ​​każda pozycja katalogu jest faktycznie dowiązaniem twardym, a dowiązanie pliku oznacza po prostu utworzenie drugiego ( lub trzeci lub czwarty ...) hardlink. W rzeczywistości każdy i-węzeł przechowuje licznik liczby dowiązań twardych do tego i-węzła.

Na koniec zauważ, że zwykli użytkownicy nie mogą twardo linkować katalogów. Wynika to z tego, że należy to zrobić z najwyższą ostrożnością: nieostrożny użytkownik może wprowadzać cykle do ściśle hierarchicznego drzewa plików, z którym fscknie są przygotowane wszystkie zwykłe narzędzia (jak ) i sam system operacyjny.


6

Prosta odpowiedź:

  • Wpis pliku w katalogu jest dowiązaniem twardym do tego pliku.

  • Niektóre pliki mają więcej niż jeden taki twardy link, ponieważ dozwolone jest wiele twardych linków do tego samego pliku.


3

W początkowych czasach Uniksa pliki były wewnętrznie i-węzłami na określonym dysku. Nazwy plików były bardziej przyjaznym sposobem na dostęp do nich.

Twardy link przypisywał więcej niż jedną nazwę pliku do i-węzła. Możesz utworzyć plik, na stałe połączyć z nim drugie imię i usunąć je, a nie da się go odróżnić od samego utworzenia pliku o drugiej nazwie.

Rzeczywiście, wywołanie systemowe, którego program potrzebuje do usunięcia pliku, to „unlink (2)”. Dane nie znikną, dopóki nazwisko nie zostanie odłączone od i-węzła. (a i-węzeł nie jest gdzieś otwierany przez proces)

To właśnie ułatwia Linuksowi aktualizację rzeczy podczas działania programów. Jeśli proces uruchamia plik wykonywalny i nastąpi aktualizacja, nazwa programu zostanie ponownie użyta, ale i-węzeł zawierający starą wersję nadal istnieje, aby można go było kontynuować. A kiedy ostatni proces, w którym uruchomiona jest ta stara wersja, zatrzymuje się, miejsce do przechowywania starej wersji zostaje zwolnione.

Powstały miękkie linki, ponieważ gdy masz jedno drzewo plików, z wieloma punktami montowania, nie można utworzyć twardego łącza z jednego dysku twardego do i-węzła na innym. Tak wymyślono miękkie linki.


Myślę, że to jest duplikatem unix.stackexchange.com/questions/9575/...
infixed

2
early daysdlaczego teraz jest inaczej? Twoja odpowiedź nie wydaje się odzwierciedlać tego poglądu?
n611x007

@ n611x007 Ponieważ „w dzisiejszych czasach” rzeczy takie jak Linux mogą montować systemy plików innych niż unix, które nie pasują do modelu i-węzła. Na przykład pochodne FAT i ISO-9660. To znacznie bardziej zróżnicowana ekologia systemu plików zamiast jednego uniwersalnego
naprawiono

1

Plik to dane zapisane na dysku. Do tych danych odwołuje się jego i-węzeł, który zawiera metadane dotyczące pliku informujące system, jakie bloki na dysku są używane przez ten plik, między innymi. Twardy link wskazuje na numer i-węzła tego pliku.

Więc technicznie tak, tworzysz nowy plik, ale cały ten plik zawiera numer i-węzła dla pliku, do którego się odwołuje, i jego nazwa. Lepiej myśleć o tym jak o tworzeniu wskaźnika do i-węzła lub wskaźnika do pliku.


1

Plik to szeroko stosowana koncepcja dotycząca wpisów w systemie plików.

Zwykle obejmuje katalog , zwykły plik (twardy link) i symboliczny link (miękki link). I może nawet obejmować urządzenie i gniazdo.

Moje pytanie brzmi: jaka jest różnica między plikiem a twardym linkiem? Twardy link wskazuje na i-węzeł, więc co to jest plik? Sam wpis i-węzła? A może i-węzeł z twardym łączem?

Załóżmy, że tworzę plik za pomocą dotyku, a następnie tworzony jest wpis i-węzła w tabeli i-węzłów. I tworzę twardy link, który ma ten sam numer i-węzła z plikiem. Czy utworzyłem nowy plik? Czy plik jest po prostu zdefiniowany jako i-węzeł?

Ponieważ nawet łącze symboliczne jest zwykle liczone jako plik, samo łącze twarde może być również liczone jako plik. Możesz powiedzieć, że jest to plik niezależnie od tego, czy jest to twardy czy miękki link.

Ta koncepcja jest nieco niejednoznaczna, więc można również powiedzieć, że wpis i-węzła jest plikiem, chociaż możesz chcieć odwoływać się do danych.

Jeśli jesteś programistą C ++ lub Java, możesz przeczytać o std :: fileystem :: typ_pliku , java.io.File i java.nio.file.Files .

Szczegółowe informacje na temat różnic między twardym a miękkim linkiem można znaleźć w linku w komentarzu infixed.


1

Różnica między „plikiem” o podanej nazwie a „twardym linkiem” to historia. Plik (zwykły) o podanej nazwie jest tworzony za pomocą wywołania systemowego creat, a twardy link jest tworzony za pomocą wywołania systemowego link.

Jednakże, podczas gdy ludzie mówią i zapamiętują historię wpisów w katalogu i nazywają je odpowiednio plikami i dowiązaniami twardymi, system plików nie. Wpisy w katalogu „oryginalnego pliku” i „twardego łącza” są całkowicie nie do odróżnienia pod względem jakości: oba ustanawiają odwołanie między nazwą pliku i i-węzłem pliku, a gdy już minie ostatnie takie odniesienie (odniesienia to nie tylko nazwy plików plik, ale także deskryptory plików, za pomocą których można uzyskać dostęp do otwartego pliku), plik dla niepowiązanego i-węzła jest uważany za usunięty, a i-węzeł i powiązana przestrzeń plików są odzyskiwane.

Kiedy więc ludzie kontrastują „pliki” i „twarde linki”, pierwsze powstało z „liczbą linków równą 1”, a wszystkie pozostałe z większą liczbą linków. Różnica jest naukowa, a zmiana nazwy pliku w jednym momencie polegała na utworzeniu twardego łącza dla nazwy docelowej, a następnie usunięciu łącza dla nazwy źródła. Obecnie zwykle używane jest pojedyncze wywołanie systemowe, które wykonuje to atomowo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.