Ostatnio zostałem o to zapytany podczas rozmowy kwalifikacyjnej. Byłem szczery i powiedziałem, że wiem, jak zachowuje się dowiązanie symboliczne i jak je utworzyć, ale nie rozumiem użycia twardego dna i czym różni się od dowiązania symbolicznego.
768
Odpowiedzi:
Pod systemem plików pliki są reprezentowane przez i-węzły. (A może to wiele i-węzłów? Nie jestem pewien).
Plik w systemie plików jest w zasadzie linkiem do i-węzła.
Twardy link tworzy zatem kolejny plik z łączem do tego samego i-węzła.
Kiedy usuwasz plik, usuwa on jeden link do bazowego i-węzła. I-węzeł jest usuwany (lub usuwalny / nadpisywalny) tylko wtedy, gdy wszystkie łącza do i-węzła zostały usunięte.
Łącze symboliczne to łącze do innej nazwy w systemie plików.
Po utworzeniu twardego łącza link jest do i-węzła. Usunięcie, zmiana nazwy lub przeniesienie oryginalnego pliku nie wpłynie na twardy link, ponieważ łączy się z leżącym pod nim i-węzłem. Wszelkie zmiany danych w i-węzle są odzwierciedlane we wszystkich plikach, które odnoszą się do tego i-węzła.
Uwaga: twarde linki są prawidłowe tylko w tym samym systemie plików. Dowiązania symboliczne mogą obejmować systemy plików, ponieważ są po prostu nazwą innego pliku.
źródło
Przyjemna intuicja, która może pomóc przy użyciu dowolnej konsoli Linux (ISH).
Utwórz dwa pliki:
Wprowadź do nich trochę danych:
(Właściwie mogłem użyć echa, ponieważ tworzy pliki, jeśli nie istnieją ... ale nieważne.)
I zgodnie z oczekiwaniami:
Utwórzmy twarde i miękkie linki:
Zobaczmy, co się właśnie stało:
Zmiana nazwy foo nie ma znaczenia:
foo-hard wskazuje na i-węzeł, zawartość pliku - to się nie zmieniło.
Nie można znaleźć zawartości pliku, ponieważ miękki link wskazuje nazwę, która została zmieniona, a nie zawartość.
Podobnie, jeśli
foo
zostanie usunięty,foo-hard
nadal zawiera zawartość; jeślibar
zostanie usunięty,bar-soft
jest tylko linkiem do nieistniejącego pliku.źródło
touch blah1; touch blah2
można skrócić dotouch blah1 blah2
Jak mówi przysłowie, obraz jest wart tysiąca słów. Oto jak to wizualizuję:
Oto, w jaki sposób przechodzimy do tego zdjęcia:
Utwórz nazwę
myfile.txt
w systemie plików, która wskazuje na nowy i-węzeł (który zawiera metadane pliku i wskazuje bloki danych zawierające jego zawartość, tj. Tekst „Witaj, świecie!”:Utwórz twardy link
my-hard-link
do plikumyfile.txt
, co oznacza „utwórz plik, który powinien wskazywać ten sam i-węzeł, którymyfile.txt
wskazuje”:Utwórz miękki link
my-soft-link
do plikumyfile.txt
, co oznacza „utwórz plik, który powinien wskazywać na plikmyfile.txt
”:Spójrz, co się teraz stanie, jeśli
myfile.txt
zostanie usunięty (lub przeniesiony):my-hard-link
nadal wskazuje na tę samą treść, a zatem pozostaje nienaruszony, amy-soft-link
teraz wskazuje na nic. Inne odpowiedzi omawiają zalety / wady każdego z nich.źródło
myfile.txt
). W przypadku linku miękkiego odniesieniem nie jest i-węzeł (który zawiera dane), ale raczej odniesieniem jest ścieżka systemu plików domyfile.txt
(np./home/Documents/myfile.txt
)Twarde linki są przydatne, gdy oryginalny plik jest przenoszony. Na przykład przenoszenie pliku z / bin do / usr / bin lub do / usr / local / bin. Dowolne dowiązanie symboliczne do pliku w / bin byłoby przez to zepsute, ale nie dało by się tego zrobić hardlink, będący linkiem bezpośrednio do i-węzła pliku.
Dowiązania twarde mogą zajmować mniej miejsca na dysku, ponieważ zajmują tylko pozycję katalogu, podczas gdy dowiązanie symboliczne potrzebuje własnego i-węzła do przechowywania nazwy, na którą wskazuje.
Twarde linki również wymagają mniej czasu na rozwiązanie - dowiązania symboliczne mogą wskazywać na inne dowiązania znajdujące się w katalogach dowiązań symbolicznych. Niektóre z nich mogą znajdować się w systemie plików NFS lub innych systemach plików o dużych opóźnieniach, co może spowodować ruch sieciowy do rozwiązania. Twarde dowiązania, zawsze znajdujące się w tym samym systemie plików, są zawsze rozwiązywane za jednym razem i nigdy nie wiążą się z opóźnieniami sieciowymi (jeśli jest to dowiązanie twarde w systemie plików NFS, serwer NFS wykonałby rozdzielczość i byłoby niewidoczne system klienta). Czasami jest to ważne. Nie dla mnie, ale mogę sobie wyobrazić systemy o wysokiej wydajności, w których może to być ważne.
Myślę też, że rzeczy takie jak mmap (2), a nawet open (2) używają tej samej funkcjonalności co hardlink, aby utrzymać i-węzeł pliku aktywny, więc nawet jeśli plik zostanie odłączony (2) ed, i-węzeł pozostaje, aby umożliwić procesowi ciągły dostęp, i dopiero po zakończeniu procesu plik naprawdę zniknie. Pozwala to na znacznie bezpieczniejsze pliki tymczasowe (jeśli możesz sprawić, że otwieranie i rozłączanie będą się odbywać atomowo, co może być interfejsem API POSIX, którego nie pamiętam, to naprawdę masz bezpieczny plik tymczasowy), w którym możesz czytać / zapisywać twoje dane bez dostępu do nich. Tak było, zanim / proc dał wszystkim możliwość przeglądania deskryptorów plików, ale to już inna historia.
Mówiąc o tym, odzyskiwanie pliku otwartego w procesie A, ale niepowiązanego w systemie plików, obraca się wokół używania twardych łączy do odtworzenia łączy i-węzłów, aby plik nie znikał, gdy proces, który go otworzył, zamyka go lub znika.
źródło
Miękki link :
soft lub symbolical to raczej skrót do oryginalnego pliku .... jeśli usuniesz oryginał, skrót się nie powiedzie i jeśli usuniesz tylko skrót, nic się nie stanie z oryginałem.
Soft link Składnia :
ln -s Pathof_Target_file link
Wynik :
link -> ./Target_file
Dowód:
readlink link
również wls -l link
danych wyjściowych zobaczysz pierwszą literęlrwxrwxrwx
jako l, co oznacza, że plik jest linkiem miękkim.Usuwanie linku:
unlink link
Uwaga: Jeśli chcesz, twój softlink może działać nawet po przeniesieniu go w inne miejsce z bieżącego katalogu. Upewnij się, że podajesz ścieżkę bezwzględną, a nie względną podczas tworzenia miękkiego łącza. tj. (zaczynając od / root / user / Target_file, a nie ./Target_file)
Twardy link:
Twardy link jest bardziej kopią lustrzaną lub wieloma ścieżkami do tego samego pliku. Zrób coś do pliku 1, a pojawi się on w pliku 2. Usunięcie jednego nadal zachowuje drugie.
I-węzeł (lub plik) jest usuwany tylko wtedy, gdy wszystkie (twarde) łącza lub wszystkie ścieżki do (i tego samego pliku) i-węzła zostały usunięte.
Po utworzeniu twardego łącza ma on i-węzeł oryginalnego pliku. Usunięcie zmiany nazwy lub przeniesienie oryginalnego pliku nie wpłynie na twardy link, ponieważ łączy się z leżącym pod nim i-węzłem. Wszelkie zmiany danych w i-węzle są odzwierciedlane we wszystkich plikach, które odnoszą się do tego i-węzła.
Składnia Hard Link :
ln Target_file link
Dane wyjściowe: plik z linkiem do nazwy zostanie utworzony z tym samym numerem i-węzła co plik docelowy.
Dowód:
ls -i link Target_file
(sprawdź ich i-węzły)Usuwanie linku:
rm -f link
(Usuń link tak jak zwykły plik)Uwaga : dowiązania symboliczne mogą obejmować systemy plików, ponieważ są po prostu nazwą innego pliku. Natomiast twarde linki są prawidłowe tylko w tym samym systemie plików.
Łącza symboliczne mają pewne funkcje, których brakuje twardych łączy:
od razu wiesz, gdzie wskazuje dowiązanie symboliczne, gdy masz twarde dowiązania, musisz zbadać cały system plików, aby znaleźć pliki z tym samym i-węzłem.
# find / -inum 517333
twarde linki nie mogą wskazywać na katalogi.
Twarde linki mają dwa ograniczenia:
źródło
Prostym sposobem dostrzeżenia różnicy między łączem twardym a łączem symbolicznym jest prosty przykład. Twardy link do pliku wskaże miejsce, w którym plik jest przechowywany, lub i-węzeł tego pliku. Łącze symboliczne będzie wskazywać na sam plik.
Więc jeśli mamy plik o nazwie „a” i utworzymy dowiązanie twarde „b” i dowiązanie symboliczne „c”, które wszystkie odnoszą się do pliku „a”:
Dane wyjściowe „a”, „b” i „c” będą następujące:
Teraz usuńmy plik „a” i zobaczmy, co stanie się z danymi wyjściowymi „a”, „b” i „c”:
Więc co się stało?
Ponieważ plik „c” wskazuje na sam plik „a”, jeśli plik „a” zostanie usunięty, plik „c” nie będzie miał nic do wskazania, w rzeczywistości zostanie również usunięty.
Plik „b” wskazuje jednak miejsce przechowywania lub i-węzeł pliku „a”. Więc jeśli plik „a” zostanie usunięty, to nie będzie już wskazywał na i-węzeł, ale ponieważ plik „b” robi, i-węzeł będzie nadal przechowywał zawartość należącą do „a”, dopóki nie będą już do niego wskazywać żadne twarde linki.
źródło
Łącza symboliczne prowadzą do nazwy ścieżki. Może to znajdować się w dowolnym miejscu w drzewie plików systemu i nawet nie musi istnieć po utworzeniu łącza. Ścieżka docelowa może być względna lub bezwzględna.
Dowiązania twarde są dodatkowymi wskaźnikami do i-węzła, co oznacza, że mogą istnieć tylko na tym samym wolumenie co cel. Dodatkowe twarde linki do pliku są nie do odróżnienia od „oryginalnej” nazwy użytej w odniesieniu do pliku.
źródło
Chciałbym wskazać Ci Wikipedię:
Kilka punktów:
źródło
Twarde linki są bardzo przydatne podczas tworzenia przyrostowych kopii zapasowych. Zobacz na przykład rsnapshot . Chodzi o to, aby skopiować za pomocą twardych linków:
Nowa kopia zapasowa nie zajmie dodatkowego miejsca poza wprowadzonymi zmianami, ponieważ wszystkie przyrostowe kopie zapasowe będą wskazywać ten sam zestaw i-węzłów dla plików, które nie uległy zmianie.
źródło
Hard link Vs Soft link można łatwo wyjaśnić za pomocą tego obrazu.
źródło
Dodaję pytanie Nicka: kiedy twarde linki są przydatne lub konieczne? Jedyną aplikacją, która przychodzi mi na myśl, w której dowiązania symboliczne nie zadziałają, jest udostępnienie kopii pliku systemowego w środowisku chroot.
źródło
Z MSDN ,
Link symboliczny
Przykład bezwzględnego łącza symbolicznego
Przykład względnych dowiązań symbolicznych
Twardy link
Aby utworzyć twardy link w systemie Windows, przejdź do miejsca, w którym link ma zostać utworzony, i wprowadź następujące polecenie:
Pamiętaj, że możesz usunąć twarde linki w dowolnym porządku, niezależnie od kolejności, w jakiej zostały utworzone. Nie można również tworzyć twardych łączy
Węzeł
NTFS obsługuje inny typ łącza o nazwie junction. MSDN definiuje to w następujący sposób:
Pogrubione części w części z twardym ogniwem i części łączącej pokazują podstawową różnicę między nimi.
Polecenie utworzenia skrzyżowania w systemie Windows, przejdź do miejsca, w którym ma zostać utworzony link, a następnie wprowadź:
źródło
Również:
źródło
Po prostu, Hard link: to po prostu dodać nową nazwę do pliku, to znaczy, plik może mieć wiele nazw w tym samym czasie, wszystkie nazwy są sobie równe, nikt nie preferuje, Hard link nie oznacza kopiowania całej zawartości pliku i stwórz nowy plik, to nie jest to, po prostu stwórz alternatywną nazwę, która będzie znana
Dowiązanie symboliczne (dowiązanie symboliczne): jest wskaźnikiem pliku do innego pliku, jeśli dowiązanie symboliczne wskazuje na istniejący plik, który jest później usuwany, dowiązanie symboliczne nadal wskazuje tę samą nazwę pliku, nawet jeśli nazwa nie nazywa już żadnego pliku.
źródło
To, co myślisz o zwykłym „pliku”, to tak naprawdę dwie osobne rzeczy: dane pliku i pozycja katalogu. Kiedy tworzysz twarde łącze do pliku, faktycznie tworzysz drugą pozycję katalogu, która odnosi się do tych samych danych. Oba wpisy katalogu mają dokładnie taką samą funkcjonalność; każdy z nich może zostać użyty do otwarcia pliku w celu jego odczytania. Więc tak naprawdę nie masz „pliku plus twardego łącza”, masz „dane pliku z dwoma pozycjami katalogu”. To, co uważasz za usunięcie pliku, w rzeczywistości usuwa pozycję katalogu, a kiedy ostatni wpis katalogu dla danych jest usuwany, to same dane również są usuwane. W przypadku zwykłych plików, które mają tylko jedną pozycję katalogu, usunięcie pozycji katalogu spowoduje usunięcie danych jak zawsze. (Podczas otwierania pliku system operacyjny tworzy tymczasowy link do pliku,
Na przykład utwórz plik A.txt, twardy link B.txt i usuń A.txt. Podczas tworzenia A.txt utworzono niektóre dane i pozycję katalogu A.txt. Podczas tworzenia twardego łącza utworzono kolejną pozycję katalogu B.txt, wskazującą dokładnie te same dane. Po usunięciu A.txt nadal masz wszystkie dane i jedną pozycję katalogu B.txt, dokładnie tak, jakbyś utworzył najpierw plik B.txt.
Miękki link jest po prostu (prawie) zwykłym plikiem, z tym wyjątkiem, że nie zawiera danych, ale ścieżkę innego wpisu katalogu. Jeśli usuniesz plik, do którego odwołuje się miękki link, wówczas miękki link będzie zawierał ścieżkę, która nie wskazuje już pozycji katalogu; to jest złamane. Usunięcie miękkiego linku przypomina usunięcie dowolnego innego pliku, plik, na który wskazuje, pozostaje nienaruszony.
źródło
Wpis w katalogu to link a structrue:
ino to liczba i-węzłów, nazwa to nazwa pliku, struktura i-węzłów może jak :
na przykład tworzysz plik / 1, pozycja katalogu może wyglądać tak:
struktura i-węzła może jak:
następnie tworzysz twardy link (może być / 100), wpis katalogu może wyglądać tak:
struktura i-węzła może jak:
następnie tworzysz dowiązanie symboliczne (może być / 200) do pliku 1, pozycja katalogu może wyglądać tak:
struktura i-węzła może jak:
źródło
Dodając do wszystkich powyższych odpowiedzi, różnicę w znalezieniu pliku dowiązania twardego i dowiązania miękkiego można zrozumieć w następujący sposób:
Mam plik
f6
w bieżącym katalogu, a także katalog o nazwiet2
.Plik o nazwie
f1
i./t2/f2
jest dowiązaniem symbolicznymf6
.Plik o nazwie
f7
i./t2/f8
są twardymi linkamif6
.Aby znaleźć zarówno miękki, jak i twardy link, możemy użyć:
Aby znaleźć tylko hardlink, możemy użyć:
Ponieważ dowiązania twarde można tworzyć w tym samym systemie plików, możemy wyszukiwać wszystkie dowiązania twarde bez
-L
opcji użytej (z-xdev
opcją) w tym samym systemie plików / punkcie instalacji. Zapisuje niepotrzebne wyszukiwanie w różnych punktach montażu.Tak więc wyszukiwanie twardego linku jest nieco szybsze niż wyszukiwanie miękkich linków (proszę poprawić, jeśli się mylę lub nie wyczyszczę).
źródło
Łącza symboliczne nadają plikowi inną nazwę, podobnie jak łącza twarde. Ale plik można usunąć, nawet jeśli pozostaną dowiązania symboliczne.
źródło
Moje dwa centy za użytkowanie:
Miękkie linki mogą być używane do skracania długich nazw ścieżek, tj .:
Wprowadzone zmiany
/short/file.txt
zostaną zastosowane w oryginalnym pliku.Twarde linki mogą być używane do przenoszenia dużych plików:
ln /myapp/dev/application.bin /myapp/prd/application.bin
Natychmiastowa kopia do innego folderu, a oryginalny plik (włączony
/myapp/dev
) może zostać przeniesiony lub usunięty bez dotykania pliku/myapp/prd
źródło
Właśnie znalazłem prosty sposób na zrozumienie twardych linków w typowym scenariuszu instalacji oprogramowania.
Pewnego dnia pobrałem oprogramowanie do folderu w
Downloads
celu instalacji. Po tymsudo make install
, niektóre pliki wykonywalne zostałycp
edytowane do lokalnego folderu bin. Tutajcp
tworzy twardy link . Byłem zadowolony z oprogramowania, ale wkrótce zdałem sobie sprawę, żeDownloads
nie jest to dobre miejsce na dłuższą metę. Więcmv
edytowałem folder oprogramowania dosource
katalogu. Cóż, nadal mogę uruchamiać oprogramowanie jak wcześniej, nie martwiąc się o żadne docelowe łącza, np. W systemie Windows. Oznacza to, że twardy link znajduje bezpośrednio i-węzeł i inne pliki w pobliżu.źródło
W tej odpowiedzi, kiedy mówię plik, mam na myśli lokalizację w pamięci
Wszystkie zapisane dane są przechowywane w pamięci za pomocą struktury danych zwanej i-węzłami. Każdy i-węzeł ma numer inod. Numer i-węzła służy do uzyskania dostępu do i-węzła. Wszystkie twarde łącza do pliku mogą mieć różne nazwy, ale mają ten sam numer i-węzła. Ponieważ wszystkie dowiązania twarde mają ten sam numer inod (który powoduje dostęp do tego samego i-węzła), wszystkie wskazują na tę samą pamięć fizyczną.
Link symboliczny jest szczególnym rodzajem pliku, ponieważ jest to również plik, który będzie miał nazwę pliku i numer i-węzła. Jak wspomniano powyżej, numer i-węzła uzyskuje dostęp do i-węzła wskazującego na dane. numery węzłów w symbolicznych linkach uzyskują dostęp do tych i-węzłów, które wskazują na „ścieżkę” do innego pliku, a dokładniej numer i-węzła w dowiązaniu symbolicznym ma dostęp do tych i-węzłów, które wskazują na inne łącze twarde.
kiedy przenosimy, kopiujemy, usuwamy plik w GUI, bawimy się twardymi dowiązaniami pliku, a nie pamięcią fizyczną. kiedy usuwamy plik, usuwamy dowiązanie stałe pliku. nie usuwamy pamięci fizycznej. Jeśli wszystkie twarde linki do pliku zostaną usunięte, dostęp do przechowywanych danych nie będzie możliwy, chociaż nadal może znajdować się w pamięci
źródło