Jaka jest różnica między dowiązaniem symbolicznym a dowiązaniem twardym?

Ostatnio zapytano mnie o to podczas rozmowy kwalifikacyjnej. Byłem szczery i powiedziałem, że wiem, jak zachowuje się link symboliczny i jak go utworzyć, ale nie rozumiem użycia twardego łącza i czym różni się od symbolicznego.

Author: Tanktalus, 2008-10-09

22 answers

Pod plikami systemu plików są reprezentowane przez i-węzły (lub jest to wiele i-węzłów nie jest pewne)

Plik w systemie plików jest w zasadzie łączem do i-węzła.
Twarde łącze tworzy kolejny plik z łączem do tego samego i-węzła.

Gdy usuniesz plik, usunie on jedno łącze do i-węzła. I-węzeł jest usuwany (lub usuwalny/nadpisywalny) tylko wtedy, gdy wszystkie linki do i-węzła zostały usunięte.

Dowiązanie symboliczne jest dowiązaniem do innego nazwa w systemie plików.

Po utworzeniu twardego linku link jest do i-węzła. usunięcie zmiany nazwy lub przeniesienie oryginalnego pliku nie będzie miało wpływu na łącze twarde, ponieważ łączy się Ono z bazowym i-węzłem. Wszelkie zmiany w danych i-węzła są odzwierciedlane we wszystkich plikach, które odnoszą się do tego i-węzła.

Uwaga: łącza twarde są ważne tylko w tym samym systemie plików. Dowiązania symboliczne mogą obejmować systemy plików, ponieważ są one po prostu nazwą innego pliku.

 673
Author: Martin York,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-25 20:04:28

Jakaś miła intuicja, która może pomóc, używając dowolnej konsoli Linuksa (ish).

Utwórz dwa pliki:

$ touch blah1; touch blah2

Wprowadź do nich DANE:

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

(właściwie, mogłem użyć echo w pierwszej kolejności, ponieważ tworzy pliki, jeśli nie istnieją... ale nieważne.)

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ę właśnie stało:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Zmiana nazwy blah1 nie Materia:

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

Blah1-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

Zawartość pliku nie może zostać znaleziona, ponieważ łącze miękkie wskazuje na nazwę, która została zmieniona, a nie na zawartość. Podobnie, jeśli blah1 zostanie usunięty, blah1-hard nadal przechowuje zawartość; jeśli blah2 zostanie usunięty, blah2-soft jest tylko linkiem do nieistniejącego pliku.

 382
Author: Adam Matan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 21:32:03

Jak mówi powiedzenie, obraz jest wart tysiąca słów. Oto jak to wizualizuję:

Tutaj wpisz opis obrazka

