ubuntuusers.de

7z

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

./7zip_logo.png 7z 🇬🇧 ist sowohl ein Dateiformat als auch ein Kommandozeilenprogramm zur Datenkompression. Auf Wunsch kann man auch eine eigene grafische Oberfläche installieren. Es handelt sich um die Referenzimplementierung des hocheffizienten, freien Algorithmus LZMA, der die allermeisten anderen Algorithmen in ihrer Kompressionsstärke mitunter deutlich übertrifft (Vergleich 🇬🇧).

Ein Beispiel: LZMA komprimiert durchschnittlich 50% stärker als der Algorithmus Deflate des weit verbreiteten Formats ZIP. Auch mit proprietären, kommerziellen Formaten wie RAR kann sich 7z messen. Sensible Daten können per AES-256 verschlüsselt werden und ein Archiv kann bei Bedarf in beliebig große Teile zerlegt werden.

Dank seiner Entwicklung als Open-Source hat 7z mittlerweile große Verbreitung gefunden. Grafische Archivmanager wie File Roller, Xarchiver und Ark kommen mit dem Format zurecht, indem sie auf das hier beschriebene Kommandozeilenprogramm zurückgreifen. Für andere Betriebssysteme gibt es eine breite Palette an Programmen, die 7z von Haus aus unterstützen. Eine Auflistung findet sich auf der Projekthomepage 🇬🇧.

Hinweis:

Der Algorithmus LZMA stellt beim Komprimieren sehr hohe Ansprüche an die Systemleistung, insbesondere an den Arbeitsspeicher. Leistungsschwache Systeme werden spätestens bei großen Datenmengen und höheren Kompressionsstufen völlig in die Knie gehen („System Lock-up“). Um das Potenzial voll auszuschöpfen, sollten mindestens 2 GiB Arbeitsspeicher vorhanden sein und auch der Prozessor sollte eine Taktfrequenz von 2 GHz nicht unterschreiten.

Installation

Der Linux-Port von 7z heißt p7zip. Es finden sich mehrere Varianten in den Paketquellen[1]:

  1. Präferiert in diesem Artikel:

    • p7zip-full (universe, unterstützt noch weitere Formate und Algorithmen)

    • p7zip-rar (multiverse, optionales unfreies Modul für p7zip-full, um auch RAR-Archive entpacken zu können)

    Befehl zum Installieren der Pakete:

    sudo apt-get install p7zip-full 

    Oder mit apturl installieren, Link: apt://p7zip-full

    oder

  2. Alternativ installieren:

    • p7zip (universe, unterstützt nur 7z und LZMA)

    Befehl zum Installieren der Pakete:

    sudo apt-get install p7zip 

    Oder mit apturl installieren, Link: apt://p7zip

Man sollte nur eine der beiden Varianten installieren.

Das Programm von p7zip-full wird mit 7z[2] aufgerufen, dagegen p7zip mit 7zr. Der Befehl ist bei Bedarf auszutauschen.

Verwendung auf Kommandozeile

Die allgemeine Syntax des Befehls 7z aus dem Paket p7zip-full lautet:

7z KOMMANDO SCHALTER ARCHIVNAME MUSTER 

Ein Beispiel:

7z a -t7z -m0=LZMA -mmt=on -mx=9 -md=96m -mfb=256 /home/peter/kirschkuchenrezept.7z /home/peter/kirschkuchenrezept.odt 
  • Die Befehlsteile KOMMANDO und SCHALTER werden in den anschließenden Abschnitten erläutert.

  • ARCHIVNAME ist ein Dateiname und identifiziert die zu bearbeitende 7z-Archivdatei. Außer beim Kommando a muss diese Datei existieren; beim Kommando a wird eine existierende Archivdatei modifiziert oder eine vorher noch nicht existierende Datei angelegt.

  • MUSTER ist eine Folge von einem oder mehreren Dateinamen, die auch mit Hilfe von Shell-Globs als Muster angegeben werden können. MUSTER ist immer anzugeben, wenn man Dateien in ein Archiv einfügen, daraus entnehmen oder darin aktualisieren möchte.

7z erkennt Verzeichnisse selbst und arbeitet rekursiv, es muss kein spezieller Parameter angegeben werden.

Kommandos

