Czy jest jakaś różnica między hardlinkingiem z cp -l lub ln?

15

Wdrażam schemat tworzenia kopii zapasowych przy użyciu rsync i hardlinks. Wiem, że mogę używać link-dest z rsync do robienia twardych dowiązań, ale widziałem wzmiankę o użyciu „cp -l”, zanim „link-dest” został zaimplementowany w rsync. Inną znaną metodą linkowania na twardo jest „ln”.

Moje pytanie brzmi zatem z ciekawości: czy istnieje różnica w tworzeniu linków twardych przy użyciu „cp -l” w porównaniu do używania „ln”?

twan163
źródło
Linki są nierozróżnialne.
rici
Chcesz powiedzieć, że nie ma różnicy? Można je stosować zamiennie?
twan163
Sam przeprowadziłem mały test, ale na pierwszy rzut oka nie widziałem żadnej różnicy między nimi.
twan163,
cp: illegal option -- lczy jesteś pewien, że cp ma opcję l?
Tom

Odpowiedzi:

16

Rezultaty obu muszą być takie same, ponieważ tworzony jest twardy link do oryginalnego pliku.

Różnica polega na zamierzonym użyciu, a zatem na opcjach dostępnych dla każdego polecenia. Na przykład cpmożna użyć rekurencji, lnale nie można:

cp -lr <src> <target>

utworzy twarde linki <target>do wszystkich plików w <src>. (tworzy nowe katalogi; nie łącza) W rezultacie struktura drzewa katalogów <target>będzie wyglądać identycznie jak ta pod <src>. Różni się od cp -r <src> <target>tego, że użycie tego ostatniego spowoduje skopiowanie każdego pliku i folderu i nadanie każdemu nowego, inodepodczas gdy ten pierwszy używa twardych linków do plików, a zatem po prostu zwiększa ich Linksliczbę.

Gdy użyjesz go do skopiowania pojedynczego pliku, jak w twoim przykładzie, wyniki będą identyczne.

garethTheRed
źródło
jeśli dobrze rozumiem, „cp -lr” utworzy dowiązania twarde dla wszystkich plików, ale jeśli brakuje katalogów w <target>, zostaną one utworzone jako nowe (tj. nie będzie dowiązań twardych do katalogów w <target>)?
twan163
Tak, to jest poprawne. Nie można tworzyć twardych linków do katalogów. Dlatego w celu zachowania struktury pliku / katalogu staje się on twardym dowiązaniem do plików w „prawdziwych” katalogach.
garethTheRed
odnośnie zachowania dla "cp -lr": hardlinks dla plików ... nowe katalogi dla katalogów. wydaje się trochę dziwne, ale myślę, że to „dziwne” zachowanie jest efektem ubocznym ograniczeń (nie może zawierać linków twardych do katalogów). ||| również FYI w celach informacyjnych oto kilka linków do informacji o linkach twardych niedozwolonych dla directoreis ref1 z askubuntu i ref2 z unix.stackexchange .
Trevor Boyd Smith
2

link używa najmniej wywołań systemowych, następnie ln i na koniec cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
Steven Penny
źródło