Oto jak dojdziemy do tego zdjęcia:

  1. Utwórz nazwę myfile.txt w systemie plików, która wskazuje na nowy i-węzeł (który zawiera metadane dla pliku i wskazuje na bloki danych, które zawierają jego zawartość, tj. tekst " Hello, World!":

    $ echo 'Hello, World!' > myfile.txt
    
  2. Utwórz twarde łącze my-hard-link do pliku myfile.txt, co oznacza " Utwórz plik, który powinno wskazywać na ten sam ikod, który myfile.txt wskazuje na":

    $ ln myfile.txt my-hard-link
    
  3. Utwórz miękkie łącze my-soft-link do pliku myfile.txt, co oznacza " Utwórz plik, który powinien wskazywać na plik myfile.txt":

    $ ln -s myfile.txt my-soft-link
    

Zobacz, co się teraz stanie, jeśli myfile.txt zostanie usunięte (lub przeniesione): my-hard-link nadal wskazuje na tę samą zawartość, a zatem nie ma to wpływu, podczas gdy my-soft-link teraz wskazuje na nic. Inne odpowiedzi omawiają zalety / wady każdego z nich.

 341
Author: akivajgordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 01:45:24

Twarde linki są przydatne, gdy oryginalny plik jest przenoszony. Na przykład przeniesienie pliku z /bin do / usr / bin lub do/usr / local / bin. Każde dowiązanie symboliczne do pliku w /bin zostałoby przez to złamane, ale dowiązanie twarde, będące dowiązaniem bezpośrednio do i-węzła pliku, nie miałoby to znaczenia.

Twarde linki mogą zajmować mniej miejsca na dysku, ponieważ zajmują tylko wpis katalogu, podczas gdy dowiązanie symboliczne potrzebuje własnego i-węzła do przechowywania nazwy, na którą wskazuje.

Twarde linki również zajmują mniej czasu, aby rozwiązać - dowiązania symboliczne mogą wskazywać na inne dowiązania symboliczne znajdujące się w katalogach dowiązań symbolicznych. Niektóre z nich mogą działać na systemach plików NFS lub innych systemach plików o dużym opóźnieniu, co może spowodować usunięcie ruchu sieciowego. Dowiązania twarde, będące zawsze w tym samym systemie plików, są zawsze rozwiązywane w jednym wyszukiwaniu i nigdy nie wiążą się z opóźnieniami sieci (jeśli jest to dowiązanie twarde w systemie plików NFS, serwer NFS zrobiłby rozdzielczość i byłby niewidoczny dla systemu klienta). Czasami jest to ważne. Nie dla mnie, ale Mogę sobie wyobrazić wysokowydajne systemy, w których może to być ważne.

Myślę również, że takie rzeczy jak mmap (2), a nawet open(2) używają tej samej funkcjonalności co hardlinki, aby utrzymać i-węzeł pliku aktywny, tak że nawet jeśli plik zostanie odłączony(2)ed, i-węzeł pozostaje, aby umożliwić procesowi ciągły dostęp i tylko po zamknięciu procesu plik naprawdę zniknie. Pozwala to na znacznie bezpieczniejsze pliki tymczasowe (jeśli można uzyskać otwarcie i odłączenie, aby stało się atomicznie, co może być POSIX API do tego nie pamiętam, wtedy naprawdę masz bezpieczny plik tymczasowy), w którym możesz odczytywać / zapisywać swoje dane bez dostępu do nich. Cóż, to była prawda, zanim /proc dał wszystkim możliwość spojrzenia na deskryptory plików, ale to już inna historia.

Mówiąc o tym, odzyskiwanie pliku otwartego w procesie A, ale niezwiązanego z systemem plików, polega na użyciu dowiązań twardych do odtworzenia łączy i-węzłów, aby plik nie znikał, gdy proces, który go posiada otwórz zamyka go lub odchodzi.

 63
Author: Tanktalus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 05:22:59

W prosty sposób można zobaczyć różnicę między dowiązaniem twardym a dowiązaniem symbolicznym za pomocą prostego przykładu. Twarde łącze do pliku wskaże miejsce, w którym plik jest przechowywany, lub i-węzeł tego pliku. Dowiązanie symboliczne będzie wskazywało na sam plik.

Więc jeśli mamy plik o nazwie " a "i tworzymy dowiązanie twarde" b "i dowiązanie symboliczne "c", które wszystkie odnoszą się do pliku" a":

echo "111" > a
ln a b
ln -s a c

Wyjście "a", " b " i " c " będzie następujące:

cat a --> 111
cat b --> 111
cat c --> 111

Teraz usuńmy plik " a " i zobacz, co dzieje się z wyjściem "A", " b "i"c":

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory
Co się stało?

Ponieważ plik " c "wskazuje na plik "a", jeśli plik" a "zostanie usunięty, to plik" c " nie będzie miał nic do wskazywania, w rzeczywistości jest również usuwany.

Jednak plik " b "wskazuje na miejsce przechowywania lub i-węzeł pliku"a". Tak więc jeśli plik "a" zostanie usunięty, nie będzie już wskazywał na i-węzeł, ale ponieważ plik "b" tak, i-węzeł będzie nadal przechowywać zawartość należącą do "a", dopóki nie ma już twardych linków do niego.

 32
Author: Bolboa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 00:05:42

Soft Link:

Soft lub symbolic jest bardziej skrótem do oryginalnego pliku....jeśli usuniesz oryginalny Skrót nie powiedzie się, a jeśli usuniesz tylko skrót, nic nie stanie się oryginałowi.

Składnia linków miękkich: ln -s Pathof_Target_file link

Wyjście : link -> ./Target_file

Dowód: readlink link Również w ls -l link output zobaczysz pierwszą literę w lrwxrwxrwx jako l , co oznacza, że plik jest miękki link.

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. Podczas tworzenia łącza miękkiego upewnij się, że podano ścieżkę bezwzględną, a nie względną. tzn. (zaczynając od / root/user / Target_file i nie ./ Target_file)

Hard Link:

Dowiązanie twarde to raczej Kopia lustrzana lub wiele ścieżek do tego samego pliku. Zrób coś z file1 i pojawi się w plik 2. Usunięcie jednego nadal utrzymuje drugi ok.

I-węzeł (lub plik) jest usuwany tylko wtedy, gdy wszystkie (twarde)linki lub wszystkie ścieżki do i-węzła (tego samego pliku)zostały usunięte.

Po utworzeniu twardego dowiązania link ma i-węzeł oryginalnego pliku. Usunięcie zmiany nazwy lub przeniesienie oryginalnego pliku nie będzie miało wpływu na łącze twarde, ponieważ łączy się Ono z bazowym i-węzłem. Wszelkie zmiany w danych i-węzła są odzwierciedlane we wszystkich plikach, które odnoszą się do tego i-węzła.

Hard Link składnia: ln Target_file link

Output: Plik z nazwą łącza zostanie utworzony z tym samym numerem i-węzła co Targetfile.

Dowód: ls -i link Target_file (sprawdź ich i-kody)

Usuwanie linku: rm -f link (Usuń link tak jak zwykły plik)

Uwaga: dowiązania symboliczne mogą obejmować systemy plików, ponieważ są one po prostu nazwą innego pliku. Natomiast twarde linki są ważne tylko w tym samym systemie plików.

Dowiązania symboliczne mają niektóre funkcje twarde linki brakuje:

  • twarde łącze wskazuje na zawartość pliku. podczas gdy miękki link wskazuje na nazwa pliku.
  • podczas gdy rozmiar twardego linku jest wielkością treści, podczas gdy miękki link jest o rozmiarze nazwy pliku.
  • twarde łącza mają ten sam i-węzeł. Miękkie linki nie.
  • twarde łącza nie mogą krzyżować się z systemami plików. Miękkie linki tak.
  • od razu wiesz, gdzie dowiązanie symboliczne wskazuje na while with hard linki, trzeba zgłębić całą system plików do wyszukiwania plików dzielenie tego samego i-węzła.
  • twarde linki nie mogą wskazywać na katalogi.

Powód, dla którego twarde łącza nie mogą krzyżować się z systemami plików lub partycjami:

Na dysku twardym jest wiele sektorów.

Powiedzmy, że plik zaczyna się od i-węzła (Sektor) 4001 i kończy się na 5000. Plik to " / export/home/john / mail.doc "

Then: 1. Twardy link do " mail.doc "o nazwie" hardLinkToMail "zawiera wartość: "4001". 2. Miękki link do " mail.doc" który jest nazwany "softLinkToMail" zawiera wartość: "/ export/home/john / mail.doc".

W 1) twarde łącze może wskazywać tylko na ten sam dysk. Nie może wskazać innego napędu. Wszystkie dyski mają i-węzeł o wartości "4001", w jaki sposób łącze twarde może odróżnić wszystkie dyski? Który dysk to "4001"?

