Nicht nur beim Download von Dateien oder bei den HOWTOS findet man oft die Endungen .gz, .tar.gz oder .bz2. Was hinter diesen kryptischen Endungen steckt, erfahren Sie in dieser "Zu Befehl"-Folge: Es geht um das "Zusammen-" und "Auspacken" von Dateien und Verzeichnissen.

gzip-t und klein gemacht

Das Kommando gzip datei(en) reduziert die Größe von Dateien. Die komprimierte Datei heißt danach datei.gz und behält Zugriffs- und Besitzerrechte, Zugriffs- und Modifikationszeit. Ist der Dateiname zu lang für das Dateisystem, stutzt gzip die Sache zurecht – längere Teile des Dateinamens werden gekürzt. Möchte man ein komprimiertes File wiederherstellen, verwendet man gunzip oder gzip -d (für gzip --decompress), welches in der Tat das gleiche Programm ist. Möchte man die gepackte Datei hingegen nur betrachten, kann man den Aufruf zcat datei.gz (eventuell | less dranhängen oder direkt zless datei.gz verwenden) starten, was das gleiche ist wie gzip -c -d. Die Option -c bewirkt übrigens, daß die Datei nach stdout entkomprimiert wird.

Der Grad der Komprimierung hängt von der Größe des Inputs und der Verteilung gemeinsamer Zeichenketten ab, d. h. am besten komprimierbar sind Dateien, in denen sich gleichartige Datenmuster oft wiederholen. Bei einer Bitmap-Datei von 1,4 MB bleiben nach dem gzip-Aufruf beispielsweise nur noch 709 KB übrig. Verwendet man den Parameter gzip -9, ist die Datei nur noch 708 KB groß. Man kann also mit einer angehängten Ziffer von 1 bis 9 entscheiden, ob man lieber schneller komprimieren möchte (gzip -1) oder langsamer mit besserer Kompressionsrate (gzip -9).

gzip hat noch einige weitere Optionen, die interessant sind. Liegt im aktuellen Verzeichnis beispielsweise eine Datei mit gleichem Namen wie die zu entpackende Datei, fragt gzip netterweise nach:

huhn@huehnerstall ~ > gunzip datei.bmp.gz
gunzip: datei.bmp already exists; do you wish to overwrite (y or n)?

Will man die Frage umgehen, gibt es die Option gzip -f (für --force). Der Parameter "erzwingt" das Packen und Auspacken, selbst wenn bereits etwas mit gleichem Namen existiert. Interessant ist in diesem Zusammenhang das Verhalten von Symlinks. Normalerweise wird gzip es ablehnen, Symlinks zu komprimieren: gzip: link.bmp is not a directory or a regular file - ignored. Verwendet man die Option -f, wird die Datei, auf die der Link zeigt, komprimiert, bekommt aber den Namen des Links, also link.bmp.gz.

Natürlich hat das Kommando gzip noch mehr auf Lager – ein Blick in die Man-Page bietet da eine gute Übersicht. Möchte man sein eigenes gzip mit ein paar Optionen als Standard versehen, kann man diese in die Umgebungsvariable GZIP eintragen. Für die bash-Shell kann man seine eigenen Wunsch-Parameter z. B. so festlegen:

huhn@huehnerstall ~ > export GZIP="-9"
huhn@huehnerstall ~ > echo $GZIP
-9

Geht's noch kleiner?

Klar – hier kommt bzip2 ins Spiel. Dieses Programm komprimiert nicht nur besser als gzip, sondern auch wesentlich schneller. Darüber hinaus besitzt es einen recover-Modus, d. h. es versucht, eventuelle Schäden an komprimierten Dateien zu reparieren oder nur die nicht beschädigten Teile zu entpacken. Bevor es ins Detail geht: Sollte bzip2 nicht auf Ihrem System installiert sein, finden Sie unter http://sourceware.cygnus.com/bzip2/index.html nicht nur die Sourcen, sondern auch ausführliche Informationen zum Programm.

Die meisten Parameter funktionieren genauso wie bei gzip, einige weichen jedoch voneinander ab. Die Endung von komprimierten Dateien lautet hier .bz2, Zugriffsrechte und Timestamps bleiben ebenfalls erhalten. Auch hier gilt wieder: Überschreibschutz vorhanden! Versucht man beim Entpacken eine bereits existierende Datei zu ersetzen, kommt keine Abfrage wie bei gzip, sondern direkt die Meldung: bunzip2: Output file datei.bmp already exists, skipping. Möchte man dieses umgehen, gibt es wie bei gzip auch die Option -f (für --force).

Was ist anders bei bzip2? Es gibt eine Funktion, mit der man die zu komprimierenden Dateien nicht automatisch löscht, sondern eine Kopie erhalten bleibt – bzip2 -k (für --keep). Das Feature bzip2recover wurde schon erwähnt; was da im Hintergrund abläuft, ist spannend: bzip2 zerlegt Dateien beim Komprimieren in einzelne Blöcke. Sollte also ein File durch irgendetwas beschädigt werden, können eventuell Daten der intakt gebliebenen Pakete gerettet werden (siehe hierzu auch die Man-Page!).

