ZIP-Archive sind ein weit verbreitetes Format, das auf verschiedenen Betriebssystemen wie Windows, macOS und Linux Anwendung findet. In Linux können Sie diese Archive bequem über die Kommandozeile erstellen und entpacken.
Das ZIP-Dateiformat
Das ZIP-Format hat sich aufgrund seiner breiten Nutzung unter Windows-Nutzern als eines der populärsten Formate für komprimierte Archive etabliert.
Während unter Linux Formate wie .tar.gz oder .tar.bz2 gebräuchlich sind, ist das ZIP-Format oft die erste Wahl für Windows-Nutzer. Umgekehrt ist es für Linux-Nutzer, die Dateien mit Windows-Anwendern austauschen möchten, ratsam, das ZIP-Format aufgrund seiner Kompatibilität zu verwenden.
Die Werkzeuge: zip, unzip und mehr
In Linux und anderen Unix-ähnlichen Systemen wie macOS stehen Ihnen die Befehle `zip` und `unzip` zur Verfügung, um ZIP-Dateien zu bearbeiten. Es gibt jedoch noch eine Reihe weiterer nützlicher Tools wie `zipcloak`, `zipdetails`, `zipsplit` und `zipinfo`.
Wir haben bei einigen bekannten Linux-Distributionen überprüft, welche dieser Tools standardmäßig installiert sind. Auf Ubuntu 19.04, 18.10 und 18.04 sowie auf Manjaro 18.04 waren alle diese Programme vorhanden. Fedora 29 und CentOS hingegen enthielten standardmäßig nur `zip` und `unzip`.
Um die fehlenden Komponenten auf Fedora 29 zu installieren, verwenden Sie folgenden Befehl:
sudo dnf install perl-IO-Compress
Und für CentOS 7:
sudo yum install perl-IO-Compress
Sollten auf Ihrer Linux-Distribution einige der genannten Werkzeuge fehlen, können Sie diese in der Regel über den entsprechenden Paketmanager nachinstallieren.
Eine ZIP-Datei mit `zip` erstellen
Um ein ZIP-Archiv zu erstellen, benötigen Sie den Befehl `zip`, gefolgt vom Namen des Archivs sowie den Dateien, die hinzugefügt werden sollen. Die Dateiendung „.zip“ ist nicht zwingend erforderlich, wird aber empfohlen.
Um beispielsweise eine Datei namens „source_code.zip“ zu erstellen, die alle C-Quellcode- und Headerdateien aus dem aktuellen Verzeichnis enthält, verwenden Sie:
zip source_code *.c *.h
Während der Erstellung wird jede hinzugefügte Datei mit dem erreichten Kompressionsgrad angezeigt.
Nach dem Erstellen des Archivs sehen Sie, dass die Endung „.zip“ automatisch hinzugefügt wurde.
ls -l source_code.zip
Falls Sie die Ausgabe während des Komprimierungsprozesses unterdrücken möchten, verwenden Sie die Option `-q` (quiet):
zip -q source_code *.c *.h
Verzeichnisse in ZIP-Dateien einbinden
Um auch Unterverzeichnisse in das ZIP-Archiv aufzunehmen, verwenden Sie die Option `-r` (rekursiv) in Verbindung mit dem Verzeichnisnamen. Das folgende Beispiel erstellt eine ZIP-Datei und inkludiert das Unterverzeichnis „archive“:
zip -r -q source_code archive/ *.c *.h
Oft ist es sinnvoll, ein separates Verzeichnis für die enthaltenen Dateien zu erstellen. So werden beim Entpacken die Dateien ordentlich in einem Ordner abgelegt.
Der folgende Befehl archiviert das Arbeitsverzeichnis sowie alle darin befindlichen Unterverzeichnisse. Beachten Sie, dass dieser Befehl vom übergeordneten Ordner des Arbeitsverzeichnisses ausgeführt wird:
zip -r -q source_code work/
Die Kompressionsstufe anpassen
Sie haben die Möglichkeit, den Grad der Dateikompression anzupassen. Die Stufen reichen von 0 (keine Kompression) bis 9 (maximale Kompression). Je höher die Kompressionsstufe, desto länger dauert der Vorgang. Bei kleineren ZIP-Archiven ist der Zeitunterschied jedoch gering. Die Standardkompressionsstufe (6) ist oft ein guter Kompromiss.
Um eine spezifische Stufe zu verwenden, geben Sie die Zahl mit einem vorangestellten Minuszeichen an:
zip -0 -r -q source_code work/
Die Standardstufe ist 6 und kann, muss aber nicht explizit angegeben werden:
zip -r -q source_code work/
Die höchste Kompressionsstufe ist 9:
zip -9 -r -q source_code work/
Im Beispiel betrug der Unterschied zwischen keiner Komprimierung (Stufe 0) und der Standardkomprimierung (Stufe 6) 400 KB. Der Unterschied zwischen Standard- und Maximal-Komprimierung war jedoch nur 4 KB.
Auch wenn es bei einzelnen Dateien geringfügig erscheint, kann sich die zusätzliche Komprimierung bei Archiven mit Hunderten oder Tausenden von Dateien deutlich bemerkbar machen.
Passwörter für ZIP-Dateien
Das Hinzufügen von Passwörtern ist unkompliziert. Verwenden Sie die Option `-e` (encrypt) und geben Sie das gewünschte Passwort ein:
zip -e -r -q source_code work/
ZIP-Dateien mit `unzip` entpacken
Um Dateien aus einem ZIP-Archiv zu extrahieren, verwenden Sie den Befehl `unzip`, gefolgt vom Dateinamen (einschließlich „.zip“).
unzip source_code.zip
Die entpackten Dateien werden während des Vorgangs im Terminal aufgelistet.
Beachten Sie, dass ZIP-Archive keine Informationen über Dateibesitzer speichern. Die extrahierten Dateien werden dem Nutzer zugeordnet, der den Befehl ausführt.
Analog zum `zip`-Befehl können Sie die Ausgabe mit `-q` unterdrücken:
unzip -q source_code.zip
Dateien in ein Zielverzeichnis extrahieren
Verwenden Sie die Option `-d` (directory), um die Dateien in ein bestimmtes Verzeichnis zu entpacken:
unzip -q source_code.zip -d ./development
Passwortgeschützte ZIP-Archive entpacken
Wenn ein ZIP-Archiv passwortgeschützt ist, werden Sie bei der Entpackung zur Eingabe des Passworts aufgefordert. Ohne das korrekte Passwort können die Dateien nicht extrahiert werden.
unzip -q source_code.zip
Falls Sie es nicht als Problem ansehen, dass Ihr Passwort sichtbar wird oder in der Befehlshistorie gespeichert ist, können Sie das Passwort direkt mit der Option `-P` (Passwort) angeben. (Beachten Sie das große „P“).
unzip -P fifty.treacle.cutlass -q source_code.zip
Bestimmte Dateien ausschließen
Mit der Option `-x` (exclude) können Sie bestimmte Dateien oder Dateigruppen von der Extraktion ausschließen. Im folgenden Beispiel werden alle Dateien außer den Headerdateien (*.h) extrahiert:
unzip -q source_code.zip -x *.h
Dateien überschreiben
Nehmen wir an, Sie haben Dateien entpackt und versehentlich einige davon gelöscht. Um sie erneut zu entpacken, werden Sie vom System gefragt, ob Sie vorhandene Dateien überschreiben möchten. Folgende Antworten sind möglich:
Beachten Sie, dass die Antworten (außer r) Groß- und Kleinschreibung beachten.
y: Ja, diese Datei überschreiben
n: Nein, diese Datei nicht überschreiben
A: Alle, überschreibe alle Dateien
N: Keine, überschreibe keine der Dateien
r: Umbenennen, die Datei extrahieren und einen neuen Namen geben.
Um das Überschreiben zu erzwingen, verwenden Sie die Option `-o` (overwrite):
unzip -o -q source_code.zip
Die effizienteste Methode, fehlende Dateien wiederherzustellen, ist die Option `-n` (never overwrite). Dadurch werden nur Dateien extrahiert, die noch nicht im Zielverzeichnis vorhanden sind:
unzip -n source_code.zip
Den Inhalt eines ZIP-Archivs anzeigen
Vor dem Extrahieren ist es oft sinnvoll, den Inhalt des Archivs einzusehen. Dies ist mit der Option `-l` (list archive) möglich. Die Ausgabe wird in der Regel durch `less` geleitet, um sie übersichtlich zu gestalten:
unzip -l source_code.zip | less
Die Ausgabe listet die Verzeichnisse und Dateien innerhalb des Archivs, deren Größe sowie Datum und Uhrzeit der Archivierung auf. Drücken Sie „q“, um `less` zu beenden.
Es gibt noch weitere Tools, mit denen Sie einen Einblick in ZIP-Dateien gewinnen können, wie wir gleich sehen werden.
Passwörter nachträglich mit `zipcloak` hinzufügen
Was tun, wenn Sie vergessen haben, beim Erstellen eines ZIP-Archivs ein Passwort zu setzen? Mit dem Befehl `zipcloak` können Sie ein Passwort schnell hinzufügen. Geben Sie dazu den Namen der ZIP-Datei an. Sie werden dann zur Passworteingabe aufgefordert und müssen diese zur Bestätigung wiederholen:
zipcloak source_code.zip
Dateiinformationen mit `zipdetails` anzeigen
Der Befehl `zipdetails` liefert detaillierte Informationen über ein ZIP-Archiv. Aufgrund der Menge an Informationen ist es sinnvoll, die Ausgabe wieder durch `less` zu leiten:
zipdetails source_code.zip | less
Beachten Sie, dass die Dateinamen auch bei passwortgeschützten Archiven in der Ausgabe angezeigt werden. Diese Informationen sind als Metadaten in der ZIP-Datei gespeichert und nicht Teil der verschlüsselten Daten.
Dateien mit `zipgrep` durchsuchen
Mit dem Befehl `zipgrep` können Sie nach Text innerhalb der Dateien eines ZIP-Archivs suchen. Das folgende Beispiel sucht nach der Textzeichenfolge „keyval.h“:
zipgrep keyval.h source_code.zip
Das Ergebnis zeigt, dass die Dateien `slang.c` und `getval.c` die gesuchte Zeichenfolge enthalten. Zudem wird ersichtlich, dass diese Dateien in verschiedenen Verzeichnissen im Archiv vorhanden sind.
Informationen mit `zipinfo` anzeigen
Der Befehl `zipinfo` bietet eine weitere Möglichkeit, einen Blick in ein ZIP-Archiv zu werfen. Auch hier leiten wir die Ausgabe durch `less`:
zipinfo source_code.zip | less
Die Ausgabe zeigt (von links nach rechts):
- Dateiberechtigungen
- Die Version des Tools, das zur Erstellung des Archivs verwendet wurde
- Die Originalgröße der Datei
- Ein Dateideskriptor
- Die Kompressionsmethode (hier: Deflation)
- Zeitstempel
- Der Dateiname inklusive Verzeichnis
Der Dateideskriptor besteht aus zwei Zeichen. Das erste Zeichen ist entweder „t“ (Text) oder „b“ (Binär). Ein Großbuchstabe deutet auf eine verschlüsselte Datei hin. Das zweite Zeichen gibt Informationen über Metadaten an:
- -: Keine Metadaten
- l: Erweiterter lokaler Header, aber kein zusätzliches Feld
- x: Kein erweiterter lokaler Header, aber ein zusätzliches Feld
- X: Sowohl erweiterter lokaler Header als auch ein zusätzliches Feld
Archive mit `zipsplit` aufteilen
Wenn Sie ein ZIP-Archiv versenden müssen, es aber Größenbeschränkungen gibt, können Sie das Archiv mit dem Befehl `zipsplit` in kleinere Teile aufteilen.
Die Option `-n` (Größe) erlaubt die Angabe einer maximalen Größe für jedes Teilarchiv. Das folgende Beispiel teilt die Datei „source_code.zip“ in Teilarchive mit einer maximalen Größe von 100 KB (102400 Byte):
zipsplit -n 102400 source_code.zip
Beachten Sie, dass die angegebene Größe nicht kleiner sein darf als die Größe der größten Datei im Archiv.
Mit diesen Befehlen sind Sie in der Lage, ZIP-Dateien direkt vom Linux-Terminal aus zu erstellen, zu bearbeiten und zu analysieren, ohne auf grafische Oberflächen angewiesen zu sein.