Mit dem Kommando wird zuerst grob festgelegt, was zu tun ist. Es ist genau ein Kommando als Buchstabe als erster Aufrufparameter lt. Tabelle 1 anzugeben.

Tabelle 1: Kommandos
Kommando Beschreibung
a Dateien/Verzeichnisse einem Archiv hinzufügen bzw. eine Archivdatei erstellen. Die genaue Arbeitsweise wird in Tabelle 5 beschrieben oder mit dem Schalter -u modifiziert.
b Benchmark des Systems
d Dateien/Verzeichnisse aus einem Archiv löschen. Die genaue Arbeitsweise wird in Tabelle 5 beschrieben oder mit dem Schalter -u modifiziert.
e Einfaches Entpacken aller Dateien aus dem Archiv
l Inhalt eines Archivs auflisten.
t Archiv auf Beschädigungen prüfen.
u Archivinhalt aktualisieren. Die genaue Arbeitsweise wird in Tabelle 5 beschrieben oder mit dem Schalter -u modifiziert.
x Archiv entpacken und dabei die Verzeichnisstruktur erhalten.

Schalter

Schalter sind optional nach dem Kommando als Optionen mit einem einleitenden Bindestrich - anzugeben. Die folgende Tabelle 2 beschreibt nur einen Auszug der wichtigsten Schalter, welche die genaue Vorgehensweise festlegen. Der Fokus liegt hier auf dem Algorithmus LZMA. Informationen zu weiteren Schaltern finden sich in den Manpages 🇬🇧. Die meisten Schalter modifizieren die generelle Arbeitsweise (wie z.B. den Kompressionsgrad) des Programms, mit der Option -u kann man aber individuell für die einzelne Datei situationsabhängig die Arbeitsweise steuern.

Tabelle 2:Ausgewählte Optionen
Schalter Beschreibung
-m Algorithmus für Kompression festlegen (z.B. -m0=LZMA).
-mhe=on Die Kopfdaten des Archivs verschlüsseln.
-oZIEL Nicht ins gleiche Verzeichnis (Standard), sondern nach "ZIEL" entpacken.
-pPASSWORT Archiv mit Passwort schützen.
-t7z Dateiformat festlegen (hier 7z). Weitere Formate: xz, bzip2, gzip, tar, zip und wim
-mmt=on Multithreading für Mehrkernprozessoren oder Multiprozessorsysteme aktivieren (manuelle Festlegung der zu nutzenden Kerne mit -mmt=X)
-mx=0 Stufe der Kompressionsstärke (hier 0) vorgeben. Mögliche Werte: 0=Speichern, 1=schnell und schlecht, … , 9=langsam und gut
-mfb=64 Anzahl der Wörterbücher (hier 64) (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 273)
-md=64m Größe der Wörterbücher (hier 64 MiB) (64k, 1m, 2m, 4m, 6m, 8m, 12m, 16m, 24m, 32m, 48m, 64m, 96m, 128m)
-ms=on Progressive ("solid") Kompression
-v128m Das Archiv wird in mehrere Teile (Volumes) aufgeteilt (hier 128 MiB). Größenangaben werden mit einer Einheit angegeben: b=Byte, k=Kibibyte, m=Mebibyte, g=Gibibyte. Es können verschiedene Dateigrößen erstellt werden: 7z a datei.7z -v10k -v15k -v2m. Das erste Volumen erhält 10 KiB, das Zweite erhält 15 KiB, und alle anderen erhalten 2 MiB.
-u'ARBEITSWEISEN' Der Schalter -u kann mehrfach angegeben werden und modifiziert die Arbeitsweise der Kommandos a, d und u. ARBEITSWEISEN steht für eine Zeichenfolge, welche in codierter Form die Arbeitsweise des Programms in bestimmten Situationen festlegt. Siehe dazu folgenden Abschnitt.

⚓︎

Details zum Schalter -u

Wenn man den Schalter -u verwendet, dann enthält die Zeichenfolge ARBEITSWEISEN Paare von jeweils einem Codezeichen für die Situation lt. Tabelle 3 und einem Codezeichen für die in dieser Situation gewünschte Aktion lt. Tabelle 4.

Wenn man den Schalter -u nicht verwendet, gelten die Vorgaben nach Tabelle 5.