tar-chivier mir was!

Mit tar kann man mehrere Files in einer Archivdatei zusammenfassen – praktisch, wenn man viele zusammengehörende Sachen von einem Rechner auf einen anderen übertragen möchte! Diese übrigbleibende, einzelne Archivdatei kann als ganzes natürlich leichter komprimiert werden. Um ein solches Archiv zu erstellen, kann man folgendes Kommando aufrufen:

huhn@huehnerstall ~ > tar cvf archiv.tar verzeichnis
verzeichnis/
verzeichnis/datei.html
verzeichnis/test/
verzeichnis/test/datei2
verzeichnis/text

Nach einzelnen Parameter aufgeschlüsselt ergibt sich folgendes: Die Option c steht für --create – also ein neues Archiv erstellen. Wenn man auf das v für --verbose (engl.: "wortreich") verzichtet, werden keine Dateinamen während des Archivierungsvorgangs angegeben. Die drei Buchstaben tar bedeuten übrigens "tape archiver": Ursprünglich war das Programm dafür vorgesehen, Dateien auf Bandgeräten zu speichern. Deswegen wird hier das f archivname verwendet, um anzuzeigen, dass nicht auf ein Gerät, sondern in ein File auf die Festplatte geschrieben werden soll. Natürlich braucht das Kind einen Namen – archiv.tar. Bei Verzeichnissen werden alle Dateien und sämtliche Unterverzeichnisse in das Archiv-File geschrieben. Möchte man zu dem bestehenden Archiv weitere Dateien hinzufügen, kann man tar rvf archiv.tar weiteredatei aufrufen – r steht für --append. Um sicherzugehen, daß diese Datei dort noch nicht vorhanden ist, kann man sich das Archiv natürlich vorher anschauen: tar tvf archiv.tar, wobei t auch durch die lange Form --list ersetzt werden kann. Die Zugriffsrechte und Eigentümer sollen erhalten bleiben? Dann sollten Sie tar pcvf archiv.tar /home (p steht für --preserve-permissions) verwenden – wenn die Verzeichnisse wieder ausgepackt werden, sind die Dateien wieder im Originalzustand.

Um ein Archiv wieder auszupacken, verwendet man tar xvf archiv.tar, wobei x für --extract steht. Sollen nur einzelne Dateien aus diesem Archiv entnommen werden, hängt man deren Namen an den Aufruf an. Bleibt zum Schluss festzuhalten, dass tar nicht automatisch komprimiert. Natürlich lässt sich ein solches Archiv noch packen mit gzip oder bzip2, man kann sich diesen zweiten Arbeitsschritt aber sparen und alles in einem Aufruf erledigen: tar czvf archiv.tar.gz verzeichnis zipt das Archiv gleich mit (tatsächlich wird das externe Programm gzip aufgerufen, d. h. es funktioniert nur, wenn es wirklich installiert ist). Ebenso ist das z auch zum Auspacken eines solchen komprimierten Pakets zu verwenden, hier lautet das Kommando dann tar xzvf archiv.tar.gz. Wenn man statt gzip lieber bzip2 verwenden möchte, sollte man vorher schauen, ob die eigene Distribution dieses anbietet (Man-Page lesen!). Auf dem Testrechner, unter Debian 2.1, funktionierte der Aufruf tar cIvf test.tar.bz2 verzeichnis (mit einem großen 'i' wie in 'Insel'), ein zweiter Computer verweigerte allerdings den Dienst: tar: invalid option -- I Try `tar --help' for more information.

Glossar

HOWTOS

Im Gegensatz zu den referenzartigen Man-Pages liefern die HOWTOS "Kochrezepte" für bestimmte Problemgebiete und sind damit für den Anfänger wesentlich besser geeignet. Bei gängigen Distributionen liegen sie unter /usr/doc/HOWTO. Dort gibt es z. B. die Datei Firewall-HOWTO.gz, die man entweder entpacken und dann lesen oder mit zless oder zmore (s. "Zu Befehl"-Folge Nr. 2) direkt anschauen kann.

stdout

Es gibt drei "Standardkanäle" für Ein- und Ausgabe, stdin (Standardeingabe), stdout (Standardausgabe) und stderr (Standardfehlerausgabe). Ein Benutzer hat z. B. die Tastatur als Standardeingabe und den Bildschirm als -ausgabe. Wenn man eine Datei beispielsweise mit zcat (gzip -d -c) dekomprimiert, dann wird sie, sofern sie nicht umgeleitet wird, auf den Bildschirm ausgegeben.

Symlinks

Symbolische Links: Ein Verweis auf eine andere Datei, der von Anwendungsprogrammen wie eben diese Datei behandelt wird. Wenn die Datei, auf die ein Symlink verweist, gelöscht wird, zeigt der Link ins Leere. Symlinks sind das Ergebnis des Kommandos ln -s.

Umgebungsvariable

Die Shell stellt dem Benutzer einen Speicher bereit, um bestimmte Informationen aufzubewahren und Programmen zugänglich zu machen. Diese Umgebungsvariablen (environment variables) bestehen jeweils aus dem Namen und dem zugeordneten Wert.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

Kommentare