Jak działają systemy plików, katalog nie jest tak naprawdę folderem zawierającym pliki, ale katalog jest plikiem zawierającym wskaźniki i-węzłów do podłączonych do niego plików „potomnych”. Oznacza to, że z perspektywy systemu plików plik jest plikiem, ale katalog to tylko plik zawierający listę połączonych plików.
Więc z perspektywy wiersza poleceń, robiąc to:
$ cp dir1 copyDir1
Zasadniczo oznaczałoby to skopiowanie pliku o nazwie dir1
do nowego pliku o nazwie copyDir1
. A jeśli chodzi o system plików, dir1
to i tak jest tylko plikiem; fakt, że jest to „katalog”, będzie widoczny tylko wtedy, gdy system plików faktycznie sprawdzi, czy rzeczywiście dir1
jest to stos bitów.
-r
Flaga informuje system plików rekursywnie rozwijanego drzewa pliku / katalogu i skopiować całą zawartość i żadnych, które mogą być „dzieckiem” tego pliku do nowego miejsca.
Teraz, dlaczego może się to wydawać zbędne lub zbędne, tak naprawdę sprowadza się to do historycznych metod radzenia sobie z systemami plików. Oprócz tworzenia systemu, który jest bezpieczny od wszelkiego rodzaju błędów związanych z użytkownikiem; przypadkowe i celowe.
To znaczy, załóżmy, że masz ~/bin
plik w katalogu domowym, który chcesz skopiować, ale przypadkowo ~
pominąłeś - ponieważ jesteś człowiekiem i popełniasz błędy - więc /bin
wygląda to tak:
cp /bin/ ~/copy_of_bin
Dzięki „siatce bezpieczeństwa” /bin
bycia katalogiem w połączeniu z potrzebą -r
flagi unikniesz przypadkowego skopiowania całego binarnego katalogu głównego systemu, w którym jesteś, do katalogu domowego. Gdyby ta siatka bezpieczeństwa nie istniała, nastąpiłaby drobna - lub być może poważna - katastrofa.
Logika polega na tym, że w dniach poprzedzających GUI (graficzne interfejsy użytkownika) należy ustawić konwencje logiczne / behawioralne, aby uniknąć tworzenia przez użytkownika wpadek, które potencjalnie mogą zabić system. A używanie -r
flagi jest teraz jednym z nich.
Jeśli wydaje się to zbyteczne, nie musisz szukać dalej niż nowoczesny system GUI, który można umieścić nad systemami plików Linux. GUI rozwiązuje podstawowe problemy użytkownika, takie jak ten, umożliwiając łatwe przeciąganie i upuszczanie plików i katalogów.
Ale w przypadku interfejsów tekstowych wiele „wrażeń użytkownika” w tym świecie to po prostu logiczne i oparte na hueristic guzy drogowe, które pomagają utrzymać kontrolę nad użytkownikiem, aby zapobiec potencjalnej katastrofie.
Podobnie właśnie dlatego systemy plików Linux / Unix nie mają domyślnie ustawionych 777
uprawnień i sudo
uprawnień oraz w jaki sposób prawdziwi administratorzy systemu drżą, gdy użytkownik ustawia 777
uprawnienia lub przyznaje wszystkim sudo
prawa. Są to podstawowe czynności, które należy wykonać, aby zapewnić stabilność systemu i jak najbardziej „dowód użytkownika”; ktokolwiek spieszy się, by zewrzeć te konwencje, najprawdopodobniej spowoduje uszkodzenie swojego systemu, nawet o tym nie wiedząc.
INFORMACJE DODATKOWE: Inna odpowiedź tutaj na stronie Unix Stack Exchange daje dobre wyjaśnienie, dlaczego nierekurencyjna kopia katalogu jest problematyczna; nacisk jest mój.
Cóż, bez flagi -R, możliwe jest tylko kopiowanie plików, ponieważ jest raczej rzadkie, że ktoś chce nierekurencyjnie skopiować katalog: Kopia nierekurencyjna po prostu dałaby drugą nazwę katalogu, wskazując bezpośrednio na ta sama struktura katalogów.
Ponieważ ludzie rzadko tego chcą, a tak naprawdę istnieje osobny program (ln), nierekurencyjna kopia katalogów jest niedozwolona.
Jeśli więc katalog jest tak naprawdę plikiem z elementami i-węzłów, wykonanie prostej kopii tego pliku byłoby równoznaczne z działaniem twardego łącza. Którego nie chce.