W 2) miękki link zawiera ciąg znaków. Łańcuch może wskazywać na inny system plików na innym dysku, ponieważ podana jest pełna ścieżka.

 29
Author: Prabhat Kumar Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 10:19:59

Dowiązania symboliczne dowiązują do nazwy ścieżki. Może to być gdziekolwiek w drzewie plików systemu i nawet nie musi istnieć, gdy łącze jest tworzone. Ścieżka docelowa może być względna lub absolutna.

Dowiązania twarde są dodatkowymi wskaźnikami do i-węzła, co oznacza, że mogą istnieć tylko na tym samym woluminie co cel. Dodatkowe twarde łącza do pliku są nieodróżnialne od "oryginalnej" nazwy używanej do odwoływania się do pliku.

 27
Author: Andrew Medico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-07 03:25:52

Wskażę ci Wikipedię:

Kilka punktów:

  • dowiązania symboliczne, w przeciwieństwie do dowiązań twardych, mogą przecinać systemy plików (przez większość czasu).
  • dowiązania symboliczne mogą wskazywać na katalogi.
  • twarde łącza prowadzą do pliku i umożliwiają odwoływanie się do tego samego pliku o więcej niż jednej nazwie.
  • dopóki istnieje co najmniej jeden link, dane są nadal dostępne.
 18
