Kiedy przydatne byłoby utworzenie twardego łącza?


11

Zasadniczo istnieją dwa główne ograniczenia dotyczące twardych linków:

  1. Twarde łącza zwykle wymagają, aby łącze i plik znajdowały się w tym samym systemie plików.
  2. Tylko superużytkownik może utworzyć stałe łącze do katalogu.

W ten sposób wprowadzono dowiązania symboliczne, aby ominąć ograniczenia dowiązań twardych. Pytanie brzmi, czy twarde linki są nadal potrzebne? Czy może zdarzyć się sytuacja, w której będą bardziej przydatne?


3
1) Niektóre serwery HTTP nie podążają za dowiązaniami symbolicznymi 2) Twarde linki mogą być używane do tworzenia kopii zapasowych 3) Możesz udostępniać gniazda unix między chrootami 4) Możesz usunąć dowolną wersję twardego linku bez wpływu na inne
Dietrich Epp

Czy te serwery HTTP mogą używać linku twardego, który wskazuje dowiązanie symboliczne? , czy mówię bzdury?
arana

Odpowiedzi:


11

Linki twarde pomagają nam organizować nasz system plików w znacznie bardziej elastyczny sposób. Zasadniczo hardlinks pozwalają nam pobrać jeden plik i mieć wiele miejsc w systemie plików jednocześnie. Pomyśl o scenariuszu, w którym jesteś fotografem i masz dużo zdjęć (to przykład z mojego życia!). Możesz je organizować według osób, które się w nich pojawiają, ponieważ czasami ludzie proszą Cię o ich zdjęcia. Możesz jednak chcieć uporządkować je według lokalizacji i daty. Nie ma prawdziwego sposobu na zagnieżdżenie tych trzech rzeczy, są one całkowicie odrębnymi osiami organizacji. Możesz więc stworzyć trzy różne hierarchie dla tych trzech różnych rzeczy i mieć każde zdjęcie we wszystkich trzech, beztrzykrotne przechowywanie każdego zdjęcia. To magia hardlinków. Odłącz dowiązania symboliczne, nie musimy się martwić, gdzie jest „prawdziwy plik”, ponieważ wszystkie są prawdziwymi plikami. Możemy usuwać i przenosić do woli, ponieważ plik zostanie zachowany, dopóki nie będzie już żadnych odniesień do niego, i usunięty po usunięciu ostatniego twardego łącza. Jest to proste i nie wymaga dużej kontroli.


1
Albo może ktoś ma jeden program, który chce się powoływać przez trzy nazwiska gzip, gunzipi zcat.
JdeBP,

8

Zawartość pliku nie zostanie wyczyszczona, dopóki wszystkie twarde linki (tak, wszystkie nazwy plików są twardymi linkami, nawet pierwsze) nie zostaną usunięte, a plik zamknięty. Jako taki, może być przydatny, gdy plik jest wymagany w wielu miejscach, ale może być usunięty z dowolnego z nich w dowolnym momencie, np. Pomiędzy ~/Downloads/coolsong.mp3i ~/Music/Cool Song.mp3.


3
To jest poprawne. Używam go, aby wysyłać torrent, mając poprawnie nazwany plik w moim czystym folderze filmu. Jest to o wiele łatwiejsze niż przenoszenie i zmiana nazw plików, które są inicjowane. Mogę po prostu usunąć folder torrent po zakończeniu inicjowania. Tak też robi to Couch Potato.
Nicolas Bouliane

1

Jedną niezbyt ważną zaletą twardego łącza w stosunku do dowiązania symbolicznego jest to, że kiedy osiąga on i-węzeł dla twardego łącza, jądro nie ma dalszego przetwarzania, aby uzyskać dostęp do pliku. Kiedy napotka dowiązanie symboliczne, jądro musi odczytać wartość dowiązania i kontynuować przeglądanie struktury katalogów, zanim dotrze do i-węzła pliku. Trwa to dłużej, choć różnica niekoniecznie jest łatwa do zmierzenia. Jest naprawdę fajnie, gdy jednym z elementów wartości dowiązania symbolicznego jest dowiązanie symboliczne.


Doskonały punkt W Solarisie można tworzyć pętle za pomocą dowiązań symbolicznych, których przetwarzanie jest jeszcze bardziej zabawne :-)

1

istnieje kilka powodów twardych linków

  1. zachować referencje do pliku, dopóki nie zniknie ostatnia referencja (jak zauważył Ignacio)
  2. kiedy dowiązasz pliki, zajmują one miejsce tylko jednego pliku w systemie plików (oba odwołania do pliku współużytkują te same i-węzły). Dlatego twarde linki muszą znajdować się w tym samym systemie plików.

Jednym z powodów korzystania z twardych linków jest prawdopodobnie zaoszczędzenie dużej ilości miejsca ...

Możesz dołączyć do jednego z odniesień, a dane trafią do udostępnionego pliku. Możesz także dołączyć do jednego deskryptora pliku podczas czytania z drugiego (np. Z tail -f)


0

Wiele z podanych tu przykładów jest poprawnych, ale działałoby równie dobrze z miękkimi linkami (np. Problem „potrzebujesz jednego pliku w wielu miejscach”).

