Katalog jest (koncepcyjnie) specjalnym „plikiem”, który zawiera listę nazw oraz numery i-węzłów, na które wskazują te nazwy. Niektóre nazwy mogą być podkatalogami. Istnieje specjalny wpis ..
wskazujący katalog macierzysty.
Oczywiste jest więc, że zmiana nazwy pliku jest łatwa: wystarczy zmienić nazwę we wpisie katalogu, nic więcej. Odnosi się to do tego, czy plik jest w rzeczywistości plikiem, czy jest „plikiem” służącym do przechowywania zawartości innego katalogu. Rzeczywiście, to samo rename
wywołanie systemowe działa zarówno.
Kopiowanie jest jednak znacznie mniej trywialną operacją. Państwo mogłoby po prostu skopiować katalogu „plik”, ale wtedy masz dwa katalogi, w których pliki są takie same (byliby hardlinki). Jeśli posiadasz system, który pozwala na tworzenie twardych linków do katalogów, byłoby to możliwe, ale ponieważ żaden nowoczesny system nie pozwala na to, przynajmniej dla użytkownika innego niż root, musisz wykonać tę kopię dla każdego podkatalogu. Możesz poprosić cp
o takie zachowanie za pomocą cp -lR
: -l
twardego linku, -R
tej rekurencji.
Ale pozostawienie wszystkiego połączonego prawdopodobnie nie jest tym, czego chcesz. Zamiast tego chcesz cp
skopiować każdy plik. To dość kosztowna operacja: każdy plik musi zostać wczytany do pamięci i zapisany z powrotem na dysk w drugiej lokalizacji. W rzeczywistości potrzeba kilku wywołań systemowych, aby otwierać, czytać, pisać i zamykać pliki, i należy to powtórzyć dla każdego pliku.
Tradycyjne systemy plików działają również w ten sposób na dysku. Nie ma innego sposobu na skopiowanie wiązki plików, niż przejrzenie każdego z nich osobno i skopiowanie go, a są to typy systemów plików, które były używane podczas projektowania podstawowych narzędzi wiersza poleceń.
mv
ing z jednego systemu plików do tego samego „po prostu zmienia nazwę we wpisie katalogu”?