Author: Jauder Ho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-21 21:39:27

Twarde linki są bardzo przydatne podczas wykonywania przyrostowych kopii zapasowych. Zobacz na przykład rsnapshot . Pomysł polega na kopiowaniu za pomocą twardych linków:

  • skopiuj zapasowy numer n do n + 1
  • kopia zapasowa N-1 do n
  • ...
  • kopia zapasowa 0 do kopii zapasowej 1
  • zaktualizuj kopię zapasową 0 z dowolnymi zmienionymi plikami.

Nowa kopia zapasowa nie zajmie dodatkowego miejsca poza wprowadzonymi zmianami, ponieważ wszystkie kopie przyrostowe będą wskazywać na ten sam zestaw i-węzłów dla plików, które się nie zmieniły.

 8
Author: JesperE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 06:54:24

Twarde linki mogą być przydatne, ponieważ umożliwia dostęp do pliku z wielu różnych lokalizacji . ma bezpośredni dostęp do i-węzła. Niektóre ograniczenia to:

  1. twarde łącza muszą istnieć na tym samym urządzeniu.
  2. nie możemy stworzyć twarde linki do katalogów.
  3. liczba aliasów oryginalnego pliku ma. Gdy nazwisko zostanie usunięte, zawartość również zostanie usunięta.

Fajną rzeczą w twardych linkach jest to, że nie ma różnicy między pierwszą twardą link i drugi twardy link. Oba są po prostu twardymi linkami, a jeśli pierwszy twardy link że kiedykolwiek istniał dla pliku jest usuwany, że nie ma wpływu na inne twarde linki, które nadal istnieją. SYSTEM OPERACYJNY Linux wykorzystuje łącza w wielu miejscach, aby uczynić pliki bardziej dostępnymi.

Gdzie jako dowiązanie symboliczne (zwane również dowiązaniem miękkim) nie łączy się bezpośrednio z i-węzłem, ale z nazwą pliku.Główną wadą jest to, że kiedy oryginalny plik jest usuwany, dowiązanie symboliczne staje się nieważne i nie działa już.

kilka informacji na temat Iode:

Linux przechowuje dane administracyjne o plikach w i-węzłach. Każdy plik na Linuksie ma i-węzeł, a w I-węźle przechowywane są ważne informacje o pliku:

  1. blok danych, w którym przechowywana jest zawartość pliku
  2. Data utworzenia, dostępu i modyfikacji
  3. uprawnienia
  4. Plik właściciele

Tylko jedna ważna informacja nie jest przechowywana w I-węźle: nazwa. Nazwy są przechowywane w katalogu, a każda nazwa pliku wie, do którego i-węzła ma adres uzyskaj dostęp do dalszych informacji o plikach. Warto wiedzieć, że i-Kod nie zna jaką ma nazwę; po prostu wie, ile nazw jest związanych z i-węzłem. Nazwy te nazywane są twardymi linkami. Kiedy tworzysz plik, nadajesz mu nazwę. Zasadniczo ta nazwa jest twardym linkiem.

 5
Author: Pinaki Mukherjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 20:19:34

Dodaję do pytania Nicka: kiedy twarde linki są przydatne czy konieczne? Jedyną aplikacją, która przychodzi mi do głowy, w której dowiązania symboliczne nie wykonałyby zadania, jest udostępnienie kopii pliku systemowego w środowisku chrooted.

 4