Außerdem kann man eine neue zusätzliche Archivdatei erstellen und über die Zeichenfolge ARBEITSWEISEN die vorgegebenen situationsabhängigen Arbeitsweisen für die schon vorhandene Archivdatei überschreiben.

Experten-Info:

Die abstrakte Syntax für den Schalter -u aus der Manpage des Programms ist nicht realisiert.

Vermutlich ist dies eine bessere Beschreibung:
-u[p#][q#][r#][x#][y#][z#][!NEUER-ARCHIVNAME] oder -u-

Der Code - kann nur alleinstehend verwendet werden.

Für die Kommandos a, d und u gilt zunächst bzgl. ihrer Arbeitsweise jeweils ihre Vorgabe nach Tabelle 5, die dann durch die Angaben im Schalter -u modifiziert wird. Für jede Datei im Archiv ARCHIVNAME und jede auf MUSTER passende Datei im Dateisystem wird dann die Situation lt. Tabelle 3 hinsichtlich Existenz an beiden Stellen, Zeitstempel und Größe ermittelt und die Datei dann gemäß Tabelle 4 behandelt.

Tabelle 3: Situationen für Kommandos a, d und u
Code Situation im Dateisystem im Archiv
- Damit kann das Archiv ARCHIVNAME vor Veränderung geschützt werden, indem die Vorgaben für das jeweilige Kommando lt. Tabelle 5 überschrieben werden. Das ist sinnvoll, wenn gleichzeitig eine neue Archivdatei erstellt wird. Dieser Code muss alleine stehen. (nicht relevant)
p# Datei existiert im Archiv, wird aber nicht von MUSTER erfasst. Auswertung durch die Shell beeinflusst das Ergebnis vorhanden
q# Datei ist nur in der Archivdatei vorhanden. nicht vorhanden vorhanden
r# Datei ist nur außerhalb der Archivdatei vorhanden. vorhanden nicht vorhanden
x# Zeitstempel der archivierten Datei ist neuer. älter neuer
y# Zeitstempel der archivierten Datei ist älter. neuer älter
z# Zeitstempel und Größe der archivierten und der nicht archivierten Datei sind gleich. gleich gleich
w# Zeitstempel kann nicht ausgewertet werden, aber archivierte und nicht archivierte Datei haben unterschiedliche Größe. vorhanden vorhanden
!NEUER-ARCHIVNAME Angabe eines Dateinamens für ein neues Archiv. Diese Angabe muss an letzter Stelle der Zeichenfolge stehen. Die vor dem Ausrufezeichen definierten situationsabhängigen Arbeitsweisen gelten für die hier angegebene neue Archivdatei.
Das Zeichen ! ist ein Sonderzeichen für die Shell und muss daher immer vor Interpretation geschützt werden; dies kann durch Quotierung mit Anführungszeichen oder einem voran gestellten fallenden Schrägstrich \ erfolgen.
(nicht relevant)

Bei den Buchstaben p, q,… ist das Zeichen # jeweils durch eine Ziffer nach Tabelle 4 zu ersetzen.

Tabelle 4: Mögliche Aktionen
Code Beschreibung der Aktion
0 Der Code sorgt dafür, dass die betroffenen Dateien nach der Bearbeitung nicht im entsprechenden Archiv enthalten sind, indem er sie daraus entfernt oder gar nicht erst aufnimmt.
1 Bestehende Datei im Archiv wird beibehalten bzw. in die neue Archivdatei übernommen.
2 Datei im Archiv wird durch die nicht archivierte Datei ersetzt (ggf. nur in der neuen Archivdatei).
3 In der Archivdatei werden sogenannte Anti-Dateien erzeugt, die beim Extrahieren dafür sorgen, dass im Zielverzeichnis vorhandene Dateien dieses Namens gelöscht werden (nur mit dem 7z-Format unterstützt)-

⚓︎ Die nachfolgende Tabelle beschreibt, welche Arbeitsweisen für die Kommandos a, d und u ohne explizite Verwendung des Schalters -u gelten.

Tabelle 5: Vorgaben für ARBEITSWEISEN bei den Kommandos a, d und u
Kommando Situation und Aktion
p q r x y z w
d (delete) 1 0 0 0 0 0 0
a (add) 1 1 2 2 2 2 2
u (update) 1 1 2 1 2 1 2

Beispiele

  • 7z u -ur0 /home/peter/Rezepte.7z /home/peter/Kochen_und_Backen/*.odt 

    Überarbeitete Dateien mit der Erweiterung .odt werden im Archiv aktualisiert, neu hinzugekommene bleiben dagegen unberücksichtigt.

  • 7z u -uq0 /home/peter/Rezepte.7z '/home/peter/Kochen_und_Backen/*.odt' 

    Im Verzeichnis gelöschte Dateien mit der Erweiterung .odt werden auch aus dem Archiv entfernt. Dabei muss MUSTER gequotet werden, da es ansonsten von der Shell ausgewertet wird. Dies hätte dann zur Folge, dass im Verzeichnis nicht mehr existierende Dateien keinen Treffer erzielen, und der Schalter -uq0 deswegen nicht greift, obwohl die Voraussetzungen ansonsten erfüllt wären.

  • Will man dagegen alle nicht mehr im Verzeichnis vorhandenen Dateien auch aus dem Archiv löschen, führt folgender Programmaufruf zum Ziel:

    7z u -up0 /home/peter/Rezepte.7z /home/peter/Kochen_und_Backen/* 

    In diesem Fall ist erwünscht, dass die Shell MUSTER auswertet, deswegen darf es nicht gequotet werden. Hier werden dann allerdings auch Dateien neu ins Archiv übernommen, die nicht die Erweiterung .odt enthalten. Will man das nicht, muss im Schalter außerdem noch der Code r0 hinzugefügt werden.

  • Neu hinzugekommene Dateien mit Erweiterung .odt werden wie folgt in die neue Archivdatei neue_Rezepte.7z aufgenommen:

    7z d -u- -u'p0r2!/home/peter/neue_Rezepte.7z' /home/peter/Rezepte.7z /home/peter/Kochen_und_Backen/*.odt 

    Die bestehende Archivdatei Rezepte.7z wird nicht modifiziert, dafür sorgt hier der erste Schalter -u-. Beachte die Quotierung wegen des Sonderzeichens ! im zweiten Schalter!

Tipps

  • Je höher die anstehenden Nummern bei den Schaltern -mfb und -md sind, desto stärker ist die Kompression. Dies wirkt sich allerdings nicht nur auf die benötigte Zeit des Vorgangs aus, sondern auch auf die Systemauslastung, insbesondere die des Arbeitsspeichers. Der Schalter -md legt nicht etwa die maximale Beanspruchung des Arbeitsspeichers fest.

  • Die progressive Komprimierung wird die Effizienz immer dann erhöhen, wenn mehrere Dateien gepackt werden sollen – speziell, wenn diese sich ähneln. Der nötige Aufwand kann durch die Methode jedoch stark in die Höhe schießen, sie sollte mit Bedacht eingesetzt werden. Ist ein Archiv progressiv komprimiert worden, können einzelne Dateien bzw. Verzeichnisse nur entpackt werden, indem alles, was sich im Archiv davor befindet, abgearbeitet wird. In einem solchen Szenario dauert das Entpacken länger. Beim Entpacken des gesamten Archivs gibt es hingegen keinen sonderlichen Zeitunterschied.

  • 7z alleine ist für ein Backup eines kompletten Linux-/Unix-Systems nicht geeignet, da es Benutzer/Gruppe von Dateien nicht speichert. Um doch ein Backup eines Linux-/Unix-Systems mit 7z zu komprimieren, empfiehlt es sich, dieses vorher mit tar zu einem einzelnen Datenstrom zusammenzufügen. Beispiel:

    tar cf - PFAD | 7za a -si ERGEBNIS.tar.7z 

    Das Entpacken eines solchen Archivs läuft dann wieder in umgekehrter Reihenfolge ab (Achtung: Das Zielverzeichnis ZIELPFAD muss vorhanden sein!):

    7za x -so ERGEBNIS.tar.7z | tar xf - -C ZIELPFAD --numeric-owner 

Diese Revision wurde am 1. August 2024 15:37 von Speedy-10 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Datensicherung, Shell, Packer, Komprimierung, Archivmanager