cpio ist ein Archivierungsprogramm und Dateiformat aus dem Unix-Umfeld, das in seiner grundlegenden Funktionsweise (nicht jedoch bei der Kommandozeilenschnittstelle) dem Kommando tar ähnelt. Die Abkürzung cpio steht für „copy in, copy out“. Mit cpio können Dateien sequentiell in eine Archivdatei oder auf Magnetband geschrieben werden. cpio-Dateien werden oft mit der Dateiendung .cpio versehen. Ebenso wie tar-Dateien sind cpio-Archive größer als die Summe der im Archiv enthaltenen Einzeldateien, so dass unter Umständen eine Datenkomprimierung sinnvoll ist. Zur Komprimierung wird unter Unix in der Regel compress, gzip oder bzip2 verwendet.

Die SVR4-Version des cpio-Kommandos kann neben verschiedenen cpio-Formaten, auch tar-Archivformate verwenden. GNU-cpio hat dieses Verhalten kopiert. Ein Programm, das ein dem cpio-Dateiformat ähnliches Format verwendet, ist afio. Von afio erzeugte Archive können aber wegen der Unterschiede im Archivformat, die meist auch erst in der Mitte dieser Archive aufzufinden sind, nicht immer von cpio gelesen werden.

POSIX-Standard

Bearbeiten

cpio ist im POSIX.1-1988-Standard enthalten. Aus späteren Versionen, ab POSIX.1-2001, wurde er aufgrund seiner maximalen Dateigröße von 4 GB / 2 GB (beim nicht standardisierten SVR4-Format) bzw. 8 GB (beim POSIX-cpio-Format) entfernt. Diese Entscheidung wurde auch davon beeinflusst, dass das cpio-Archiv-Format nicht erweiterbar ist ohne ein komplett neues Format aus der cpio-Familie zu erzeugen. Das neue POSIX-Kommando pax unterstützt jedoch sowohl das tar- als auch das cpio-Format. Der Name pax (lateinisch für „Frieden“) wurde als Ergebnis der sogenannten Tar-Wars (die um das Jahr 1992 geführt wurden[1]) gewählt, um Frieden zwischen den beiden rivalisierenden Programmen cpio und tar zu schaffen.

Funktionsweise und Beispielaufrufe

Bearbeiten

cpio verfügt über vier Grundfunktionen, welche über die Optionen -o („Copy-Out-Modus“, Erzeugen eines Archivs), -i („Copy-In-Modus“, Extrahieren aus einem Archiv), -p („Copy-Pass-Modus“, Kopieren von Verzeichnisbäumen) und -t („List-Modus“) angegeben werden. cpio arbeitet grundsätzlich wie andere Unix-Filter, d. h., es erwartet seine Argumente aus dem Eingabe-Datenstrom und schickt seine Ergebnisse an den Ausgabe-Datenstrom.

Erzeugen einer cpio-Datei, welche die Dateien des aktuellen Verzeichnisses enthält:

ls | cpio -o > verzeichnis.cpio

Erzeugen einer cpio-Datei, welche die Dateien und Unterverzeichnisse des aktuellen Verzeichnisses enthält:

find . -depth -print | cpio -o > verzeichnis.cpio

Wiederherstellen von Dateien aus einem cpio-Archiv:

cpio -i < archiv.cpio

Auflisten der im Archiv enthaltenen Dateien, ohne diese zu extrahieren:

cpio -it < archiv.cpio

Kopieren des aktuellen Verzeichnisses einschließlich aller Unterverzeichnisse nach /tmp/verzeichnis (entspricht in etwa cp -r * /tmp/verzeichnis):

find . -print -depth | cpio -pd /tmp/verzeichnis

Vergleich zwischen cpio und tar

Bearbeiten

Von den beiden Unix-Kommandos cpio und tar ist tar bekannter und weiter verbreitet und unterliegt nicht der Größenbeschränkung für Archivdateien von 4 GB (2 GB bei Implementierungen mit signed int für die Dateigröße) für das SVr4-Format bzw. 8 GB für das POSIX-Format. Von den Verfechtern von cpio wird angeführt, es gebe beim cpio-Format in der Regel keine Kompatibilitätsprobleme zwischen verschiedenen Unix-Plattformen. Bei näherer Betrachtung ergibt sich das jedoch als Fehlannahme, denn es gibt vier zueinander völlig inkompatible cpio-Formate und zusätzlich Probleme mit der Byte-Reihenfolge. Einen weiteren Vergleich findet man im GNU-tar-Handbuch.[2] Dort findet man auch einiges zu den Formaten,[3] die teilweise von GNU-cpio unterstützt werden,[4] diese Angaben sind aber teilweise nur auf die GNU-Implementierung anzuwenden, die nicht vollständig kompatibel zum UNIX-cpio ist.

Die originale cpio-Implementierung verfügt über eine nichtdokumentierte Eigenschaft und verhält sich ähnlich wie das install-Programm. Dadurch lassen sich mit cpio Dateien über gerade benutzte Programmdateien und Bibliotheken extrahieren, ohne dass es dadurch zu Programmabstürzen kommt.

Da die cpio-Formate so definiert wurden, dass jede Erweiterung zu einem völlig neuen, inkompatiblen Archivformat führt, wurde das POSIX-cpio-Format im Jahr 2001 mit POSIX.1-2001 als nicht zukunftsorientiert bezeichnet. Das aktuelle bevorzugte POSIX-Archiv-Format heißt pax und ist eine beliebig erweiterbare Variante des tar-Formats.

Verwendung

Bearbeiten

Heutzutage findet cpio hauptsächlich Verwendung bei einem initramfs, dem Nachfolger von initrd. Auch rpm-Pakete verwenden intern das cpio-Format.

Siehe auch

Bearbeiten

Einzelnachweise

Bearbeiten
  1. http://www.opengroup.org/onlinepubs/9699919799/utilities/pax.html
  2. http://www.gnu.org/software/tar/manual/html_section/cpio.html#SEC144
  3. http://www.gnu.org/software/tar/manual/html_section/Formats.html
  4. http://www.gnu.org/software/cpio/manual/cpio.html
Bearbeiten