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ł?
files
filesystems
symlink
hard-link
Levent Divilioglu
źródło
źródło
Odpowiedzi:
Bardzo krótka odpowiedź to:
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ę:
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.
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.
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.
Tak.
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.
Tak.
Nie. Plik ma i-węzeł, to nie jest i-węzeł.
źródło
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/foo
i idź do pokojubar
”. „Idź do pokojubar
” naprawdę oznacza „otwórz oznaczone drzwibar
i wejdź do pokoju”, ale „idź do pokojubar
” 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.
źródło
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/here
który jest dowiązaniem symbolicznym,/that/other/path
wówczas cała operacja otwierania/that/other/path
jest wykonywana przez system operacyjny. Ponadto, jeśli/that/other/path
zdarza 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ągnieSYMLOOP_MAX
(zobaczsysconf(3)
) wielu wpisów, w którym to przypadku system operacyjny (a dokładniej: odpowiednie wywołanie systemowe) zwraca błąd i ustawiaerrno
doELOOP
. Tak więc okrągłe odniesieniexyz -> xyz
nie zatrzyma procesu. (W przypadku systemów Linuxpath_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 tabelilchown(2)
i- węzłów) i inne (patrzsymlink(7)
cała historia).Teraz, jeśli chodzi o uprawnienia, zauważysz, że dowiązania symboliczne zawsze mają uprawnienia 777 (
rwxrwxrwx
w 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, plikxyz
jest 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
fsck
nie są przygotowane wszystkie zwykłe narzędzia (jak ) i sam system operacyjny.źródło
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.
źródło
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.
źródło
early days
dlaczego teraz jest inaczej? Twoja odpowiedź nie wydaje się odzwierciedlać tego poglądu?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.
źródło
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.
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.
źródło
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.
źródło