gzip: Dateien unter Linux komprimieren, gzip entpacken, gunzip und zcat verwenden

TestumgebungRHEL-FamilieAlmaLinux 9.8root-KontoGeprüft am 2026-11-05
Befehle zum Komprimieren · ArchivierengzipgunzipzcatSpeicherort/usr/bin/gzip
Dateien unter Linux komprimieren und gzip entpacken

gzip ist der Linux-Befehl, der eine einzelne Datei zu einer .gz-Datei komprimiert; zum Entpacken hängst du an denselben Befehl -d an oder verwendest gunzip. Auf einem AlmaLinux-9-Server schrumpfte ein Zugriffslog von 31.878 Byte auf 4.424 Byte, und nach dem Entpacken waren die ursprüngliche Größe und Änderungszeit wieder da.

Die Ausgaben unten stammen aus einem Testordner auf einem AlmaLinux-9.8-Server, ausgeführt als root, mit Zeiten in UTC. Zugriffslogs, Notizen und Konfigurationsdateien sind für den Test angelegte Beispieldateien, und die IP-Adressen in den Logs sind Beispielwerte für die Dokumentation.

1️⃣ So verwendest du den gzip-Befehl

  • ↪️ Datei komprimieren und das Original behalten (-k)

Im Testordner liegen zwei Zugriffslogs, zwei Notizdateien, ein config-Ordner mit Konfigurationsdateien und ein leerer restore-Ordner.

ls -l
total 88
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log
-rw-r--r-- 1 root root 47748 Oct 27 23:59 access.log-20261027
drwxr-xr-x 2 root root    39 Oct 29 00:19 config
-rw-r--r-- 1 root root    45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root   426 Oct 27 09:10 readme.txt
drwxr-xr-x 2 root root     6 Oct 29 00:19 restore

Schreibst du hinter gzip einen Dateinamen, wird diese Datei zu einer komprimierten Datei, an deren Namen .gz angehängt ist. Der Befehl unten komprimiert access.log und gibt nach dem Ende nichts aus.

gzip access.log

Nach dem Komprimieren zeigt ls -l kein access.log mehr, sondern nur noch access.log.gz. Aus dem 31.878 Byte großen Log wurden 4.424 Byte, und die Änderungszeit ist noch die der Originaldatei.

ls -l access.log access.log.gz
ls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gz

Mit -v zeigt gzip für jede Datei den Verkleinerungsanteil und den neuen Dateinamen. Die [81.5%] in der Zeile von readme.txt geben an, um wie viel die Datei gegenüber der Originalgröße kleiner wurde, und [replaced with] bedeutet, dass die Originaldatei durch die .gz-Datei ersetzt wurde.

gzip -v readme.txt
readme.txt:	 81.5% -- replaced with readme.txt.gz

Willst du die Originaldatei behalten, hängst du -k an. Komprimierst du memo.txt mit -k, bleiben memo.txt und memo.txt.gz nebeneinander liegen.

gzip -k memo.txt
ls -l memo.txt memo.txt.gz
-rw-r--r-- 1 root root 45 Oct 28 14:30 memo.txt
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Die 45 Byte große memo.txt wurde nach dem Komprimieren sogar größer, nämlich 71 Byte. Laut offiziellem Handbuch komprimiert gzip auch dann, wenn das Ergebnis größer als das Original ist, und speichert in der komprimierten Datei den ursprünglichen Dateinamen und die Zeit mit.

Gibst du mehrere Dateien auf einmal an, entsteht für jede Datei eine eigene .gz-Datei. Komprimierst du die beiden Konfigurationsdateien im config-Ordner, erhältst du die zwei Dateien app.conf.gz und site.conf.gz.

gzip -v config/app.conf config/site.conf
config/app.conf:	 78.7% -- replaced with config/app.conf.gz
config/site.conf:	 87.7% -- replaced with config/site.conf.gz
ls -l config/
total 8
-rw-r--r-- 1 root root 206 Oct 20 11:00 app.conf.gz
-rw-r--r-- 1 root root  93 Oct 20 11:05 site.conf.gz

