So wie Dateisysteme funktionieren, ist ein Verzeichnis eigentlich kein Ordner, der Dateien enthält, sondern ein Verzeichnis ist eine Datei, die Inode-Zeiger auf „untergeordnete“ Dateien enthält, die mit ihm verbunden sind. Aus Sicht des Dateisystems ist eine Datei eine Datei, ein Verzeichnis jedoch nur eine Datei mit einer Liste der verbundenen Dateien.
Also aus der Kommandozeilenperspektive:
$ cp dir1 copyDir1
Würde im Grunde bedeuten, die genannte Datei dir1
in eine neue Datei mit dem Namen zu kopieren copyDir1
. Und was das Dateisystem betrifft, dir1
ist es sowieso nur eine Datei; Die Tatsache, dass es sich um ein „Verzeichnis“ handelt, wird nur sichtbar, wenn das Dateisystem tatsächlich prüft dir1
, um festzustellen, was dieser Stapel von Bits tatsächlich ist.
Das -r
Flag weist das Dateisystem an, den Datei- / Verzeichnisbaum rekursiv zu rollen und alle Inhalte, die ein „Kind“ dieser Datei sein könnten, an einen neuen Ort zu kopieren.
Nun, warum das überflüssig oder überflüssig erscheint, hängt es wirklich mit historischen Methoden des Umgangs mit Dateisystemen zusammen. Sowie die Schaffung eines Systems, das vor allen Arten von benutzerbezogenen Fehlern sicher ist; zufällig sowie absichtlich.
Das heißt, sagen wir , Sie eine haben ~/bin
Datei in Ihrem Home - Verzeichnis , das Sie kopieren möchten , aber die versehentlich ausgelassen ~
-weil Sie ein Mensch und machen Fehler-so sein gerade sind /bin
wie folgt aus :
cp /bin/ ~/copy_of_bin
Mit dem „Sicherheitsnetz“ /bin
, ein Verzeichnis zu sein, verbunden mit der Notwendigkeit des -r
Flags, vermeiden Sie, dass Sie versehentlich die gesamte Binärwurzel des Systems, auf dem Sie sich befinden, in Ihr Home-Verzeichnis kopieren. Wenn dieses Sicherheitsnetz nicht vorhanden wäre, würde eine kleine - oder möglicherweise große - Katastrophe eintreten.
Die Logik hier ist, dass in den Tagen vor der GUI (grafische Benutzeroberflächen) logische / Verhaltens-Konventionen festgelegt werden müssen, um zu vermeiden, dass der Benutzer Pannen verursacht, die ein System möglicherweise töten können. Und die -r
Flagge zu benutzen ist jetzt eine davon.
Wenn das überflüssig erscheint, brauchen Sie nicht weiter zu suchen als mit einem modernen GUI-System, das man über Linux-Dateisystemen platzieren kann. Eine grafische Benutzeroberfläche behebt grundlegende Benutzerprobleme wie diese, indem sie das einfache Ziehen und Ablegen von Dateien und Verzeichnissen ermöglicht.
Aber im Bereich der textbasierten Benutzeroberflächen ist ein Großteil der „Benutzererfahrung“ in dieser Welt im Grunde genommen nur logische und hueristische Unebenheiten, die dazu beitragen, den Benutzer in Schach zu halten, damit potenzielle Katastrophen abgewendet werden können.
Auf ähnliche Weise haben Linux / Unix-Dateisysteme standardmäßig keine 777
Berechtigungen und sudo
Rechte festgelegt und wie echte Systemadministratoren zusammenzucken, wenn ein Benutzer 777
Berechtigungen festlegt oder jedem sudo
Rechte gewährt . Dies sind die grundlegenden Dinge, die man tut, um sicherzustellen, dass das System stabil und so benutzerfreundlich wie möglich ist. Wer sich beeilt, diese Konventionen kurzzuschließen, wird höchstwahrscheinlich sein System beschädigen, ohne es überhaupt zu wissen.
ZUSÄTZLICHE INFORMATIONEN: Eine andere Antwort hier auf der Unix Stack Exchange-Website gibt eine gute Erklärung dafür, warum eine nicht rekursive Kopie eines Verzeichnisses problematisch ist. Betonung liegt bei mir.
Nun, ohne das -R-Flag ist es nur möglich, Dateien zu kopieren, da es eher ungewöhnlich ist, dass jemand ein Verzeichnis nicht rekursiv kopieren möchte : Eine nicht rekursive Kopie würde nur einen zweiten Namen für das Verzeichnis ergeben, der direkt auf das Verzeichnis verweist gleiche Verzeichnisstruktur.
Da dies nur selten gewünscht wird und es tatsächlich ein separates Programm gibt, das dies ausführt (ln), ist eine nicht rekursive Kopie von Verzeichnissen nicht zulässig.
Wenn ein Verzeichnis also nur eine Datei mit Inode-Elementen ist, entspricht das Erstellen einer direkten Kopie dieser Datei der Funktionsweise einer festen Verknüpfung. Welches ist nicht das, was jemand will.