Druckversion

Nutzerkommandos - Archivierung

Einleitung Weiter

Werkzeuge zur Archivierung ermöglichen in erster Linie das »Packen« mehrerer Dateien in eine einzige Datei. Darüber hinaus bestehen Möglichkeiten, die Daten zu komprimieren. Damit verringert sich nicht nur die Netzlast bei eventueller Datenübertragung, sondern es spart so manchen Platz auf der heimischen Festplatte. Bei heutigen Festplattenkapazitäten mag dies überflüssig anmuten, aber so manche Datei lässt sich in gepackter Form noch auf eine einzelne Diskette platzieren.

Zur Demonstration der Güte der einzelnen Werkzeuge werden die Dateien der Linuxfibel (eine frühe Version) mit tar archiviert und anschließend mittels gebräuchlicher »Kompressoren« gepackt. Die dabei berechneten Kompressionsraten dienen einzig der Veranschaulichung, letztlich hängen sie stark von der Art der Dateien ab. Die hier getroffenen Aussagen gelten im Wesentlichen für Textdateien.

Die verwendete Archivdatei »Linuxfibel.tar« ist ungepackt knapp 2 Megabytes groß (Stand: Ende 2000).

user@sonne> ls -l Linuxfibel.tar
-rw-r--r--   1 user   users     1914880  May 23 14:07  Linuxfibel.tar

Die Liste der unterstützten Archivierer und Komprimierungstool ist unter Linux umfangreicher als es dieser Abschnitt vermitteln kann. Alte Bekannte wie »lharc«, »zoo« oder »unrar« wurden auch zwar Linux portiert, haben es jedoch zu keiner nennenswerten Verbreitung gebracht. Wir kehren ihre Diskussion schlicht und einfach unter den Tisch.

bzip2 - Dateien komprimieren Zurück Anfang Weiter

Aufruf:   bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]

Dieses Programm basiert auf dem Burrows-Wheeler blockorientierten Kompressionsalgorithmus mit Huffman Kodierung und ist derzeit das effektivste Komprimierungsprogramm unter Linux. Allerdings erreichte es bislang nicht die Verbreitung eines »gzip«, obwohl es in keiner Standardinstallation fehlt. Eine Datei wird mit folgendem Befehl komprimiert:

user@sonne> bzip2 Linuxfibel.tar
user@sonne> ls -l Linuxfibel.tar.bz2
-rw-r--r--   1 user   users     772999  May 23 14:07  Linuxfibel.tar.bz2

bzip2 versieht seine komprimierten Dateien mit der Endung ».bz2« und erwartet dieses auch im Falle eines Entpackens. Greifen Sie auf das Kommando »file« zurück, falls sich das Format einer Datei einmal nicht anhand der Endung offenbart.

Um die Kompressionsrate zu berechnen, bemühen wir den Taschenrechner bc

user@sonne> bc -l
bc 1.05
Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
(1 - 772999 / 1914880) * 100
59.63198738302139037500
quit
user@sonne>

Somit wird eine Kompressionsrate von 59.6% erreicht.

Entpackt wird diese Datei mittels

user@sonne> bunzip2 Linuxfibel.tar.bz2

compress - Dateien komprimieren Zurück Anfang Weiter

Aufruf:   compress [ -f ] [ -v ] [ -c ] [ -V ] [ -r ] [ -b bits ] [ name ... ]

Der Komprimierungsklassiker unter UNIX kennzeichnet von ihm gepackte Dateien standardmäßig mit der Endung ».Z«. compress beruht auf einer älteren Version des Lempel-Ziv-Algorithmus. Seine Kompressionsraten sind um einiges geringer als beim de facto Linux-Standardpacker gzip, dennoch existiert das Programm auf jedem UNIX-System.

user@sonne> compress Linuxfibel.tar
user@sonne> ls -l Linuxfibel.tar.Z
-rw-r--r--   1 user   users      1171919  May 23 14:07  Linuxfibel.tar.Z

Die erzielte Kompressionsrate beträgt ganze 38.8%, was nicht mehr ganz dem Stand der Technik entspricht...

Entkomprimiert wird mit dem Kommando uncompress:

user@sonne> uncompress Linuxfibel.tar.Z

cpio - Konvertierung von Archivformaten Zurück Anfang Weiter

Aufruf: cpio -o [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] < name-list [> archive]
cpio -i [-bcdfmnrtsuvBSV] ...
cpio -p [-0adlmuvLV] ...

Mittels cpio (copy in and out) lassen sich aus Dateien und Verzeichnisbäumen »cpio-Archive« erzeugen. Dabei liest cpio die zu archivierenden Dateien nicht von der Kommandozeile, wie etwa »tar«, sondern von der Standardeingabe. Das hört sich zwar kompliziert an, ist es aber keinesfalls. Denn so etwas lässt sich sehr leicht mit den Kommando ls oder find und einer Pipe realisieren:

