Jak mówi tytuł, chciałbym poznać różnicę między dowiązaniem twardym a dowiązaniem miękkim utworzonym przez polecenie ln
. Polecenie man ln
zawiera informacje, ale niewystarczająco odpowiada na moje pytanie.
Byłoby również miło, gdyby ktoś mógł podać ustawienie, w którym łącze twarde byłoby lepsze niż łącze symboliczne.
symbolic-link
ste_kwr
źródło
źródło
Odpowiedzi:
W systemie Linux / Unix skróty są znane jako łącza
Łącza są dwojakiego rodzaju: miękkie (symboliczne) lub twarde.
Linki miękkie (linki symboliczne)
Możesz tworzyć linki do plików i katalogów, a także tworzyć linki (skróty) na innej partycji i przy użyciu innego numeru i-węzła niż oryginał.
Jeśli rzeczywista kopia zostanie usunięta, łącze nie będzie działać .
Twarde linki
Twarde linki są tylko dla plików; nie można utworzyć łącza do pliku na innej partycji z innym numerem i-węzła.
Jeśli rzeczywista kopia zostanie usunięta, link zadziała , ponieważ uzyskuje dostęp do podstawowych danych, do których miała dostęp rzeczywista kopia.
Pytanie: Jak utworzyć miękki link?
Odpowiedź: Można utworzyć miękki link
ln -s
; najpierw musisz zdefiniować źródło, a następnie musisz zdefiniować miejsce docelowe. (Pamiętaj, że musisz zdefiniować pełne ścieżki źródła i miejsca docelowego; w przeciwnym razie to nie zadziała).Jak widać, ma on inny i-węzeł i może być wykonany na innej partycji.
Pytanie: Jak utworzyć twardy link?
Odpowiedź: Twardy link można utworzyć za pomocą
ln
; najpierw musisz zdefiniować źródło, a następnie musisz zdefiniować miejsce docelowe. (Pamiętaj, że musisz zdefiniować pełną ścieżkę źródła i miejsca docelowego; w przeciwnym razie to nie zadziała).Powiedzmy, że mam skrypt o
/script
nazwie katalogfirefox
.Jak widać, ma tę samą i-węzeł. Jeśli usunę oryginalny, link będzie działał i będzie działał jak oryginał.
Powyżej sprawdzam, czy link działa, a następnie usuwam oryginalny skrypt firefox.
Twoje pytanie: Byłoby miło, gdyby ktoś mógł podać ustawienie, w którym łącze twarde byłoby lepsze niż łącze symboliczne.
Odpowiedź : W zależności od układu partycji dysku twarde łącza mają ograniczenie, że muszą znajdować się na tej samej partycji (-1 punkt) i mogą prowadzić tylko do plików (-1 punkt) ), ale +1 punkt, jeśli oryginał zostanie usunięty łącze będzie działać i działa jak oryginał.
Z drugiej strony, miękkie łącze może wskazywać na katalogi lub pliki (+1 punkt) i nie ma ograniczeń partycji (+1 punkt), ale (-1 punkt), jeśli źródło zostanie usunięte, łącze nie będzie działać.
źródło
Hardlink nie jest wskaźnikiem do pliku, to pozycja katalogu (plik) wskazująca na ten sam i-węzeł. Nawet jeśli zmienisz nazwę drugiego pliku, stałe łącze nadal wskazuje plik. Jeśli zamienisz drugi plik na nową wersję (przez skopiowanie), hardlink nie wskaże nowego pliku. W tym samym systemie plików można mieć tylko łącza twarde. W przypadku linków twardych nie masz pojęcia o oryginalnych plikach i linkach, wszystkie są równe (pomyśl o tym jako o odwołaniu do obiektu). To koncepcja bardzo niskiego poziomu.
Z drugiej strony dowiązanie symboliczne faktycznie wskazuje inną ścieżkę (nazwę pliku); rozpoznaje nazwę pliku za każdym razem, gdy uzyskujesz do niego dostęp za pośrednictwem dowiązania symbolicznego. Jeśli przeniesiesz plik, dowiązanie symboliczne nie nastąpi. Jeśli zastąpisz plik innym, zachowując nazwę, dowiązanie symboliczne wskaże nowy plik. Dowiązania symboliczne mogą obejmować systemy plików. W przypadku dowiązań symbolicznych masz wyraźne rozróżnienie między plikiem rzeczywistym a dowiązaniem symbolicznym, który nie przechowuje żadnych informacji obok ścieżki o wskazanym pliku.
źródło
"Obraz jest wart tysiąca słów."
I „Przykład jest wart sto akapitów ...”
Utwórz dwa pliki:
Wprowadź do nich dane:
I zgodnie z oczekiwaniami:
Utwórzmy twarde i miękkie linki:
Zobaczmy, co się właśnie stało:
Zmiana imienia bla1 nie ma znaczenia:
blah1-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 bla1 zostanie usunięte, bla1-hard nadal będzie zawierał zawartość; jeśli blah2 zostanie usunięte, blah2-soft jest tylko linkiem do nieistniejącego pliku.
źródło: rażąco kopiując go z StackOverflow!
źródło
git
jest złym pomysłem , na wypadek gdyby ktoś (sfrustrowany miękkimi linkami) zastanawiał się ... mógłby zastosować się również do innych systemów wersji.Oba są wskaźnikami do plików; różnica polega na rodzaju wskaźnika. Łącze symboliczne wskazuje na inny plik według nazwy . Ma specjalny bit trybu, który identyfikuje go jako dowiązanie symboliczne, a jego zawartość to nazwa prawdziwego pliku. Ponieważ zawiera ona tylko nazwę, nazwa ta tak naprawdę nie musi istnieć lub może istnieć w innym systemie plików. Jeśli podmienisz nazwany plik (zmienisz jego zawartość bez wpływu na jego nazwę), wówczas łącze nadal będzie zawierało tę samą nazwę, a więc teraz wskazuje nowy plik. Możesz łatwo zidentyfikować symboliczny link i zobaczyć nazwę pliku, na który wskazuje.
Twardy link wskazuje plik według numeru i-węzła. W związku z tym twarde linki nie różnią się od imienia pliku. Nie ma „prawdziwej” nazwy vs. twardej nazwy linku; wszystkie twarde linki są równie poprawnymi nazwami pliku. Z tego powodu plik, do którego prowadzi łącze, musi faktycznie istnieć i znajdować się w tym samym systemie plików, w którym próbujesz utworzyć łącze. Jeśli usuniesz oryginalną nazwę, twardy link nadal wskazuje ten sam plik. Ponieważ wszystkie twarde linki są równie poprawnymi nazwami pliku, nie można na nie patrzeć i widzieć innych nazw pliku; aby to znaleźć, musisz przejść do każdego pliku i porównać ich numer i-węzła, aby znaleźć inne nazwy, które mają ten sam numer i-węzła.
Możesz określić, ile nazw plików ma plik wyjściowy
ls -l
. Pierwszą liczbą po trybie pliku jest liczba linków. Plik z więcej niż 1 linkiem ma gdzieś inną nazwę (nazwy), i odwrotnie, plik z liczbą linków tylko 1 nie ma (innych) twardych linków.źródło
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Myślę, że nie jest to dobrze wyjaśnione. Czy chodzi ci o to, że jeśli zastąpię plik, do którego mam link symboliczny, to linki zawierające nazwę pozostaną nietknięte. Ale wskazywałby tylko na zastąpiony plik, gdy jego nazwa pliku (tj. Nowy plik, który zastąpił stary) jest taki sam jak zastąpiony (tj. Stary plik, który został zastąpiony nowym), prawda?Hardlink może działać tylko na tym samym systemie plików, jest to po prostu inna nazwa dla tego samego i-węzła (pliki są wewnętrznie przywoływane przez i-węzły). Plik zostanie usunięty z dysku tylko wtedy, gdy zniknie ostatni link do jego i-węzła (ty
rm
d lubunlink
d ostatni link). Twarde linki zwykle działają tylko w przypadku plików, a nie katalogów.Dowiązanie symboliczne (dowiązanie symboliczne) to specjalny plik zawierający ścieżkę do innego pliku. Ta ścieżka może być bezwzględna lub względna. dowiązania symboliczne mogą działać w różnych systemach plików, a nawet mogą wskazywać na różne pliki, jeśli na przykład odłączysz zewnętrzny dysk twardy i zastąpisz go innym, który ma inny plik w tej samej ścieżce. Dowiązanie symboliczne może wskazywać albo pliki, albo katalogi.
źródło
-d, -F, --directory
przełączniki. I tak, nie widział notatkę naln(1)
stronie :)ln
nie można używać do tworzenia dowiązań twardych do katalogów. Istnieją jednak dowiązania twarde do katalogów, przy czym najbardziej znanym przykładem jest.
i..
. Nie chciałem tego uwzględniać w mojej pierwotnej odpowiedzi, ponieważ tylko to skomplikowałoby.Jedna z odpowiedzi z drugiego wątku (teraz link od góry twojego postu) wspomina o tej stronie, która moim zdaniem jest dość dobrym wyjaśnieniem na średnim poziomie. Jeśli gubisz się w sztuce ascii, oto wersja tl; dr:
Zaangażowane jądro i systemy plików tłumaczą wszystko w przejrzysty sposób.
Na tej podstawie:
../parent.file
)Mogłem się trochę pomylić, ale czytając różne rzeczy, staram się znaleźć różnicę między standardowym plikiem a twardym dowiązaniem. Sposób, w jaki go czytam, polega na tym, że każdy plik składa się z twardego łącza (przechowującego nazwę pliku), łączącego się z i-węzłem, który wskazuje na dane fizyczne.
Dodanie twardego łącza zapewnia tylko i-węzeł z dodatkowym wskaźnikiem opartym na systemie plików. Czy to prawda?
źródło
Kiedy stosować Soft Link:
Łączenie między systemami plików: Jeśli chcesz połączyć pliki między systemami plików, możesz używać tylko dowiązań symbolicznych / dowiązań miękkich.
Łącza do katalogu: jeśli chcesz połączyć katalogi, musisz używać linków miękkich, ponieważ nie możesz utworzyć twardego łącza do katalogu.
Kiedy stosować Hard Link:
Miejsce do przechowywania: twarde łącza zajmują bardzo mało miejsca, ponieważ podczas tworzenia twardych łączy nie są tworzone nowe i-węzły. W miękkich linkach tworzymy plik, który zajmuje miejsce (zwykle 4KB, w zależności od systemu plików)
Wydajność: Wydajność będzie nieco lepsza podczas uzyskiwania dostępu do twardego łącza, ponieważ uzyskuje się bezpośredni dostęp do wskaźnika dysku zamiast przechodzenia przez inny plik. Przenoszenie lokalizacji pliku: jeśli plik źródłowy zostanie przeniesiony do innej lokalizacji w tym samym systemie plików, łącze twarde będzie nadal działać, ale łącze miękkie nie powiedzie się.
Nadmiarowość: jeśli chcesz zapewnić bezpieczeństwo swoich danych, powinieneś używać twardego linku, ponieważ w twardym linku dane są bezpieczne, dopóki wszystkie linki do plików nie zostaną usunięte, zamiast w miękkim linku, stracisz dane, jeśli główna instancja pliku zostanie usunięta.
źródło
Zamieszanie pojawia się, gdy próbujesz znaleźć różnicę między „nazwą pliku” a twardym linkiem, ponieważ nie ma go.
Każdy tworzony plik składa się z danych na dysku i twardego łącza - które jest nazwą pliku w katalogu i wskaźnikiem do danych na dysku. Koniec opowieści. Po usunięciu ostatniego (lub tylko) twardego łącza system operacyjny wie, że dane nie są już potrzebne.
Z tego widać, że rzeczywiste dane nigdy nie są usuwane, są tylko twarde linki. A kiedy na dysku jest wystarczająco tłoczno, dane mogą zostać zastąpione danymi innego pliku. Do tego czasu dane z usuniętego pliku mogą być odzyskane, ale trudno jest je znaleźć bez twardego łącza.
Łącza symboliczne, jak wyjaśniono wcześniej, po prostu mówią „jest plik o nazwie
<targetname>
w folderze o nazwie<targetfolder>
”. Wskazują na twardy link. Nie wiedzą, gdzie są dane. Twardy link wie o tym.źródło
To jest bardzo proste. Pliki (i katalogi!) Są przechowywane pod adresami na urządzeniu blokowym (HDD lub cokolwiek innego). Zwykle masz jedną nazwę zamapowaną na adres i tak otrzymujesz plik. Twrdym to drugi, trzeci itd nazwa odwzorowane na ten sam adres. Łączem symbolicznym , a nie odnosi się do symbolu - nazwa - a więc jest nazwisko odwzorowywane na imienia. Jeśli chodzi o jądro, gdy odczyta symboliczny cel dowiązania, zatrzymuje się i wraca na początek z wartością celu jako nazwą pliku (mniej więcej), więc względne dowiązania symboliczne są możliwe, ale bardzo nieprzydatne. Nazwa docelowa nie jest używana powyżej poziomu systemu plików, z wyjątkiem przypadków jawnego zapytania w kodzie przestrzeni użytkownika.
źródło