2️⃣ gzip entpacken

  • ↪️ gzip -d und gunzip, in einen anderen Ordner entpacken (-c)

Entpackst du access.log.gz mit -d, erscheint keine Ausgabe, access.log ist wieder da und access.log.gz bleibt nicht übrig.

gzip -d access.log.gz
ls -l access.log access.log.gz
ls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.log

Das wiederhergestellte access.log ist 31.878 Byte groß, und seine Änderungszeit ist wie vor dem Komprimieren Oct 28 23:50.

gunzip erledigt dieselbe Aufgabe wie gzip -d. Mit -k entpackt es und behält dabei die komprimierte Datei, und [created] in der -v-Zeile bedeutet, dass eine neue Datei angelegt wurde, ohne die .gz-Datei zu löschen.

gunzip -kv readme.txt.gz
readme.txt.gz:	 81.5% -- created readme.txt
ls -l readme.txt readme.txt.gz
-rw-r--r-- 1 root root 426 Oct 27 09:10 readme.txt
-rw-r--r-- 1 root root 108 Oct 27 09:10 readme.txt.gz

gzip hat keine Option für den Zielordner. Um in einen anderen Ordner zu entpacken, schickst du den entpackten Inhalt mit -c an die Standardausgabe und schreibst den Pfad der neuen Datei hinter [>]. Der Befehl unten entpackt memo.txt.gz in die Datei memo.txt im restore-Ordner.

gzip -dc memo.txt.gz > restore/memo.txt
ls -l restore/
total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txt

Beim Entpacken mit -c bleibt memo.txt.gz erhalten. Die neue restore/memo.txt hat als Änderungszeit Oct 29 00:19, den Zeitpunkt, an dem die Datei angelegt wurde.

3️⃣ Optionen des gzip-Befehls

  • ↪️ -l, -t, Kompressionsstufe, -r

-l gibt, ohne die komprimierte Datei zu entpacken, in einer Zeile die komprimierte Größe, die Originalgröße, den Verkleinerungsanteil und den Namen nach dem Entpacken aus. Komprimierst du access.log noch einmal mit -k und prüfst es mit -l, sieht das so aus.

gzip -k access.log
gzip -l access.log.gz
         compressed        uncompressed  ratio uncompressed_name
               4424               31878  86.2% access.log

Mit zusätzlichem -v kommen vorne die Kompressionsmethode (defla, kurz für deflate), die CRC der Originaldaten sowie Datum und Uhrzeit der Originaldatei hinzu.

gzip -lv access.log.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla b49b41c4 Oct 28 23:50                4424               31878  86.2% access.log

-t prüft nur, ob die komprimierte Datei unbeschädigt ist, und endet dann. Zusammen mit -v steht hinter jeder fehlerfreien Datei [OK].

gzip -tv access.log.gz
access.log.gz:	 OK

Die Zahlen -1 bis -9 sind die Kompressionsstufe, laut offiziellem Handbuch ist -6 der Standard. Dasselbe access.log wurde dreimal mit -c komprimiert und die Größen mit wc -c verglichen.

gzip -c -1 access.log | wc -c
5564
gzip -c -6 access.log | wc -c
4424
gzip -c -9 access.log | wc -c
4164
Kompressionsstufe.gz-GrößeAnteil der Originalgröße
Originaldatei (access.log)31.878 Byte100%
-1 (am schnellsten)5.564 Byte17.5%
-6 (Standard)4.424 Byte13.9%
-9 (am kleinsten)4.164 Byte13.1%

-9 war 260 Byte kleiner als der Standard, und -1 war 1.140 Byte größer als der Standard.

Gibst du nur einen Ordnernamen an, erscheint [is a directory -- ignored], und der Ordner wird übersprungen.

gunzip config
gzip: config is a directory -- ignored

Um alle Dateien in einem Ordner zu bearbeiten, hängst du -r an. Entpackst du den config-Ordner, in dem die beiden Konfigurationsdateien komprimiert wurden, mit gunzip -r, werden beide Dateien nacheinander entpackt.

gunzip -rv config
config/app.conf.gz:	 78.7% -- replaced with config/app.conf
config/site.conf.gz:	 87.7% -- replaced with config/site.conf
ls -l config/
total 8
-rw-r--r-- 1 root root 840 Oct 20 11:00 app.conf
-rw-r--r-- 1 root root 528 Oct 20 11:05 site.conf

-r komprimiert oder entpackt die Dateien eines Ordners einzeln und fasst nicht mehrere Dateien zu einer zusammen. Um einen Ordner in eine einzige komprimierte Datei zu verwandeln, nimmst du den tar-Befehl, der bündelt und dabei gleich komprimiert. Komprimierst du den config-Ordner mit tar -czf, landen der Ordner und beide Dateien in einer einzigen config.tar.gz.

tar -czf config.tar.gz config
tar -tzvf config.tar.gz
drwxr-xr-x root/root         0 2026-10-29 00:19 config/
-rw-r--r-- root/root       840 2026-10-20 11:00 config/app.conf
-rw-r--r-- root/root       528 2026-10-20 11:05 config/site.conf

📌 Wichtige Optionen: Ergebnisse aus diesem Artikel

OptionWas es tutErgebnis in diesem Artikel
-cGibt das Ergebnis auf der Standardausgabe aus und lässt die Originaldatei unverändertDie Ausgabe von -dc nach restore/memo.txt umgeleitet ergab eine 45 Byte große memo.txt
-dEntpacken (wie gunzip)access.log.gz verschwindet, und access.log mit 31878 Byte ist wieder da
-kBehält die Originaldatei nach dem Komprimieren oder Entpackenmemo.txt (45 Byte) und memo.txt.gz (71 Byte) liegen nebeneinander
-vGibt für jede Datei den Verkleinerungsanteil und den neuen Dateinamen ausreadme.txt: 81.5% -- replaced with readme.txt.gz
-lListet Größe, Anteil und Namen nach dem Entpacken komprimierter Dateien aufKomprimierte Größe 4424, Originalgröße 31878, Anteil 86.2%, Name access.log
-tPrüft, ob die komprimierte Datei unbeschädigt istMit -tv access.log.gz: OK, für broken.gz mit abgeschnittenem Ende unexpected end of file
-rKomprimiert oder entpackt alle Dateien in einem OrdnerEin einziges gunzip -rv config entpackt config/app.conf.gz und config/site.conf.gz
-fÜberschreibt ohne Rückfrage, auch wenn eine Datei mit demselben Namen existiertOhne Rückfrage überschrieben: memo.txt ist weg, nur memo.txt.gz (71 Byte) bleibt
-1 ~ -9Kompressionsstufe (-1 am schnellsten, -9 am kleinsten, Standard -6)Mit -1, -6 und -9 komprimierte Ausgaben mit wc -c gezählt: 5564, 4424, 4164

📎 Weitere Optionen: laut offiziellem Handbuch

OptionWas es tut
-NSpeichert beim Komprimieren den ursprünglichen Dateinamen und die Zeit (Standard beim Komprimieren) und stellt beim Entpacken den gespeicherten Namen und die Zeit wieder her
-nSpeichert beim Komprimieren den ursprünglichen Dateinamen und die Zeit nicht und verwendet beim Entpacken den Namen ohne .gz (Standard beim Entpacken)
-qGibt keinerlei Warnungen aus
-S EndungKomprimiert mit der angegebenen Endung statt .gz und sucht beim Entpacken zuerst nach dieser Endung
--rsyncableKomprimiert so, dass beim Abgleich komprimierter Dateien per rsync mit einem anderen Server nur die geänderten Teile übertragen werden

🔲 gzip-Befehl-Simulator

Im Simulator unten kannst du selbst eintippen, wie du mit gzip komprimierst, entpackst und den Inhalt mit zcat und zgrep ansiehst.

gzip-Befehl-Simulatorgzip 1.12
[root@server work]#
Er läuft nur im Browser und komprimiert keine echten Dateien. Die komprimierten Größen sind Messwerte, für im Simulator neu erstellte Inhalte werden Schätzwerte verwendet. Mit ↑↓ holst du frühere Befehle zurück.

4️⃣ Inhalt von gzip-Dateien ansehen

  • ↪️ zcat · zgrep

Ältere Logs, die mit Datum im Namen aufbewahrt werden, belegen weniger Platz, wenn du sie mit gzip komprimierst. Der Befehl unten komprimiert access.log-20261027, das Log vom Vortag.

gzip access.log-20261027

Ein komprimiertes Log gibst du mit zcat auf dem Bildschirm aus, ohne es zu entpacken. zcat ist derselbe Befehl wie gunzip -c (laut offiziellem Handbuch), daher bleibt die .gz-Datei erhalten.

zcat access.log-20261027.gz | head -3
192.0.2.50 - - [27/Oct/2026:00:00:00 +0000] GET / HTTP/1.1 200 15929
192.0.2.54 - - [27/Oct/2026:00:00:07 +0000] GET / HTTP/1.1 200 17699
192.0.2.4 - - [27/Oct/2026:00:00:14 +0000] GET / HTTP/1.1 200 13813

Die Ausgabe von zcat lässt sich per Pipe an andere Befehle weitergeben, und mit wc -l gezählt hat dieses Log 600 Zeilen.

zcat access.log-20261027.gz | wc -l
600

Um in einem komprimierten Log nach bestimmtem Text zu suchen, verwendest du zgrep. Mit -c erscheint nur die Zahl der Zeilen, die [ 404 ] enthalten; um die Zeilen selbst zu sehen, führst du es ohne -c aus.

zgrep -c ' 404 ' access.log-20261027.gz
37
zgrep ' 404 ' access.log-20261027.gz | head -3
192.0.2.23 - - [27/Oct/2026:00:02:06 +0000] GET /old-page-6/ HTTP/1.1 404 229
192.0.2.38 - - [27/Oct/2026:00:04:40 +0000] GET /old-page-2/ HTTP/1.1 404 217
192.0.2.22 - - [27/Oct/2026:00:07:42 +0000] GET /old-page-6/ HTTP/1.1 404 414

Bekommt zcat eine nicht komprimierte Datei, gibt es [not in gzip format] aus und bricht ab.

zcat access.log | head -1

gzip: access.log: not in gzip format

zgrep liest auch nicht komprimierte Dateien direkt, sodass du das aktuelle Log und die komprimierten älteren Logs in einem Durchgang durchsuchen kannst. Bei zwei oder mehr Dateien steht vor der Zeilenzahl der Dateiname.

zgrep -c wp-login.php access.log access.log-20261027.gz
access.log:36
access.log-20261027.gz:52

5️⃣ gzip-Fehler

  • ↪️ not in gzip format und unexpected end of file

Komprimierst du eine Datei, die bereits auf .gz endet, noch einmal, erscheint [already has .gz suffix -- unchanged], und die Datei bleibt unverändert.

gzip access.log.gz
gzip: access.log.gz already has .gz suffix -- unchanged

Umgekehrt erscheint [unknown suffix -- ignored], wenn du eine Datei, die nicht auf .gz endet, mit -d entpackst.

gzip -d memo.txt
gzip: memo.txt: unknown suffix -- ignored

Eine Datei, die nur .gz heißt, aber nicht mit gzip komprimiert wurde, endet mit [not in gzip format]. Diese Meldung erschien, als die Textdatei memo.txt unter dem Namen notgzip.gz kopiert und entpackt wurde.

cp memo.txt notgzip.gz
gzip -d notgzip.gz

gzip: notgzip.gz: not in gzip format

Eine .gz-Datei, deren Ende abgeschnitten ist, etwa durch einen abgebrochenen Download, endet mit [unexpected end of file]. Das ist das Ergebnis, als broken.gz, das nur die ersten 2.000 Byte eines komprimierten älteren Logs enthielt, mit -t geprüft wurde.

head -c 2000 access.log-20261027.gz > broken.gz
gzip -t broken.gz

gzip: broken.gz: unexpected end of file

Selbst aus einer abgeschnittenen Datei holt zcat den Inhalt bis zur Abbruchstelle heraus. Von dem 600 Zeilen langen Log blieben 162 Zeilen in restore/broken.log, und auch das offizielle Handbuch rät, den Anfang einer beschädigten komprimierten Datei mit zcat zu retten.

zcat broken.gz > restore/broken.log
wc -l restore/broken.log

gzip: broken.gz: unexpected end of file
162 restore/broken.log

Gibt es schon eine Datei mit demselben Namen wie die zu erstellende .gz-Datei, fragt gzip, ob sie überschrieben werden soll. Gibst du n ein, endet der Befehl mit [not overwritten], ohne etwas zu ändern.

gzip memo.txt
gzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
	not overwritten

Mit -f überschreibt gzip sofort ohne Rückfrage. Da -k nicht angegeben wurde, verschwindet memo.txt, und nur memo.txt.gz bleibt.

gzip -f memo.txt
ls -l memo.txt memo.txt.gz
ls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gz

Die Fehlermeldungen, die beim Arbeiten mit der Kompression auftraten, und was du als Nächstes prüfst, sind folgende.

AusgabeBedeutungAls Nächstes prüfen
already has .gz suffix -- unchangedDie Datei endet bereits auf .gz und wird nicht erneut komprimiertOb du den Namen der zu komprimierenden Originaldatei angegeben hast
unknown suffix -- ignoredEs wurde versucht, eine Datei zu entpacken, die nicht auf .gz endetDen Namen der .gz-Datei mit ls
not in gzip formatHeißt .gz, wurde aber nicht mit gzip komprimiertDas tatsächliche Format (zip, tar) und den passenden Befehl
unexpected end of fileDas Ende der komprimierten Datei ist abgeschnittenGröße mit dem Original vergleichen und neu herunterladen · den Anfang mit zcat retten
already exists; do you wish to overwriteEine Datei mit dem Namen der zu erstellenden Datei existiert bereitsy oder -f, wenn Überschreiben in Ordnung ist · zum Behalten -c mit anderem Namen
is a directory -- ignoredOrdnername statt Dateiname angegeben-r für die Dateien in einem Ordner · tar, um sie zu einer zu bündeln

🔢 FAQ & empfohlene Inhalte

Der config-Ordner wurde mit tar zu x.tar gebündelt, mit gzip -v komprimiert und mit gunzip -v entpackt: Übrig blieb ein 10.240 Byte großes x.tar, bei dem nur die .gz-Schicht entfernt war. Um die gebündelten Dateien herauszuholen, musst du es noch einmal mit tar entpacken. Als das erneut komprimierte x.tar.gz mit tar -xzf in den Ordner restore/t entpackt wurde, kamen der config-Ordner und beide Konfigurationsdateien in einem Schritt heraus.

Eine 28.648.800 Byte große Datei, in der dasselbe Zugriffslog 600-mal aneinandergehängt war, wurde auf jeder Stufe zweimal komprimiert. -1 brauchte etwa 0,3 Sekunden für 4.821.317 Byte, der Standard -6 etwa 0,65 Sekunden für 3.625.500 Byte und -9 etwa 2,5 Sekunden für 3.376.224 Byte. -9 war rund 7 % kleiner als -6, brauchte aber fast viermal so lange.

gzip speichert beim Komprimieren den ursprünglichen Dateinamen in der .gz-Datei. Nachdem readme.txt.gz als backup-1.gz in den restore-Ordner kopiert worden war, zeigte gzip -lN den gespeicherten Namen readme.txt, und gunzip -N legte restore/readme.txt an. Ohne -N ergibt sich der Dateiname ohne .gz (laut offiziellem Handbuch).

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 3   +   1   =