Author: Federico A. Ramponi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 05:11:50

Także:

  1. wydajność odczytu dowiązań twardych jest lepsza niż dowiązań symbolicznych (mikro-wydajność)
  2. dowiązania symboliczne mogą być kopiowane, sterowane wersjami,..itd. Innymi słowy, są to rzeczywiste pliki. Z drugiej strony, dowiązanie twarde jest czymś na nieco niższym poziomie i przekonasz się, że w porównaniu do dowiązań symbolicznych, jest mniej narzędzi, które zapewniają środki do pracy z dowiązaniami twardymi jako dowiązaniami twardymi, a nie jako zwykłymi plikami
 3
Author: Amr Mostafa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 08:55:20

To, co myślisz o zwykłym "pliku", to w rzeczywistości dwie oddzielne rzeczy: DANE pliku i wpis katalogu. Kiedy tworzysz twarde łącze do pliku, tworzysz drugi wpis katalogu, który odnosi się do tych samych danych. Oba wpisy katalogu mają dokładnie tę samą funkcjonalność; każdy z nich może być użyty do otwarcia pliku, aby go odczytać. Tak naprawdę nie masz "pliku plus twardego łącza", masz "DANE pliku z dwoma wpisami katalogów". Co myślisz o usunięciu pliku usuwa wpis katalogowy, A gdy ostatni wpis katalogu dla danych jest usuwany, wtedy same dane są również usuwane. W przypadku zwykłych plików, które mają tylko jeden wpis katalogu, usunięcie wpisu katalogu spowoduje usunięcie danych jak zawsze. (Podczas otwierania pliku system operacyjny tworzy tymczasowe łącze do pliku, więc nawet po usunięciu wszystkich wpisów katalogu dane pozostają, ale znikają zaraz po zamknięciu pliku).

Jako przykład utwórz plik A.txt, hard link B.txt, oraz usunąć A.txt. Kiedy stworzyłeś A.txt, niektóre dane zostały utworzone, a wpis katalogu A.txt. Po utworzeniu twardego łącza, kolejny wpis katalogu B.txt został stworzony, wskazując dokładnie te same dane. Po usunięciu A.txt, masz jeszcze wszystkie dane i jeden wpis katalogu B.txt, dokładnie tak, jakbyś stworzył plik B.txt po pierwsze.

Soft link jest po prostu (prawie) zwykłym plikiem, z tym wyjątkiem, że nie zawiera danych, ale ścieżkę do innego wpisu w katalogu. Jeśli usuniesz plik, do którego odnosi się łącze miękkie, wtedy łącze miękkie będzie zawierało ścieżkę, która nie wskazuje już na wpis katalogu; jest zepsuta. Jeśli usuniesz łącze miękkie, to tak, jak usunięcie dowolnego innego pliku, Plik, do którego wskazuje, nie ma to wpływu.

 3
Author: gnasher729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 15:32:19

Hard link vs soft link

Hard link Vs Soft link można łatwo wyjaśnić tym obrazem.

 3
Author: PBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-13 06:29:18

Po prostu, Hard link: jest po prostu dodać nową nazwę do pliku , to znaczy, plik może mieć wiele nazw w tym samym czasie, wszystkie nazwy są równe sobie, nikt nie preferowany, Hard link nie oznacza skopiować całą zawartość pliku i zrobić nowy plik nie jest to, to po prostu utworzyć alternatywną nazwę, aby być znane..

Dowiązanie symboliczne (symlink): jest wskaźnikiem pliku do innego pliku, jeśli dowiązanie symboliczne wskazuje na istniejący plik, który zostanie później usunięty, dowiązanie symboliczne nadal wskazuje na ten sam nazwa pliku, mimo że nazwa nie nazywa już żadnego pliku.

 2
Author: Yassine Abdul-Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-05 05:11:19

Z MSDN ,

Dowiązanie symboliczne

Dowiązanie symboliczne jest obiektem systemu plików, który wskazuje na inny obiekt systemu plików. Wskazywany obiekt nazywany jest celem.

