Der Befehl cpio

cpio-featured

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!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: