cpio ist ein weiteres Programm zur Datensicherung. Es ist sehr
flexibel, was die Bestimmung der Dateien angeht, die zu sichern sind, und der
Dateien, die wieder zurückzuholen sind. cpio hat eine etwas ungewohnte
Syntax, da es die zu sichernden Dateien dem Standardeingabekanal entnimmt.
cpio behält in der Standardversion weder Uhrzeit noch Eigner oder
Rechte der Dateien. Per Option kann allerdings für die gesicherte Datei der
Originalzeitpunkt nach der Rücksicherung wiederhergestellt werden.
Die Gerätedateien und andere spezielle Dateien lassen sich nur mit
Administratorrechten und entsprechend gesetzter Option sichern bzw.
wiederherstellen.
cpio entnimmt die Namen der zu sichernden Dateien der Standardeingabe.
Dabei muss jeder Dateiname in einer eigenen Zeile stehen. Damit steht der
Befehl cpio typischerweise an zweiter Stelle in einer Pipe und hat
beim Sichern die Option -o . An erster Stelle kann jeder beliebiger
UNIX-Befehl stehen, der eine Dateiliste erzeugt. Das kann ls
sein, dann werden die Dateien des aktuellen Verzeichnisses gesichert,
allerdings nicht dessen Unterverzeichnisse.
Will man alle Dateien im Unterverzeichnis sichern, stellt man den Befehl
find voran. Durch dessen flexible Möglichkeiten kann sehr fein
selektiert werden, welche Dateien gesichert werden sollen.
Bei ganz besonders kuriosen Dateizusammenstellungen kann man die Dateiliste
auch in eine Datei stellen und dessen Inhalt mit dem Befehl cat
ausgeben.
Das Ergebnis, also die Ausgabe des cpio , geht auf stdout und
wird durch die Ausgabeumlenkung (>) auf das Sicherungsdevice oder die Archivdatei
umgeleitet. Wieder soll das Verzeichnis /home mit allen
Unterverzeichnissen gesichert werden:
hpsrv# cd /home
hpsrv# find . -print | cpio -o >/dev/rmt/0mb
(Using tape drive with immediate report mode enabled (reel #1).)
1870 blocks
hpsrv#
Dieser Befehl sichert alle Dateien unterhalb des aktuellen Verzeichnisses auf
das Bandgerät. Nun soll betrachtet werden, was alles auf dem Band vorhanden
ist. Dazu wird die Option -it verwendet. Das Sicherungsgerät wird
als Standardeingabe verwendet:
hpsrv# cpio -it </dev/rmt/0mb
.
lost+found
tacoss
willemer
notes
notes/.sh_history
notes/.profile
notes/server
notes/.Xpdefaults
notes/ console.tmp
rossow
rossow/.sh_history
rossow/.rhosts
arnold
arnold/.cshrc
arnold/.exrc
arnold/.login
arnold/.profile
arnold/.sh_history
arnold/.rhosts
arnold/bad.tif
arnold/a.out
arnold/hello.cpp
arnold/.history
1870 blocks
hpsrv#
Um die ganze Sicherung zurückzuholen, wird fast die gleiche Befehlskombination
verwendet, wie beim Auslesen des Verzeichnisses. -i bewirkt das
Lesen der Sicherung, und -d bewirkt, dass auch Verzeichnisse erstellt
werden. Das Auslesen geschieht im aktuellen Verzeichnis. Vor dem Auspacken
muss also in das Zielverzeichnis gewechselt werden.
hpsrv# cpio -id </dev/rmt/0mb
1870 blocks
hpsrv#
Im letzten Beispiel soll nun als einzige Datei hello.cpp vom
Band geholt werden. An dieser Stelle zeigt cpio seine große
Flexibilität.
Im Anschluss an die Option wird in Hochkommata das Muster der gesuchten
Dateienamen angegeben. Dabei können Wildcards verwendet werden.
hpsrv# rm -r *
hpsrv# cpio -id '*hello*' </dev/rmt/0mb
1870 blocks
hpsrv# ll
total 2
drwxrwxrwx 2 arnold users 1024 Dec 31 01:46 arnold
hpsrv# ll arnold
total 2
-rw-rw-rw- 1 arnold users 64 Dec 31 01:46 hello.cpp
hpsrv#
Je nach Version des cpio gibt es unterschiedliche Optionen. Genaueres
findet sich in den Manpages. Die hier genannten Optionen dürften in jeder
Version zu finden sein:
- [m] Behält die Modifikationszeit des gesicherten Originals bei.
Wirkt nicht auf Verzeichnisse.
- [d] Erzeugt beim Rücksichern die notwendigen Verzeichnisse.
- [u] Ersetzt durch die Rücksicherung auch eine neuere Datei als die,
die im Archiv steht.
- [x] Sichert auch Gerätedateien und andere spezielle Dateien.
Auch mit dem Befehl cpio lassen sich komplette Verzeichnisse kopieren.
Dabei ist zu beachten, dass alte Versionen von cpio
bei der Kopie die Dateieigenschaften nicht erhalten können:
find Quellverzeichnis -depth -print | cpio -pdm Zielverzeichnis
In der Praxis wird man in das Quellverzeichnis wechseln und als Parameter
einen Punkt angeben. Ansonsten wird der Quellverzeichnisname mit übertragen
und an das Zielverzeichnis angehängt.
|