Dowiązania symboliczne są przezroczyste dla użytkowników; linki wyglądają normalnie plików lub katalogów i mogą być obsługiwane przez użytkownika lub aplikację dokładnie w ten sam sposób.

Dowiązania symboliczne są przeznaczone do pomocy w migracji i aplikacji kompatybilność z systemami operacyjnymi UNIX. Microsoft wdrożył jego dowiązania symboliczne działają podobnie jak dowiązania uniksowe.

Dowiązania symboliczne mogą być łączami absolutnymi lub względnymi. Bezwzględne łącza to łącza, które określają każdą część nazwy ścieżki; relative łącza są określane względem miejsca, w którym znajdują się łącza względne a specified path

Przykład bezwzględnego dowiązania symbolicznego

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

Przykład względnej symboliki Linki

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

Hard link

A dowiązanie twarde to reprezentacja systemu plików, za pomocą której więcej niż jedna ścieżka odwołuje się do pojedynczego pliku w tym samym woluminie.

Aby utworzyć dowiązanie twarde w systemie windows, przejdź do miejsca utworzenia dowiązania i wprowadź następujące polecenie:

mklink /H Link_name target_path

Zauważ, że możesz usunąć twarde linki w dowolnej kolejności, niezależnie od kolejności, w jakiej zostały utworzone. Również twarde linki nie mogą być created when

  • odniesienia znajdują się w różnych dyskach lokalnych
  • odniesienia obejmują dysk sieciowy. Innymi słowy, jednym z odniesień jest dysk sieciowy
  • W tym celu należy utworzyć łącze twarde, które znajduje się w tej samej ścieżce co cel.]}

Złącze

NTFS obsługuje inny typ łącza o nazwie junction. MSDN definiuje go w następujący sposób:

[[13]}złącze (zwane także łączem miękkim) różni się od łącza twardego tym, że obiekty pamięci odniesienia są oddzielnymi katalogami, a złącze może łączyć katalogi znajdujące się na różnych woluminach lokalnych na tym samym komputerze . W przeciwnym razie połączenia działają identycznie jak połączenia twarde.

Pogrubione części w sekcji hard link i sekcji junction pokazują podstawową różnicę między tymi dwoma.

Aby utworzyć węzeł w systemie windows, przejdź do miejsca, w którym ma zostać utworzony link, a następnie wpisz:

mklink /J link_name target_path
 2
Author: Sнаđошƒаӽ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-24 15:24:05

Wpis w katalogu jest linkiem a strukturą:

struct dentry{
    ino_t ino;
    char  name[256];
}

Ino jest liczbą i-węzła, nazwa jest nazwą pliku, struktura i-węzła może być taka jak:

struct inode{
      link_t nlink; 
      ...
}

Na przykład tworzysz plik / 1, wpis katalogu może być taki:

struct dentry{
     ino_t ino; /* such as 15 */
     char  name[256]; /* "1" */
} 

Struktura i-węzła może wyglądać następująco:

   struct inode{ /* inode number 15 */
         link_t nlink; /* nlink = 1 */
         ...
    }

Następnie tworzysz twardy link (może być /100), wpis katalogu może być taki:

  struct dentry{
     ino_t ino; /* 15 */
     char  name[256]; /* 100 */
  }

Struktura i-węzła może wyglądać następująco:

   struct inode{ /* inode numebr 15 */
         link_t nlink; /* nlink = 2 */
         ...
    }

Następnie tworzysz dowiązanie symboliczne (może być /200) do pliku 1, wpis w katalogu może być podobny:

  struct dentry{
        ino_t ino; /* such as 16 */
        char  name[256]; /* "200" */
  }

Struktura i-węzła może wyglądać następująco:

   struct inode{ /* inode number 15 */ 
         link_t nlink; /* nlink = 2 */
         ...
    }

   struct inode{ /* inode number 16 */
         link_t nlink; /* nlink = 1 */
         ...
    } /* the data of inode 16 maybe /1 or 1 */
 2
Author: mc.robin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 06:59:01

Dodając do wszystkich powyższych odpowiedzi różnicę w znalezieniu pliku hardlink i softlink można zrozumieć następująco:

