cpio
Bezeichnung
cpio - kopiert Dateien in und aus Archiven
cpio nutzt die Ergebnisse des ls oder find Befehls, um eine cpio-Datei zu erzeugen. cpio macht keine Komprimierung, aber Archive werden oftmals mit gzip oder anderen Kompressionsprogrammen komprimiert.
cpio hat drei grundlegende Arbeitsmodus:
- copy-out mode – die Dateien werden in ein Archiv kopiert. Um Dateinamenslisten zu erzeugen, benutzt man den find oder ls Befehl.
- copy-in mode – die Daten vom Archiv werden in das Dateisystem kopiert.
- copy-pass mode – die Dateien werden von einem Verzeichnis in ein anderes kopiert.
Übersicht
cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--format=format] [--message=message][--null] [--reset-access-time] [--verbose] [--dot] [--append] [--block-size=blocks] [--dereference] [--io-size=bytes] [--rsh-command=command] [--help] [--version] < name-list [> archive]
Optionen
Option | Beschreibung |
---|---|
-0, --null | Im copy-out und copy-pass Modus wird die Liste der Dateinamen durch ein Null-Zeichen statt durch einen Zeilentrenner getrennt. Damit können Dateien mit archiviert werden, die Zeilentrenner im Dateinamen haben. GNU-find ist ein Programm, das eine Liste von Dateinamen erzeugen kann, die durch Null-Zeichen getrennt sind |
-a, --reset-access-time | Die Zugriffszeitmarke der Dateien wird nach der Archivierung wiederhergestellt, so daß nicht spürbar ist, daß die Dateien gerade gelesen wurden |
-A, --append | Die Ausgabe wird an ein bestehendes Archiv angehängt. Nur gültig im copy-out Modus. Das Archiv muß eine reguläre Datei sein, die mit der -O oder -F (--file) Option angegeben wurde |
-b, --swap | Im copy-in Modus wird die Bytereihenfolge umgedreht. Damit können Daten zwischen Maschinen mit 32-Bit big-endian und little-endian Formaten ausgetauscht werden |
-B | Die IO-Blockgröße wird auf 5120 Bytes eingestellt. Standardmäßig beträgt sie 512 Byte |
-block-size=BLOCK-SIZE | Setzt die IO-Blockgröße auf BLOCK-SIZE mal 512 Byte |
-c | Das alte ASCII Format wird benutzt |
-C IO-SIZE, --io-size=IO-SIZE | Setzt die IO-Blockgröße auf IO-SIZE Byte |
-d, --make-directories | Führende Verzeichnisse werden erstellt, wenn nötig |
-E FILE, --pattern-file=FILE | Im copy-in Modus werden zusätzliche Muster für zu extrahierende oder aufzulistende Dateien aus der angegebenen Datei gelesen |
-f, --nonmatching | Kopiert nur Dateien, die nicht auf das angegebene Muster passen |
-F, --file=archive | Das Archiv wird nicht auf die Standard-Ausgabe geschrieben sondern in den angegebenen Dateinamen. Um auf ein Bandlaufwerk (oder eine Datei) eines anderen Rechners zuzugreifen, kann dem Dateinamen ein Hostname: vorangestellt werden. Der Hostname seinerseits kann einen Usernamen und ein @ Zeichen am Anfang besitzen um das remote-Drive unter der entsprechenden Userkennung zu benutzen. Typischerweise muß dazu ein Eintrag in der ~/.rhosts-Datei auf dem Fremdrechner vorliegen |
-force-local | Auch wenn der Archivdateiname (mit -F, -I oder -O angegeben) einen Doppelpunkt enthält wird er als lokaler Dateinamen interpretiert |
-H FORMAT, --format=FORMAT | Das angegebene Format wird benutzt. Gültige Formate sind:
bin:Das obsolete Binärformat (Voreinstellung im copy-out Modus). odc:Das alte (POSIX.1) portable Format. newc:Das neue (SVR4) portable Format, das Dateisysteme mit mehr als 65536 Inodes unterstützt. crc:Das neue (SVR4) portable Format mit einer Prüfsumme. tar:Das alte tar-Format. ustar:Das POSIX.1 tar-Format. Erkennt auch GNU-tar, das ähnlich aber nicht identisch ist. hpbin:Das obsolete Binärformat des HPUX-cpio. hpodc:Das portable HPUX cpio-Format. |
-i, --extract | Schaltet den copy-in Modus ein |
-I archive | Gibt den Archiv-Dateinamen an, der statt der Standard-Eingabe benutzt werden soll. Für Zugriffe auf entfernte Rechner gilt das Selbe wie bei der -F Option |
-k | Ignoriert |
-l, --link | Dateien werden gelinkt statt kopiert, wo immer das möglich ist |
-L, --dereference | Symbolische Links werden dereferenziert (Die Dateien, auf die der Link verweist werden kopiert, anstatt den Link zu kopieren) |
-m, --preserve-modification-time | Die Modification-Time wird erhalten, wenn Dateien erstellt werden |
-M MESSAGE, --message=MESSAGE | Die angegebene Message wird ausgegeben, wenn das Ende eines Backup-Mediums erreicht ist. Die Meldung kann also die Aufforderung an den User enthalten, das Band (oder die Diskette) zu wechseln. Enthält die Nachricht ein %d, so wird das durch die aktuelle Volume-Nummer (beginnend mit 1) ersetzt |
-n, --numeric-uid-gid | Bei der "geschwätzigen Ausgabe" eines Inhaltsverzeichnisses werden die User- und GruppenIDs statt der User- und Gruppennamen ausgegeben. Das funktioniert insbesondere auch bei tar-Archiven |
--no-absolute-filenames | Im copy-in Modus werden alle Dateien relativ zum aktuellen Verzeichnis erstellt, auch wenn sie mit einem absoluten Pfadnamen im Archiv stehen |
--no-preserve-owner | Im copy-in und copy-pass Modus werden die Eigentümerschaft der Dateien nicht verändert. Sie behalten also die Eigentümer der User, die sie ausgepackt haben. Das ist die Voreinstellung für Normaluser |
-o, --create | Schaltet den copy-out Modus ein |
-O archive | Das Archiv wird in die angegebene Datei geschrieben, statt auf die Standard-Ausgabe. Für Zugriffe auf entfernte Rechner gilt das Selbe wie bei der -F Option |
--only-verify-crc | Wenn ein Archiv im crc-Format im copy-in Modus gelesen wird, so werden nur die Prüfsummen überprüft, anstatt die Dateien tatsächlich auszupacken |
-p, --pass-through | Schaltet den copy-pass Modus ein |
-quiet | Keine Ausgabe der Anzahl geschriebener Blöcke |
-r, --rename | Dateien werden interaktiv umbenannt |
-R [user][:.][group], --owner [user][:.][group] | Im copy-out und copy-pass Modus werden die Eigentümerschaft und Gruppenmitgliedschaft der zu erzeugenden Dateien auf die angegebenen Werte gesetzt. Wird die Gruppe weggelassen, aber der Doppelpunkt angegeben, so wird die Login-Gruppe des entsprechenden Users verwendet. Diese Option kann nur vom Superuser (root) verwendet werden |
--rsh-command=COMMAND | Bei der Zusammenarbeit mit mt wird mitgeteilt, welches Kommando mt benutzen soll um mit entfernten Geräten zu arbeiten, anstelle der voreingestellten Kommandos /usr/bin/ssh, /usr/bin/rsh oder dem Inhalt der Umgebungsvariable MT_RSH |
--sparse | Im copy-in und copy-pass Modus werden Dateien, die große Blöcke mit Nullzeichen enthalten als Sparse-Dateien geschrieben |
-s, --swap-bytes | Im copy-in Modus werden die Bytes jedes Halbwortes (2 Byte) vertauscht |
-S, --swap-halfwords | Im copy-in Modus werden die Halbwörter jedes Wortes (4 Byte) vertauscht |
-t, --list | Ausgabe eines Inhaltsverzeichnisses |
-u, --unconditional | Alle Dateien, werden ersetzt, ohne zu fragen |
-v, --verbose | Geschwätzige Ausgabe |
-V --dot | Ein Punkt (.) wird für jede bearbeitete Datei ausgegeben |
-version | Gibt die Versionsnummer von cpio aus und beendet dann das Programm |
Backup mit cpio
cpio erzeugt und verwaltet Dateiarchive verschiedener Formate
cpio {-o|-create} [-0acvABLV] [-C Anzahl] [-H Format] [-M Nachricht] [-O [[User@]Host:]Datei] [-F [[User@]Host:]Datei] [-file=[[User@]Host:]Datei] [-format=Format] [-message=Nachricht] [-null] [-reset-access-time] [-verbose] [-dot] [-append] [-block-size=Größe] [-dereference] [-io-size=Größe] [-force-local] [-help] [-version] < Liste [> Datei] cpio {-i|-extract} [-bcdfmnrtsuvBSV] [-C Anzahl] [-E Datei] [-H Format] [-M Nachricht] [-R [User][:.][Gruppe]] [-I [[User@]Host:]Datei] [-F [[User@]Host:]Datei] [-file=[[User@]Host:]Datei] [-make-directories] [-nonmatching] [-preserve-modification-time] [-numeric-uid-gid] [-rename] [-list] [-swap-bytes] [-swap] [-dot] [-unconditional] [-verbose] [-block-size=Anzahl] [-swap-halfwords] [-io-size=Anzahl] [-pattern-file=Datei] [-format=Format] [-owner=[user][:.][Gruppe]] [-no-preserve-owner] [-message=Nachricht] [-force-local] [-help] [-version] [Muster...] [< Datei] cpio {-p|-pass-through} [-0adlmuvLV] [-R [user][:.][group]] [-null] [-reset-access-time] [-make-directories] [-link] [-preserve-modification-time] [-unconditional] [-verbose] [-dereference] [-owner=[User][:.][Gruppe]] [-dot] [-no-preserve-owner] [-help] [-version] Zielverzeichnis < Liste
cpio ist ein Tool zur Erzeugung und Verwaltung von Dateiarchiven. In einem Dateiarchiv werden mehrere Dateien mit ihren Verzeichnissen und allen Verwaltungsinformationen, wie Eigentümer, Zugriffsrechte Erzeugungszeit etc., zu einer einzigen Datei oder zu einem Datenstrom zusammengefaßt. cpio erzeugt und verarbeitet eine ganze Reihe verschiedener Archivformate. Deshalb ist es besonders gut für den Austausch von Datenbeständen zwischen unterschiedlichen Rechnern geeignet.
cpio kann in drei verschiedenen Modi arbeiten.
Im copy-out Modus werden Daten aus dem Dateisystem in ein Archiv, zum Beispiel auf ein Magnetband, geschrieben. Die Namen der zu archivierenden Dateien liest cpio Zeilenweise von der Standardeingabe. Eine gängige Methode zur Erzeugung einer geeigneten Liste von Dateinamen ist die Verbindung des Ausgabekanals von [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node54.html#find find] mit dem Eingabekanal von cpio durch eine Pipeline.
Im copy-in Modus werden die Daten vom Archiv in das Dateisystem kopiert. In diesem Modus liest cpio die archivierten Daten von der Standardeingabe. Wenn nicht das gesamte Archiv ausgepackt werden soll, können die gewünschen Dateien durch reguläre Ausdrücke nach den Optionen auf der Kommandozeile angegeben werden.
Im copy-pass Modus werden die Daten wie bei copy-out aus dem Dateisystem gelesen und sofort wieder in ein anderes Verzeichnis geschrieben, ohne daß zwischendurch ein Archiv erzeugt wird. Die Namen der zu kopierenden Dateien werden wie bei copy-out von der Standardeingabe gelesen, der Name des Zielverzeichnisses muß in der Kommandozeile nach den Optionen angegeben werden.
Optionen
-a | veranlaßt cpio, nach dem copy-out die letzte Zugriffszeit vor dem Lesen zurückzusetzen |
-A | die Dateien werden an ein existierendes Archiv angehängt (nur im copy-out Modus auf Blockgeräten möglich) |
-b | veranlaßt cpio, beim extrahieren von Daten die Bytes von Datenwörtern und Halbwörtern zu tauschen |
-B | setzt die Blockgröße auf 5120 Bytes anstelle der voreingestellten 512 Bytes |
-block-size=Anzahl | setzt die Blockgröße auf Anzahlx512 Bytes |
-c | veranlaßt tar, das alte, portable ASCII Archivformat zu benutzen |
-C Größe | setzt die Blockgröße (Größe in Bytes) |
-d | veranlaßt tar, beim Auspacken eines Archivs die notwendigen Verzeichnisse zu erzeugen, wenn sie noch nicht existieren |
-E Datei | die Liste oder die regulären Ausdrücke zur Bestimmung der zu kopierenden Dateien wird aus der angegebenen Datei und nicht von der Standardeingabe gelesen |
-f | verkehrt die Wirkung der Listeoder des Musters ins Gegenteil; es werden die Dateien kopiert, die nicht auf das Muster passen |
-F [[User@ ]Host:]Datei | veranlaßt tar, die angegebene Datei als Archivdatei zu benutzen |
-force-local | erzwingt die Interpretation eines Archivnamens bei den Optionen -F, -I und -O als lokale Datei, auch wenn in dem Dateinamen ein Doppelpunkt vorkommt |
-H Format | bestimmt eines der folgenden Archivformate (bei copy-in werden die unterstützten Formate automatisch erkannt):
bin (Voreinstellung bei copy-out) veraltetes Binärformat odc das alte, portable POSIX-1 Format newc das neue, portable SVR4 Format; für große Dateisysteme mit mehr als 65536 I-Nodes geeignet crc wie newc mit zusätzlicher Prüfsumme tar das alte tar Format ustar das POSIX-1 tar Format und das GNU-tar Format hpbin das alte Binärformat des HPUX-cpio hpodc das portable POSIX-1 Format von HPUX; unterscheidet sich in der Speicherung von Gerätedateien |
-i | schaltet cpio in den copy-in Modus; die in der Liste angegebenen Dateien werden aus dem Archiv in das System hinein kopiert |
-I [[User@ ]Host:]Datei | verbindet die Standardeingabe von cpio mit der Datei; gegebenenfalls wird die Verbindung zum Rechner Host hergestellt und die Archivierung mit den Rechten von User ausgeführt |
-k | ohne Funktion |
-l | wenn möglich werden Dateien nicht kopiert sondern symbolische Links erzeugt |
-L | im copy-out oder -pass Modus werden nicht die symbolischen Links kopiert, sondern die referenzierten Dateien |
-m | das Datum der letzten Änderung bleibt beim Kopieren unverändert |
-M Nachricht | veranlaßt cpio, die Nachricht auf die Standardfehlerausgabe zu schreiben, wenn das Backup-Medium voll ist; der Platzhalter `%d' kann benutzt werden, um in der Nachricht die laufende Nummer des aktuellen Bandes auszugeben (Start bei 1) |
-n | die User- und Gruppen-ID der archivierten Dateien wird beim Listing in numerischer Form ausgegeben |
-no-preserve-owner | (Voreinstellung für User ohne root-Privilegien) beim Extrahieren von Dateien aus dem Archiv oder beim Kopieren wird die archivierte User- und Gruppen-ID nicht auf die extrahierten Dateien übertragen |
-o | schaltet cpio in den copy-out Modus; die in der Liste angegebenen Dateien werden aus dem System heraus kopiert und ein Archiv angelegt oder erweitert |
-O [[User@ ]Host:]Datei | verbindet die Standardausgabe von cpio mit der Datei; gegebenenfalls wird die Verbindung zum Rechner Host hergestellt und die Archivierung mit den Rechten von User ausgefüチhrt |
-p | schaltet cpio in den copy-pass Modus |
-r | erlaubt dem Anwender die interaktive Umbenennung von Dateien im copy-in Modus |
-R [User ][:.][Gruppe ] | die entsprechenden Benutzerrechte vorausgesetzt, werden Eigentümer und/oder Gruppe der Dateien beim Extrahieren geändert |
-s | die Bytes eines Halbwortes werden beim Extrahieren der Daten vertauscht |
-S | die Halbworte eines Wortes werden beim Extrahieren der Daten vertauscht |
-t | zeigt den Inhalt des Archives an |
-u | beim Extrahieren werden Dateien im Dateisystem ohne Nachfrage durch gleichnamige Dateien aus dem Archiv überschrieben, auch wenn diese älter sind |
-v | zusammen mit -t wird ein ausführliches Listing des Archivinhalts ausgegeben |
-V | für jede bearbeitete Datei wird ein Punkt in den Standardfehlerkanal geschrieben |
-0 | die Elemente der Liste können durch Nullbytes anstelle der normalerweise erwarteten NEWLINE übergeben werden |
cpio (cpio in/out) besitzt einen ähnlichen Funktionsumfang wie das zuvor beschriebene Kommando tar, so dass wohl eher die Vorliebe des Benutzers das eine oder andere Werkzeug favorisiert. Ein Vorteil wäre dennoch zu nennen: cpio verzweifelt nicht an beschädigten Archiven und vermag zumindest den unversehrten Teil komplett wieder herzustellen.
cpio MODUS [ OPTIONEN ]
cpio kennt drei Betriebsarten: * copy in zum Extrahieren von Dateien aus einem Archiv: Option -i
- copy out zum Erzeugen eines Archivs: Option -o
- pass througth als Kombination aus den obigen Modi erlaubt das Kopieren ganzer Verzeichnisbäume: Option -p
Volles und inkrementelles Backup
Um Dateien in einem cpio-Archiv zu speichern, müssen deren Namen dem Kommando mitgeteilt werden. cpio erwartet allerdings, dass jeder Dateiname auf einer neuen Zeile erscheint. Deshalb füttert man das Kommando am einfachsten über eine Pipe:
user@sonne> ls *.txt | cpio -o > /dev/fd0
11 blocks
Das Beispiel sichert alle auf ".txt" endenden Dateien des aktuellen Verzeichnisses auf die Diskette. Die Ausgabeumleitung ist wichtig, da sonst die Dateiinhalte auf dem Bildschirm landen würden.
Hiermit kennen Sie nun das Prinzip des Backups mit cpio ; zur Implementierung eines inkrementellen Backups bietet sich die Nutzung der Möglichkeiten des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Datei_%26_Verzeichnis#find_-_Dateien_suchen find ]an, mit dem nach den verschiedensten Kriterien nach Dateien gefahndet werden kann. So archiviert der Aufruf von:
user@sonne> find /etc -maxdepth 2 -depth | cpio -o > /dev/fd0
319 blocks
alle Dateien aus dem Verzeichnis /etc, wobei alle Unterverzeichnisse, nicht aber die darin befindlichen Unterverzeichnisse berücksichtigt werden. Die Option »-depth« von find bewirkt, dass der Name eines Verzeichnisses selbst erst nach den enthaltenden Daten ausgegeben wird. Bei eventuellem Zurückschreiben der Daten, wird nun der häufige Fehler verhindert, dass ein Verzeichnis mit »falschen« Zugriffsrechten erzeugt wurde und anschließend das Übertragen der Daten in dieses scheitert. Durch die hier gewählte Reihenfolge wird mit der ersten Datei aus dem Verzeichnis dieses mit den korrekten Rechten gesetzt (mit Rechten, die das Schreiben der Datei ermöglichen).
Im Sinne eines inkrementellen Backups ist aber sicher die Suche nach Dateien, die innerhalb einer bestimmten Zeitspanne geändert wurden, interessant. Der nächste Aufruf findet alle Dateien des Verzeichnisses /etc, deren Modifikationszeit nicht älter als 5 Tage ist:
# find /etc -mtime -5 -maxdepth 2 -depth | cpio -o > /dev/fd0
112 blocks
Überprüfung des Archives
Um sich eine Liste der Dateien eines Archives zu betrachten, ruft man das Kommando im »copy in«-Modus auf:
user@sonne> cpio -itvI /dev/fd0
-rw-r--r-- 1 root root 270 Aug 15 07:07 /etc/mtab -rw-r--r-- 1 root root 2510 Aug 10 13:49 /etc/logfiles -rw-r--r-- 1 root root 37911 Aug 15 07:06 /etc/ld.so.cache -rw-r--r-- 1 root root 271 Aug 10 15:27 /etc/hosts.allow -rw-r--r-- 1 root root 5762 Aug 10 15:27 /etc/inetd.conf -rw-r--r-- 1 root root 3349 Aug 14 12:18 /etc/printcap -rw------- 1 root root 60 Aug 15 07:06 /etc/ioctl.save -rw-r--r-- 1 root root 3799 Aug 15 09:10 /etc/XF86Config -rw------- 1 root root 512 Aug 15 07:07 /etc/ssh_random_seed -rw-r--r-- 1 root root 3309 Aug 14 12:18 /etc/printcap.old -rw-rw---- 1 lp lp 1244 Aug 14 12:05 /etc/apsfilterrc.ljet4 -rw-rw---- 1 lp lp 1261 Aug 14 12:37 /etc/apsfilterrc.lj4dith -rw-r--r-- 1 root root 88 Aug 15 09:38 /etc/dumpdates drwxr-xr-x 30 root root 0 Aug 15 08:28 /etc 112 blocks
Die Option -t bewirkt die Anzeige des Archivinhalts und verhindert das Entpacken. -v bringt die Rechte der Dateien zum Vorschein und -I Archiv lässt cpio die Daten aus dem Archiv anstatt von der Standardeingabe lesen.
Ein Vergleich der Dateien im Archiv mit den Dateien im Verzeichnisbaum ist nicht direkt möglich. Hier kann nur ein Entpacken der Daten in ein separates Verzeichnis mit anschließendem Dateivergleich (zum Beispiel mit diff) helfen.
Recovery
Schließlich möchte man die Daten auch wieder zurückschreiben können. Hierzu ist cpio im »copy-in«-Modus wie folgt zu starten:
# cpio -id /etc/mtab < /dev/fd0
cpio: /etc/mtab not created: newer or same age version exists 112 blocks
Im Beispiel stellt cpio nur fest, dass die gewünschte Datei nicht älter ist als die im Archiv enthaltene Version. Also tut das Kommando nichts. -d erzwingt das Anlegen von Verzeichnissen, falls diese nicht schon existieren, die nachfolgende Angabe von zu rekonstruierenden Dateien kann entfallen, dann werden alle Dateien aus dem Archiv extrahiert.