Używam Ubuntu 12.04. Kiedy próbuję utworzyć twardy link do dowolnego katalogu, to się nie udaje. Mogę tworzyć twarde linki do plików w granicach systemu plików. Znam powód, dla którego nie możemy tworzyć dowiązań twardych dla plików poza systemem plików.
Próbowałem tych poleceń:
$ ln /Some/Direcoty /home/nischay/Hard-Directory
hard link not allowed for directory
$ sudo ln /Some/Direcoty /home/nischay/Hard-Directory
[sudo] password for nischay:
hard link not allowed for directory
Chcę tylko poznać przyczynę tego. Czy to samo dotyczy wszystkich dystrybucji GNU / Linux i odmian uniksowych (BSD, Solaris, HP-UX, IBM AIX), czy tylko w Ubuntu lub Linux?
filesystem
directory
hard-link
Nischay
źródło
źródło
ln -F <src> <dst>
i może działać. Z pewnością działał on dla superużytkownika w starszych wersjach Uniksa. Czy ktoś pamięta, czy to był UCB czy System V? Tak, złe rzeczy mogą się zdarzyć, ale zwykle nie. O ile pamiętam,rmdir
wiedziałem, żeby nie usuwać twardego linku. Jednak użytkownicy mogą się mylić i usuwać rzeczy przez pomyłkę.rmdir
w szczególny sposób obsługiwać twarde linki? Twardy link jest zwykłym linkiem - ale dodatkowym. Nie jest nawet łatwo ustalić, czy istnieją niezwykłe dodatkowe linki bez dodatkowych nagrań.rmdir
Może więc powiedzieć, czy katalog zawiera linki z innych miejsc. Usuwanie rekurencyjnerm -r
musi być starannie zakodowane, aby mieć pewność, że zadziała poprawnie, nawet jeśli wystąpią błędy, takie jak „odmowa zgody”. BTW, UCB = BSD, doh!ln -F
na katalogach i mam to działa. Ale nie odważysz się później usunąć katalogu z obawy przed uszkodzeniem systemu plików.Odpowiedzi:
Dowiązania twarde katalogów niszczą system plików na wiele sposobów
Pozwalają tworzyć pętle
Twarde łącze do katalogu może prowadzić do samego rodzica, który tworzy pętlę systemu plików. Na przykład te polecenia mogą utworzyć pętlę z łączem zwrotnym
l
:System plików z pętlą katalogów ma nieskończoną głębokość:
Unikanie nieskończonej pętli podczas przechodzenia przez taką strukturę katalogów jest nieco trudne (chociaż na przykład POSIX wymaga
find
tego).System plików z tego rodzaju twardym łączem nie jest już drzewem, ponieważ drzewo nie może z definicji zawierać pętli.
Przełamują jednoznaczność katalogów nadrzędnych
W pętli systemu plików istnieje wiele katalogów nadrzędnych:
W pierwszym przypadku
/tmp/a
jest katalogiem nadrzędnym/tmp/a/b
.W drugim przypadku
/tmp/a/b/l
katalog nadrzędny/tmp/a/b/l/b
jest taki sam jak/tmp/a/b
.Ma więc dwa katalogi nadrzędne.
Mnożą pliki
Pliki są identyfikowane przez ścieżki, po rozwiązaniu dowiązań symbolicznych. Więc
to różne pliki.
Istnieje nieskończenie wiele innych ścieżek do pliku. Są one oczywiście takie same pod względem liczby i-węzłów. Ale jeśli nie oczekujesz wyraźnie pętli, nie ma powodu, aby to sprawdzać.
Twarde łącze do katalogu może również wskazywać na katalog podrzędny lub katalog, który nie jest ani dzieckiem ani rodzicem żadnej głębokości. W takim przypadku plik będący dzieckiem łącza zostanie zreplikowany do dwóch plików, identyfikowanych przez dwie ścieżki.
Twój przykład
Jak zatem mogą działać miękkie linki do katalogów?
Ścieżka, która może zawierać softlinki, a nawet miękkie pętle katalogów, jest często używana tylko do identyfikacji i otwarcia pliku. Można go wykorzystać jako normalną ścieżkę liniową.
Istnieją jednak inne sytuacje, w których ścieżki są używane do porównywania plików. W takim przypadku dowiązania symboliczne na ścieżce można najpierw rozwiązać, przekształcając je w minimalną i powszechnie uzgodnioną reprezentację, tworząc ścieżkę kanoniczną :
Jest to możliwe, ponieważ wszystkie miękkie linki można rozwinąć do ścieżek bez łącza. Po zrobieniu tego ze wszystkimi miękkimi linkami na ścieżce, pozostała ścieżka jest częścią drzewa, gdzie ścieżka jest zawsze jednoznaczna.
Polecenie
readlink
może rozwiązać ścieżkę do ścieżki kanonicznej:Miękkie linki różnią się od tego, z czego korzysta system plików
Miękkie łącze nie może powodować wszystkich problemów, ponieważ różni się od łączy w systemie plików. Można go odróżnić od twardych łączy i w razie potrzeby przekształcić w ścieżkę bez dowiązań symbolicznych.
W pewnym sensie dodanie dowiązań symbolicznych nie zmienia podstawowej struktury systemu plików - zachowuje ją, ale dodaje więcej struktury, jak warstwa aplikacji.
Od
man readlink
:źródło
„Zasadniczo i tak nie powinieneś używać twardych linków” jest zbyt szeroki. Musisz zrozumieć różnicę między dowiązaniami stałymi a dowiązaniami symbolicznymi i używać każdego z nich odpowiednio. Każdy ma własny zestaw zalet i wad:
Łącza symboliczne mogą:
Twarde linki mogą:
Twarde linki są szczególnie przydatne przy wykonywaniu aplikacji „kopiuj przy zapisie”. Pozwalają zachować kopię zapasową struktury katalogów, wykorzystując tylko miejsce na pliki, które zmieniają się między dwiema wersjami.
Polecenie
cp -al
jest szczególnie przydatne w tym względzie. Tworzy kompletną kopię struktury katalogów, w której wszystkie pliki są reprezentowane przez twarde linki do oryginalnych plików. Następnie możesz przystąpić do aktualizacji plików w strukturze, a tylko pliki, które aktualizujesz, zajmą dodatkowe miejsce. Jest to szczególnie przydatne podczas tworzenia kopii zapasowych wielopokoleniowych.źródło
ln -s "Don't use this directory" README
jest uzasadniony. W rzeczywistości, jeśli się nad tym zastanowić, katalog może być używany jako relacyjna baza danych i nie może zawierać żadnych rzeczywistych plików.Do Twojej wiadomości możesz osiągnąć to samo, co twarde linki do katalogów, używając mount:
Jest to bardzo niebezpieczne, ponieważ większość narzędzi i programów nie będzie świadoma powiązania . Kiedyś zrobiłem coś jak w powyższym przykładzie, a potem przystąpiłem do
rm -rf /home/user
. Na szczęście nie było w tym nic istotnego/var/www
.źródło
mount --bind <src> <dest>
. Używaj ostrożnie, aby nie wycieraćsrc
;)mount: unknown filesystem type 'bind'
mount -o bind src dest
rm -rf
problemu. superuser.com/questions/320415/…Powód, dla którego twarde linki nie są dozwolone, jest trochę techniczny. Zasadniczo niszczą one strukturę systemu plików . Generalnie nie powinieneś używać twardych linków. Łącza symboliczne pozwalają na większość takich samych funkcji bez powodowania problemów (np
ln -s target link
.).źródło