Mam plik f6 w moim bieżącym katalogu, a także katalog o nazwie t2.

Plik o nazwach f1 i ./t2/f2 jest dowiązaniem symbolicznym do f6.

Pliki o nazwach f7 i ./t2/f8 są twardymi linkami f6.

Aby znaleźć miękki jak i twardy link możemy użyć:

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

Aby znaleźć tylko hardlink możemy użyć:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

Od hardlinki mogą być tworzone na tym samym systemie plików, możemy przeszukać wszystkie hardlinki bez użytej opcji -L (z opcją -xdev) w tym samym systemie plików/punkcie montowania. Zapisuje niepotrzebne wyszukiwanie w różnych punktach montowania.

Więc przeszukiwanie hardlinku jest nieco szybsze niż przeszukiwanie softlinków (proszę poprawić, jeśli się mylę lub nie rozumiem).

 2
Author: ChandanK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 12:09:02

Dowiązania symboliczne dają inną nazwę plikowi, w sposób podobny do dowiązań twardych. Ale plik może zostać usunięty, nawet jeśli istnieją Pozostałe dowiązania symboliczne.

 1
Author: lmmorris1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-25 06:26:13

Właśnie znalazłem łatwy sposób na zrozumienie twardych linków we wspólnym scenariuszu, instalacji oprogramowania.

Pewnego dnia pobrałem oprogramowanie do folderu Downloads do instalacji. Po tym jak zrobiłem sudo make install, niektóre pliki wykonywalne zostały cped do lokalnego folderu bin. Tutaj cp tworzy hard link. Byłem zadowolony z oprogramowania, ale szybko zdałem sobie sprawę, że Downloads nie jest dobrym miejscem na dłuższą metę. Więc ja mved folderu oprogramowania do source katalogu. Cóż, nadal mogę uruchomić oprogramowanie jak wcześniej bez martwiąc się o wszelkie rzeczy związane z łączem docelowym, jak w Windows. Oznacza to hard link znajduje bezpośrednio ikod i inne pliki w pobliżu.

 0
Author: themefield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 19:50:19

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 i-węzła.Numer i-węzła jest używany 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 twarde łącza mają ten sam numer i-węzła(który ma dostęp do tego samego i-węzła),wszystkie wskazują na tę samą pamięć fizyczną.

Dowiązanie symboliczne jest specjalny rodzaj pliku.Ponieważ jest to również plik, będzie miał nazwę pliku i i-węzeł number.As wspomniany powyżej numer i-węzła Zawiera i-węzeł, który wskazuje na dane.Teraz to, co czyni dowiązanie symboliczne wyjątkowym, to fakt, że liczby i-węzłów w dowiązaniach symbolicznych mają dostęp do tych i-węzłów, które wskazują na "ścieżkę" do innego pliku.Dokładniej, numer i-węzła w dowiązaniu symbolicznym umożliwia dostęp do tych i-węzłów, które wskazują na inne dowiązanie twarde.

Gdy przenosimy, kopiujemy,usuwamy plik w GUI bawimy się z dowiązania twarde pliku, a nie pamięci fizycznej.kiedy usuwamy plik, usuwamy twarde łącze pliku. nie wymazujemy fizycznej pamięci.Jeśli wszystkie hardlinki do pliku zostaną usunięte, nie będzie można uzyskać dostępu do przechowywanych danych, chociaż mogą one nadal być obecne w pamięci

 0
Author: s. srinath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 16:47:24

Moje dwa grosze na użycie:

Linki Soft mogą być używane do skracania długich nazw ścieżek, np.:

ln -s /long/folder/name/on/long/path/file.txt /short/file.txt

Zmiany wprowadzone do /short/file.txt zostaną zastosowane do oryginalnego pliku.

Twarde linki mogą być używane do poruszania się po dużych plikach:

$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin

ln /myapp/dev/application.bin /myapp/prd/application.bin

Natychmiastowa Kopia do innego folderu, a oryginalny plik (na /myapp/dev) może zostać przeniesiony lub usunięty, bez dotykania pliku na /myapp/prd

 0
Author: Matheus Santoro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 12:17:32