Dobrym przykładem, w którym twarde linki są naprawdę pomocne, jest oprogramowanie do tworzenia kopii zapasowych Dirvish :

Dirvish to szybki, oparty na dyskach, obrotowy system tworzenia kopii zapasowych w sieci.

Dzięki dirvish możesz utrzymywać zestaw kompletnych obrazów swoich systemów plików z nienadzorowanym tworzeniem i wygaśnięciem. Skarbiec kopii zapasowej dirvish jest jak wehikuł czasu dla twoich danych.

Dirvish tworzy kopie zapasowe na poziomie systemu plików (tzn. Kopiuje pliki, nie tworzy obrazów), kopiując pliki do osobnego (zapasowego) systemu plików (takiego jak dysk twardy USB). Za każdym razem, gdy wykonasz kopię zapasową, dirvish utworzy osobną, kompletną kopię drzewa katalogów do zapisania.

Sztuczka polega na tym, że jeśli dirvish wykryje, że istnieje już starsza kopia zapasowa zapisywanego drzewa, automatycznie użyje plików, które nie uległy zmianie, tworząc twardy link w nowym drzewie do pliku w starym drzewie.

W ten sposób każda kopia zapasowa jest kompletną, niezależną kopią drzewa katalogów, ale jednocześnie tylko zmienione pliki faktycznie zajmują miejsce w systemie plików. Innymi słowy, zyskujesz korzyści z przyrostowych kopii zapasowych (oszczędność miejsca) i pełnych kopii zapasowych (łatwe pobieranie) w tym samym czasie.

Jest to możliwe tylko dlatego, że twarde linki są całkowicie przezroczyste dla narzędzi przestrzeni użytkownika.

Prawdopodobnie działałoby to również z dowiązaniami symbolicznymi (chociaż przy tworzeniu kopii zapasowej danych korzystających z samych dowiązań symbolicznych pojawiałyby się problemy), ale jedną z zalet możliwych tylko w przypadku dowiązań twardych jest:

Jeśli chcesz wyrzucić stare kopie zapasowe, możesz po prostu usunąć odpowiednie drzewo katalogów kopii zapasowych. Pliki połączone tylko z tego drzewa są automatycznie usuwane przez system plików (ponieważ ich ostatnie twarde łącze jest usuwane), ale pliki, które pojawiają się również w innych kopiach, pozostają na dysku.


Brzmi jak rsnapshot.
Ignacio Vazquez-Abrams

0

Jednym z przydatnych przypadków jest, powiedzmy, gdy masz program (lub skrypt), który musi pobrać duży tymczasowy plik archiwalny, a po jego rozpakowaniu program natychmiast go usunie.

Jeśli z jakiegoś powodu chcesz zachować ten plik archiwalny do wykorzystania w przyszłości, najlepszym sposobem ln /tmp/tarball.tgz ~jest pozostawienie go podczas pobierania. Więc nie musisz nic robić.

Po zakończeniu pobierania, a nawet po usunięciu przez program „oryginalnego”, dokładna kopia powinna nadal znajdować się w katalogu domowym.


0

Używam „twardych linków” do tworzenia kopii zapasowych niektórych moich „HowTos” i Snippetów

Mam katalog o nazwie „Udostępnione dokumenty” w moim użytkowniku / katalogu głównym. W tym katalogu mam „twarde linki” do moich wskazówek, sztuczek, fragmentów, howto, które znajdują się w odpowiednich katalogach; php, mysql, css, regex, formuły, linux itp., Posiadanie ich w „jednym miejscu” znacznie ułatwia korzystanie z nich, aktualizuje je, niż skakanie w Dokumentach / katalogach w poszukiwaniu tych dokumentów, których często używam.

Dawno temu użyłem dowiązań symbolicznych. Wiernie wykonałbym kopię zapasową tego wspólnego katalogu „Udostępniane dokumenty” na moim serwerze. Problem polega na tym, że dowiązania symboliczne lub „miękkie linki”, jeśli są kopiowane (cp -auv) lub tar'owane i kopiowane, TYLKO tworzą kopię zapasową lub kopiują „link”, a NIE zawartość dokumentu. Musiałbym więc przeglądać katalogi i kopiować każdy z 2 tuzinów plików z ich rzeczywistej lokalizacji.

Dzięki HARD LINKS mogę kopiować, tarować, rsynchronizować katalog „Udostępniane dokumenty” i faktycznie pewnie tworzyć kopie zapasowe tych szeroko rozproszonych dokumentów, a zawartość jest faktycznie tworzona. To naprawdę jest dla mnie beznadziejne, kiedy zdałem sobie sprawę, że tworzę kopie zapasowe „plików linków” 0 zgryzu i nie informacji.

Minusem korzystania z „twardych linków” jest to, że robienie ls w katalogu nie daje ci wskazania, że ​​plik jest „powiązany” z innym plikiem lub gdzie ten plik może współistnieć. Są sposoby, aby je znaleźć, ale mówię, że nie jest to oczywiste z prostym ls -l -> wskazuje na ... Tak więc zazwyczaj na początku dokumentu dodam notatkę wskazującą, który katalog / pliki „ten plik” „jest” udostępniony ”

Landis.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.