Linux / Befehl cp: Dateien und Verzeichnisse kopieren
cp kopiert Dateien und mit einer rekursiven Option auch Verzeichnisse. Prüfen Sie, ob das Ziel bereits ein Verzeichnis ist und ob Dateien überschrieben werden können. Für wichtige Kopien sollten Sie zusätzlich Inhalt und benötigte Metadaten überprüfen.
Die Beispiele verwenden das Verhalten von GNU Coreutils. Prüfen Sie cp --help, man cp und die Dokumentation Ihrer Distribution, wenn Portabilität oder eine versionsspezifische Option wichtig ist.
Ergänzende Befehle und Anwendungsfälle finden Sie in Wesentliche Linux-Befehle: Eine praktische Referenz nach Aufgaben.
Was ist der Befehl cp?
cp kopiert Dateien und mit einer rekursiven Option Verzeichnisbäume. Eine kopierte reguläre Datei ist unabhängig vom Original und hat normalerweise einen anderen Inode. Das genaue Zielverzeichnis hängt davon ab, ob das letzte Argument bereits als Verzeichnis existiert.
Grundlegende Syntax
cp [OPTION]... [-T] SOURCE DESTINATION cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
Setzen Sie Anführungszeichen um Pfade, die Leerzeichen enthalten. Wenn unterstützt, setzen Sie -- vor Operanden, die mit einem Bindestrich beginnen, damit sie nicht als Optionen interpretiert werden.
Grundlegende Verwendung von cp
Kopieren einer Datei unter einem neuen Namen
Bei zwei Dateipfaden liest cp die erste Datei und schreibt eine Kopie an die zweite Stelle.
cp report.txt report-backup.txt
Kopiere mehrere Dateien in ein Verzeichnis
Wenn mehrere Quellen angegeben werden, muss der letzte Operand ein existierendes Zielverzeichnis sein.
cp index.html style.css public/
Kopiere einen Verzeichnisbaum
Verwenden Sie -R für Rekursion. Ziehen Sie -a in Betracht, wenn Links und Metadaten so weit wie möglich gemäß der Plattform erhalten bleiben sollen.
cp -R src src-copy cp -a app/ app-backup/
Überprüfen, ob die kopierte Datei die gleiche ist
cp gibt normalerweise nichts aus, selbst wenn es erfolgreich ist. Bei wichtigen Kopiervorgängen überprüfen Sie nicht nur die Existenz der Zieldatei, sondern auch deren Inhalt.
printf 'demo\n' > original.txt cp original.txt copy.txt cmp -s original.txt copy.txt echo $?
Die Beispielausgabe ist 0, was bedeutet, dass die Byte-Inhalte der beiden Dateien identisch sind. cmp überprüft jedoch keine Metadaten wie Besitz, Berechtigungen oder erweiterte Attribute, daher überprüfen Sie bei Bedarf auch stat.
Wichtige Optionen
| Option | Zweck |
|---|---|
-R, -r |
Verzeichnisse rekursiv kopieren. |
-a |
Archivmodus: rekursiv und Links sowie Attribute nach Möglichkeit beibehalten. |
-p |
Modus, Besitz und Zeitstempel nach Möglichkeit beibehalten. |
-i |
Vor dem Überschreiben eines vorhandenen Ziels nachfragen. |
-n |
Vorhandene Zieldateien nicht überschreiben. |
-u |
Gemäß den Update-Bedingungen kopieren, z. B. wenn die Quelle neuer ist. |
-T |
Das Ziel als exakten Pfad behandeln, nicht als Verzeichnis. |
-t DIR |
Geben Sie das Zielverzeichnis vor der Quellliste an. |
--reflink[=WHEN] |
Fordern Sie Copy-on-Write-Klonen auf unterstützten Dateisystemen an. |
Lange Optionen machen überprüfte Skripte oft leichter verständlich. Wenn ein Skript auf Nicht-GNU-Systemen laufen muss, überprüfen Sie jede nicht-POSIX-Option auf der Zielplattform.
Praktische Beispiele
Steuern Sie das Überschreiben
Verwenden Sie -i für eine interaktive Entscheidung. Verwenden Sie -n, wenn die Automatisierung vorhandene Dateien beibehalten muss, und überprüfen Sie anschließend das Ergebnis.
cp -iv config.ini backup/ cp -nv *.conf backup/
Attribute für eine Sicherungskopie beibehalten
Der Archivmodus versucht, Symlinks, Berechtigungen, Zeitstempel und andere unterstützte Attribute zu erhalten. ACLs, xattrs, SELinux-Labels und Eigentum hängen weiterhin von den Berechtigungen und der Unterstützung des Dateisystems ab.
sudo cp -a /etc/myapp/ /backup/myapp/ cp -a --preserve=all source/ destination/
Überprüfen Sie wichtige Kopien
Für kritische Dateien sollten Hashes verglichen werden, anstatt nur Namen oder Größen zu prüfen. Ein lebender, sich ändernder Datensatz kann eine Snapshot- oder anwendungsbewusste Backup-Methode erfordern.
sha256sum source.img copied.img diff -qr source-dir copied-dir
cp und verwandte Befehle
| Befehl oder Methode | Hauptrolle | Geeignet für |
|---|---|---|
cp |
Lokales Kopieren von Dateien und Verzeichnissen | Einfache Kopien |
mv |
Verschieben oder Umbenennen von Pfaden | Die Quelle sollte nicht verbleiben |
rsync |
Inkrementelle und Remote-Synchronisation | Große wiederholte oder Netzwerktransfers |
install |
Kopieren während der Attribute gesetzt werden | Programminstallation und -bereitstellung |
Wichtige Hinweise
Der Zieltyp ändert das Ergebnis
Wenn der letzte Operandenverzeichnis existiert, wird die Quelle darin abgelegt. Verwenden Sie -T oder -t, wenn ein Skript diese Absicht explizit machen soll.
Archivmodus ist kein vollständiges Sicherungssystem
Offene Dateien, laufende Datenbanken, Berechtigungen und nicht unterstützte Dateisystemfunktionen können eine konsistente Kopie verhindern. Testen Sie die Wiederherstellung mit einem geeigneten Backup-Workflow.
Shell-Globs können versteckte Einträge auslassen
Ein Muster wie source/* schließt normalerweise Dotfiles aus. Überprüfen Sie die Pfadsyntax und die Einschlussregeln, bevor Sie den Inhalt eines Verzeichnisses kopieren.
FAQ
Soll ich -R oder -a für ein Verzeichnis verwenden?
Verwenden Sie -R für grundlegende Rekursion und -a, wenn das Beibehalten von Links und unterstützten Metadaten wichtig ist.
Wie verhindere ich das Überschreiben bestehender Dateien?
GNU cp stellt -n bereit. Bestätigen Sie das genaue Verhalten in der installierten Version.
Warum erscheint ein kopiertes Verzeichnis auf einer anderen Ebene als erwartet?
Das Ergebnis hängt davon ab, ob das Ziel existiert und ob es als Verzeichnis behandelt wird. Verwenden Sie -T oder -t, um Mehrdeutigkeiten zu vermeiden.
Wie überprüfe ich eine Kopie?
Vergleichen Sie die Hashes für Dateien und verwenden Sie Werkzeuge wie diff -qr für Verzeichnisbäume. Ein echtes Backup benötigt auch einen Wiederherstellungstest.
Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils cp Dokumentation und GNU Coreutils-Handbuch.