Um alle html-Seiten der Linux-Fibel zu archivieren, ist die Option -o bzw. --create zu benutzen:

user@sonne> cd ~user/doc/linuxfibel
user@sonne> ls *.htm | cpio -o > Linuxfibel.cpio

Zur Archivierung ganzer Verzeichnishierarchien bietet sich die Kombination mit dem Kommando find an:

user@sonne> find ~user/doc/linuxfibel -print | cpio -o > Linuxfibel.cpio

Um das Archiv wieder auszupacken, verwendet man die Option -i bzw. --extract:

user@sonne> cpio -i < Linuxfibel.cpio
# oder auch:
user@sonne> cpio -iI Linuxfibel.cpio

Wie zu erkennen ist, liest »cpio« ebenso seine eigenen Archive von der Standardeingabe.

Die Option -t bzw. --list ermöglicht das Betrachten des Inhalt eines »cpio-Archives«:

user@sonne> cpio -t < Linuxfibel.cpio

Alternativ eignet sich »cpio« in Verbindung mit der Option -p (»--pass-through«) zum Kopieren von Dateien in ein Verzeichnis:

user@sonne> find ~user/doc | cpio -p /tmp/user/doc

Letzteres Kommando entspricht einem einfachen Kopierbefehl mittels cp, nämlich »cp -r ~user/doc/* /tmp/user/doc«. Warum also so umständlich? Durch die Kombination mit find ist »cpio« um einiges flexibler. Die vielfältigen Optionen von letzterem Kommando helfen ungemein, um tiefversteckte Dateien schnell und selektiv zu finden. Das wirkt sich dann natürlich vorteilhaft auf »cpio« aus.

Zusätzliche Optionen zu den oben genannten sind die folgenden:

-m bzw. --preserve-modification-time

Zeitstempel bleiben erhalten

-v bzw. --verbose

Anzeige der gerade bearbeitende Datei

-d bzw. --make-directories

Notwendige Verzeichnisse werden erstellt

-H Format bzw. --format=FORMAT

Format des cpio-Archives (-H ustar : POSIX-tar Format)

dpkg - Paketverwaltung a'la Debian Zurück Anfang Weiter

Aufruf:   dpkg [options]

Dieses Kommando steht nur den Benutzern von Debian-Linux zur Verfügung. Es erledigt im Wesentlichen dieselbe Funktionalität wie das verbreitete rpm anderer Distributionen ((De)Installation, Versionskontrolle, Paketverwaltung, Update), nur arbeitet es mit *.deb-Archiven zusammen.

Das Paketmanagement bleibt dem Administrator vorbehalten. Der »normale« Benutzer muss sich mit Abfragen zu Paketinformationen begnügen.

Einen Überblick über alle installierten Pakete verschafft die Option -l, durch Anfügen eines Paketnamens beschränkt sich die Ausgabe auf dieses.

user@sonne> dpkg -l bash
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name              Version           Description
+++-=================-=================-=======================================
ii  bash              2.03-6            The GNU Bourne Again SHell

Eine Liste der in einem Paket enthaltenen Dateien bringt die Option -L zum Vorschein:

user@sonne> dpkg -L bash
/.
/bin
/bin/bash
/bin/rbash
/bin/sh
/usr
/usr/bin
/usr/bin/bashbug
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/builtins.1.gz
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/rbash.1.gz
/usr/share/man/man1/bash.1.gz
/usr/share/man/man1/bashbug.1.gz
/usr/share/man/man3
/usr/share/info
/usr/share/doc
/usr/share/doc/bash
...

Und schließlich lässt sich mit der Option -S nach dem Paket suchen, in dem die angegebene Datei enthalten ist:

user@sonne> dpkg -S mcopy
manpages-de: /usr/man/de/man1/mcopy.1.gz

Der Dateiname darf die shellüblichen Metazeichen enthalten, allerdings müssen diese vor der Interpretation durch die Shell geschützt werden (z.B. durch Voranstellen des Backslash).

gzip - Dateien komprimieren Zurück Anfang Weiter

Aufruf:   gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]

Diese GNU-Version des alt bekannten zip ist der Standardpacker unter Linux. Er basiert auf der Lempel-Ziv-Kodierung (LZ77) und seine gepackten Dateien enden i.d.R. auf ».gz«.

user@sonne> gzip Linuxfibel.tar
user@sonne> ls -l Linuxfibel.tar.gz
-rw-r--r-- 1 user users 833729 May 23 14:07 Linuxfibel.tar.gz
user@sonne> gzip -l Linuxfibel.tar.gz
compressed uncompr. ratio uncompressed_name
   833729  1914880  56.4% Linuxfibel.tar

Die Option »-l« aktiviert quasi den »gzip«-eigenen Taschenrechner, der die Kompressionsrate gleich mit ausgibt. In diesem Fall sind es 56.4%.

Entpacken geschieht durch das Kommando »gzip -d« (»--decompress«) oder einfach mit gunzip:

user@sonne> gunzip Linuxfibel.tar.gz

rpm - Der RedHat Package Manager Zurück Anfang Weiter

Aufruf:   rpm [options]

Auf den ersten Blick ähneln die »rpm«-Pakete des RedHat Package Managers den hier behandelten tar oder zip-Archiven. Sie bestehen genauso aus einer Sammlung von Dateien und Dateiinformationen. Allerdings steht eine gänzlich andere Philosophie dahinter. Die durch rpm-Pakete installierten Dateien, sprich Programme, Konfigurationsdateien, Bibliotheken u.a., werden in einer Datenbank fest gehalten. Hierdurch wird es erst möglich, Paketzugehörigkeiten, Versionskontrolle, Aktualisierung und saubere (!) Deinstallation zu realisieren. Weiterhin werden Abhängigkeiten von Paketen berücksichtigt.

Installation, Aktualisierung und Löschen von rpm-Paketen ist Aufgabe des Systemadministrators. Genauso fällt das Erzeugen ebensolcher in seinen Aufgabenbereich. In diesem Kapitel, das auf die Belange eines Einsteigers gemünzt ist, soll nur auf die Abfrage von Paketen und Dateien eingegangen werden. Eine Abfrage, eine --query, entspricht im Unix98 Standard der Option -q. Um bspw. herauszufinden, zu welchen Paket das Programm vi gehört, wird die »Anfrage« mit einer zusätzlichen Option -f bzw. --file kombiniert:

user@sonne> rpm -qf /usr/bin/vi
vim-5.4-13

Im Paket »vim« ist dieser Editor zu finden. Dieses Paket selbst ist in der Version 5.4 Release 13 installiert. Bevor genauer auf dieses Beispiel eingegangen wird, werden erst einmal die wichtigsten Optionen zur Paketabfrage aufgelistet:

-l bzw. --list

Auflisten aller Dateien des Paketes

-i

Informationen zum Paket

-R bzw. --requires

Zeigt alle benötigten Programme

-s bzw. --status

Zeigt Status aller Dateien des Paketes (normal, not installed oder replaced)

-a bzw. --all

Zeigt alle installierten Pakete an (ohne zusätzliche Paketangabe)

Welche Dateien sind durch das Paket »vim« installiert? Die Antwort verrät folgende Anfrage:

user@sonne> rpm -ql vim
/etc/vimrc
/usr/bin/rview
/usr/bin/rvim
/usr/bin/vi
/usr/bin/view
/usr/bin/vim
/usr/bin/vimtutor
/usr/bin/xxd
...

Welche Informationen über das Paket selbst sind verfügbar?

user@sonne> rpm -qi vim
Name        : vim                          Relocations: (not relocateable)
Version     : 5.4                               Vendor: SuSE GmbH, Nuernberg, Germany
Release     : 13                            Build Date: Mon 08 Nov 1999 20:48:21 MET
Install date: Don 27 Jan 2000 16:59:31 MET  Build Host: allen.suse.de
Group       : unsorted                      Source RPM: vim-5.4-13.src.rpm
Size        : 3629468                          License: 1999 - not specified
Packager    : feedback@suse.de
Summary     : Vim
Description :
Vim (Vi Improved) is an almost compatible version of the UNIX editor vi
whereby almost every possible command can be performed using only ASCII
characters. Only the 'Q' command is missing (you don't need it). Many new features have
been added: multi level undo, command line history, filename
completion, block operations, editing of binary data, etc.
Vi is available for the AMIGA, MS-DOS, Windows NT, and various versions
of UNIX.
For SuSE Linux, Vim is used as /usr/bin/vi.

Authors:
--------
    Bram Moolenaar <mool@oce.nl>

Diese Abfragekommandos können auch auf rpm-Pakte angewendet werden, die als Dateien vorliegen. Mit

user@sonne> rpm -qR TolleSoftware-1.00-2.i386.rpm

lässt sich erfragen, welche Programme bzw. Pakete notwendig für die Installation dieser »tollen Software« sind.

tar - Das Standard-Archiv-Format Zurück Anfang Weiter

Aufruf:    tar [OPTION]... [Dateien]...

Dieses Programm wurde ursprünglich zur Verwaltung von Bandarchiven benutzt, daher auch der Name tar (tape archiver). Der heutige Funktionsumfang ermöglicht ebenso das Schreiben zu archivierender Daten in Dateien oder gar auf unformatierte Disketten (/dev/fd0)... Letzteres hat den großen Vorteil, dass die Daten unabhängig vom Filesystem sind, d.h. jedes UNIX-Betriebssystem wäre befähigt, auf die Daten zugreifen.

Folgende Optionen sind die Wesentlichsten zur Verwaltung von so genannten tar-Archiven:

-c bzw. --compress

Archivieren

-t bzw. --list

Anzeigen

-x bzw. --extract

Extrahieren

-r bzw. --append

Anfügen

-u bzw. --update

Austausch nur neuerer Dateien

--delete

Löschen

-f DATEI bzw. --file=DATEI

Archivdatei (auch /dev/fd0)

-C VERZEICHNIS bzw. --directory=VERZEICHNIS

Ins VERZEICHNIS wechseln

-v bzw. --verbose

Ausführlichere Anzeige

-M bzw. --multi-volume

Falls ein Band nicht reichen sollte

Um unser obiges Beispielarchiv der Linuxfibel zu erzeugen, wurden folgende Kommandos ausgeführt:

# Zuerst in das Quellverzeichnis wechseln
user@sonne> cd ~user/doc/linuxfibel
# Nun alle Dateien archivieren
user@sonne> tar -cf Linuxfibel.tar *.htm images/

Mit obigem Kommando werden alle Dateien mit der Endung ».htm« und das Verzeichnis »images« einschließlich Inhalt in der Datei »Linuxfibel.tar« archiviert.

Ob alles geklappt hat, verrät:

user@sonne> tar -tf Linuxfibel.tar

Bei zusätzlicher Verwendung der Option -v im obigen Kommando werden Information über Dateigrößen, Eigentümer, Zeitmarke und Zugriffsrechte mit angezeigt. Wenn nicht anders angegeben, RTFM, bleiben die Dateiattribute erhalten.

Ohne Dateiangaben wird alles extrahiert. Betrifft dies nur bestimmte Dateien, so erfolgt dies wie folgt:

user@sonne> tar -xvf Linuxfibel.tar images/*.gif

Normalerweise werden Archive mit »tar« nicht komprimiert. Man muss, wie in den Beispielen auf dieser Seite, das Archiv explizit selbst packen. Das GNU-tar jedoch unterstützt folgende Packer mittels der aufgelisteten Optionen:

-z bzw. --gzip

gzip

-Z bzw. --compress

compress

-j bzw. --bzip2

bzip2 (bei älteren Versionen von tar I (großes i) anstatt j!)

user@sonne> tar -xzf Linuxfibel.tar.gz images/*.gif

Anzumerken ist, dass in einem gepackten Archiv, auch wenn dies durch »tar« selbst komprimiert wurde, keine Dateien hinzugefügt, erneuert oder gelöscht werden können. Dies kann nur im unkomprimierten tar-Archiv geschehen.

zip - Dateien komprimieren Zurück Anfang

Aufruf:    zip [-AcdDeEfFghjklLmoqrRSTuvVwXyz@$] [-b path] [-n suffixes] [-t mmddyyyy] [-tt mmddyyyy] [ zipfile [ file1 file2 ...]] [-xi list]

Als letzten Archivierungs- und Kompressionstool sei hier zip erwähnt. Es ist kompatibel mit dem unter MS-Windows weit verbreiteten »PKZIP« (Phil Katz ZIP) und kann daher gut zum Datenaustausch genutzt werden.

Um die Linuxfibel zu archivieren, wird folgendes Kommando aufgerufen:

user@sonne> cd ~user/doc/linuxfibel
user@sonne> zip -r Linuxfibel.zip *
user@sonne> ls -l Linuxfibel.zip
-rw-r--r--   1  user   users     990163  May 23 14:07  Linuxfibel.zip

Auch wenn die Online-Hilfe von zip (»man zip« oder »zip -h«) anderer Meinung ist, klappt das rekursive Archivieren nur mit der Option -r und nicht mit »-R«. Groß- und Kleinschreibung ist sowieso ein Problem bei Kompatibilätsversuchen mit MS-DOS. Gut, dass es dafür noch die Optionen »-L« und »-U« gibt, womit Klein- bzw. Großschreibung erzwungen werden kann.

Die Kompressionsrate beträgt im Beispiel 48.3%. Entpacken funktioniert mit unzip:

user@sonne> unzip Linuxfibel.zip

»unzip« ermöglicht ebenso das Betrachten des Archivinhalts. Hierzu ist die Option -t zu verwenden, die gleichzeitig auch die einzelnen Dateien des Archivs testet.

user@sonne> unzip -t Linuxfibel.zip
Korrekturen, Hinweise?
Startseite Nächste Seite Nächstes Kapitel Vorherige Seite Kapitelanfang