Der Befehl cpio
In diesem Beitrag lernen Sie den Befehl cpio für Linux- bzw. UNIX-Betriebssysteme kennen. Der Befehl erlaubt Ihnen das Kopieren von Dateien zwischen Archiven und Verzeichnissen, wobei viele verschiedene Archivformate unterstützt werden: Altes binäres cpio, altes portables cpio, SVR4 cpio mit und ohne Prüfsumme, HP cpio und verschiedene tar-Formate.
Der Befehl unterstützt drei verschiedene Modi: create (copy-out), extract (copy-in) und pass-through (copy-pass). Im Folgenden wird zunächst die allgemeine Syntax und anschließend die grundlegende Anwendung der verschiedenen Modi vorgestellt. Einige Beispiele führen zudem die Anwendung des Befehls vor.
Weitere Informationen zur Archivierung von Dateien finden Sie auch in unserem Beitrag zum Befehl tar.
Allgemeine Syntax
Die allgemeine Syntax von cpio lautet folgendermaßen:
cpio [--create|--extract|--pass-through] [Optionen
cpio-Modi
Im Folgenden werden die verschiedenen Modi, welche für die Verwendung mit cpio verfügbar sind, vorgestellt.
Create-Modus
Der Create-modus, welcher mit der Option --create oder -o aufgerufen wird, wird zum Erzeugen von Archiven mit bestimmten Dateien verwendet. Eine Liste von Dateinamen wird vom Standard-Input stdin gelesen und das erzeugte Archiv anschließend am Standard-Output stdout ausgeben.
Beispiel: Dateien archivieren
In diesem Beispiel sollen die im aktuellen Arbeitsverzeichnis befindlichen Dateien archiviert werden. Mit dem Befehl ls werden die Dateien dazu an den Standard-Input von cpio --create übergeben. Die Ausgabe wird in eine Archiv-Datei hedv-archiv.cpio unter /home/hellberg/archive/ geschrieben. Beachten Sie bitte, dass Sie die Ausgabe bei diesem Vorgehen nicht direkt in das Arbeitsverzeichnis schreiben können.
Ausgabe von ls im Arbeitsverzeichnis:
befehl-find.txt befehl-grep.txt linux-berechtigungssystem.txt
Eingabe:
ls | cpio --create > /home/hellberg/archive/hedv-archiv.cpio
Inhalt von /home/hellberg/archive/ (nach Ausführung):
hedv-archiv.cpio
Beispiel: Verzeichnis archivieren
In diesem Beispiel sollen ein komplettes Verzeichnis /administration/ aus dem aktuellen Arbeitsverzeichnis archiviert werden - dabei wird der Befehl find eingesetzt. Die Ausgabe wird in eine Datei hedv-verzeichnis.cpio im Arbeitsverzeichnis geschrieben.
Ausgabe von ls im Arbeitsverzeichnis:
administration distribution grundlagen installation netzwerke sicherheit
Eingabe:
find ./administration | cpio --create > hedv-verzeichnis.cpio
Ausgabe von ls im Arbeitsverzeichnis (nach Ausführung):
administration distribution grundlagen hedv-verzeichnis.cpio installation netzwerke sicherheit
Extract-Modus
Mit dem Extract-Modus, welcher mit --extract bzw. -i aufgerufen wird, können Archive vom Standard-Input stdin eingelesen und Dateien aus diesen extrahiert werden. Das Einlesen eines Archivs kann alternativ auch mithilfe der Option --file erfolgen. Wird die Option -t verwendet, so werden keine Dateien extrahiert, sondern stattdessen eine Liste der Inhalte des Archivs auf dem Standard-Output stdout ausgegeben. Wird letztere Option alleine verwendet, so impliziert sie den Extract-Modus - also die Option --extract.
Durch Verwendung von Mustern ist es möglich, nur solche Dateien zu extrahieren, deren Dateinamen diesem entsprechen.
Beispiel: Alle Dateien extrahieren
In diesem Beispiel sollen die Dateien aus dem unter "Beispiel: Dateien archivieren" erstellten Archiv alle in das Arbeitsverzeichnis extrahiert werden.
Eingabe:
cpio --extract < /home/hellberg/archive/hedv-archiv.cpio
Ausgabe von ls im Arbeitsverzeichnis (nach Ausführung):
befehl-find.txt befehl-grep.txt linux-berechtigungssystem.txt
Beispiel: Dateien nach Muster extrahieren
Nun sollen nur solche Dateien deren Namen mit "befehl" beginnt aus dem unter "Beispiel: Dateien archivieren" erstellten Archiv in das Arbeitsverzeichnis extrahiert werden. Der Stern "*" im Muster steht dabei für eine beliebige Zeichenkette.
Eingabe:
cpio --extract "befehl*" < /home/hellberg/archive/hedv-archiv.cpio
Ausgabe von ls im Arbeitsverzeichnis (nach Ausführung):
befehl-find.txt befehl-grep.txt
Pass-Through-Modus
Der Pass-Through-Modus kann schließlich verwendet werden, um Dateien vom Standard-Input stdin einzulesen und diese in das angegebene Verzeichnis zu kopieren.
Beispiel: Dateien zwischen Verzeichnissen kopieren
Schließlich sollen hier auch einmal einige Dateien aus dem aktuellen Arbeitsverzeichnis in ein anderes leeres Verzeichnis /home/hellberg/copy/ kopiert werden.
Ausgabe von ls - l im Quellverzeichnis /Arbeitsverzeichnis):
befehl-scp.txt netzwerkbefehle-anfaenger.txt
Eingabe:
find . | cpio --pass-through /home/hellberg/copy/
Ausgabe von ls -l /home/hellberg/copy/ (nach Ausführung):
befehl-scp.txt netzwerkbefehle-anfaenger.txt
Wichtige Optionen
-0 - Nullzeichen verwenden
Durch Verwendung von -0 bzw. --null wird die eingelesene Liste von Dateinamen durch ein Nullzeichen, anstelle von einem Zeilenumbruch terminiert, sodass auch Dateien deren Namen einen Zeilenumbruch enthalten archiviert werden können. Diese Option kann mit allen Modi verwendet werden.
-a - Zugriffszeit zurücksetzen
Die Option -a setzt die Zugriffszeit von Dateien nach dem Lesen wieder auf ihren ursprünglichen Stand zurück.
-A - Bestehendes Archiv ergänzen
Mit der Option -A können Dateien einem bestehenden Archiv hinzufügt werden. Die Archivdatei muss entweder mit der -o oder der -F Option spezifiziert werden. Die Option funktioniert lediglich im Create-Modus.
-d - Führende Verzeichnisse erstellen
Wird die Option -d verwendet, so erstellt cpio bei Bedarf führende Verzeichnisse der angegebenen Pfade, falls diese nicht bereits existieren. Die Option kann lediglich mit dem Extract- und Pass-Through-Mode verwendet werden.
-D - Verzeichnis wechseln
Mit -D wird vor der Durchführung jeglicher Operation in das angegebene Verzeichnis gewechselt. Die Option kann mit allen Modi verwendet werden.
-f - Muster negieren
Die Option wird mit dem Extract-Modus verwendet und führt dazu, dass nur solche Dateien extrahiert werden, die nicht mit dem angegebenen Muster übereinstimmen.
-F - Archiv spezifizieren
Mithilfe von -F kann ein Archiv spezifiziert werden, welches anstelle des Standard-Input bzw. Standard-Output verwendet werden soll. Die Option kann mit dem Create- und Extract-Modus verwendet werden.
-m - Zeitstempel erhalten
Durch den Einsatz von -m werden die Zeitstempel bei dem Kopieren von Dateien erhalten. Wird mit dem Extract- und Pass-Through-Modus verwendet.
--no-preserve-owners - Besitzer erhalten
Mit der Option --no-preserve-owners wird der Besitzer der extrahierten Dateien nicht verändert, sondern bei dem Benutzer belassen, welcher sie extrahiert. Die Option ist Standard bei nicht-Root-Benutzern und kann sowohl im Extract- als auch im Pass-Through-Modus verwendet werden.
-O - Ausgabearchiv spezifizieren
Die Option -O ermöglicht es, ein Archiv zu spezifizieren, welches anstelle des Standard-Output stdout bei dem Create-Modus eingesetzt wird.
-r - Dateien umbenennen
Mit -r können Dateien beim Extrahieren interaktiv umbenannt werden.
-R - Besitzer spezifizieren
Die Option -R kann ausschließlich vom Superuser verwendet werden und ermöglicht es, den Besitzer aller erstellten Dateien auf den spezifizierten Benutzer zu setzen. Im Create-Modus werden die gegebenen Besitzer-Informationen im Archiv gespeichert.
Übergeben werden kann entweder nur ein Benutzername oder ein Benutzer- und Gruppenname - separiert durch einen Doppelpunkt ":" - oder aber nur ein Gruppenname, welcher dann von einem Doppelpunkt angeführt wird.
cpio -R hellberg
cpio -R bibo:hedv
cpio -R :hedv
Die Argumente werden zunächst in den jeweiligen Systemtabellen gesucht. Wird ein Teil nicht gefunden, so wird dieser als numerische UID oder GID behandelt, sofern er ausschließlich aus Dezimalziffern besteht. Um eine Suche in den Systemtabellen zu verhindern und die Behandlung als UID bzw. GID zu erzwingen, wird jeweils ein Pluszeichen "+" als Prefix hinzugefügt.
cpio -R +1000
cpio -R +1001:+1001
cpio -R :+1002
Wird schließlich ein Doppelpunkt ":" angegeben, welcher jedoch nicht von einem Gruppennamen oder einer GID gefolgt wird, so verwendet cpio die Login-Gruppe des gegebenen Benutzers.
cpio -R hellberg:
-t - Inhalte ausgeben
Die Option -t kann im Extract-Modus verwendet werden, um eine Tabelle mit den Inhalten eines Archivs auszugeben. Die Verwendung ohne zusätzlichen Modus ist möglich, da hierbei stets -i (Extract) impliziert wird.
--to-stdout - Standard-Output
Die Ausgabe in den Standard-Output kann beim Extrahieren mit der Option --to-stdout erreicht werden.
-u - Dateien ersetzen
Wird die Option -u verwendet, so ersetzen die Modi Extract und Pass-Through bereits existierende neuere Dateien ohne Rückfrage auch durch ältere Dateien.
-v - Ausführliche Ausgabe
Schließlich kann mit -v eine ausführliche Ausgabe der verarbeiteten Dateien erreicht werden. Durch Zusatz der Option -t wird zudem eine Ausgabe der Inhalte erzeugt, ähnlich wie sie bei dem Befehl "ls -l" ausgeben wird.
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!