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ą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 errno
do ELOOP
. Tak więc okrągłe odniesienie xyz -> xyz
nie 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 ( 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, plik xyz
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.