gzip: Linux'ta dosya sıkıştırma, gzip açma, gunzip ve zcat kullanımı
gzip, Linux'ta tek bir dosyayı .gz dosyasına sıkıştıran komuttur; açmak için aynı komuta -d eklersiniz ya da gunzip kullanırsınız. Bir AlmaLinux 9 sunucusunda 31.878 baytlık erişim günlüğü sıkıştırılınca 4.424 bayta indi, açıldığında ise özgün boyut ve değiştirme zamanı aynen geri geldi.
Aşağıdaki çıktılar bir AlmaLinux 9.8 sunucusunda root hesabıyla bir test klasöründe çalıştırılan sonuçlardır ve saatler UTC'dir. Erişim günlükleri, notlar ve yapılandırma dosyaları test için oluşturulmuş örnek dosyalardır; günlüklerdeki IP adresleri de belgeler için örnek değerlerdir.
1️⃣ gzip komutu nasıl kullanılır
Test klasöründe iki erişim günlüğü, iki not dosyası, yapılandırma dosyalarının bulunduğu config klasörü ve boş bir restore klasörü var.
ls -ltotal 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 restoregzip'in arkasına bir dosya adı yazdığınızda o dosya, adının sonuna .gz eklenmiş sıkıştırılmış bir dosyaya dönüşür. access.log'u sıkıştıran aşağıdaki komut bittiğinde ayrıca bir şey yazdırmaz.
gzip access.logSıkıştırmadan sonra ls -l ile bakınca access.log yoktur, yalnızca access.log.gz kalır. 31.878 baytlık günlük 4.424 bayt oldu ve değiştirme zamanı özgün dosyanınkiyle aynı kaldı.
ls -l access.log access.log.gzls: cannot access 'access.log': No such file or directory
-rw-r--r-- 1 root root 4424 Oct 28 23:50 access.log.gz-v eklerseniz her dosya için küçülme oranı ve yeni dosya adı gösterilir. readme.txt satırındaki [81.5%] özgün boyuta göre küçülme oranıdır, [replaced with] ise özgün dosyanın .gz dosyasıyla değiştirildiği anlamına gelir.
gzip -v readme.txtreadme.txt: 81.5% -- replaced with readme.txt.gzÖzgün dosyayı korumak için -k ekleyin. memo.txt'yi -k ile sıkıştırırsanız memo.txt ve memo.txt.gz yan yana kalır.
gzip -k memo.txtls -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.gz45 baytlık memo.txt sıkıştırmadan sonra tersine 71 bayta çıktı. Resmî kılavuza göre gzip, sonuç özgün dosyadan büyük olsa da sıkıştırır ve sıkıştırılmış dosyanın içine özgün dosya adını ve zamanını birlikte kaydeder.
Birden çok dosyayı aynı anda yazarsanız her dosya için ayrı bir .gz dosyası oluşur. config klasöründeki iki yapılandırma dosyasını sıkıştırınca app.conf.gz ve site.conf.gz adlı iki dosya oluşur.
gzip -v config/app.conf config/site.confconfig/app.conf: 78.7% -- replaced with config/app.conf.gz
config/site.conf: 87.7% -- replaced with config/site.conf.gzls -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.gz2️⃣ gzip açma
Sıkıştırılmış access.log.gz'yi -d ile açınca çıktı olmadan access.log yeniden oluşur ve access.log.gz kalmaz.
gzip -d access.log.gzls -l access.log access.log.gzls: cannot access 'access.log.gz': No such file or directory
-rw-r--r-- 1 root root 31878 Oct 28 23:50 access.logGeri gelen access.log 31.878 bayttır ve değiştirme zamanı da sıkıştırmadan önceki gibi Oct 28 23:50'dir.
gunzip, gzip -d ile aynı işi yapan komuttur. -k ile birlikte kullanılırsa sıkıştırılmış dosyayı koruyarak açar; -v satırındaki [created], .gz dosyası silinmeden yeni dosya oluşturulduğu anlamına gelir.
gunzip -kv readme.txt.gzreadme.txt.gz: 81.5% -- created readme.txtls -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.gzgzip'te açılacak klasörü belirleyen bir seçenek yoktur; başka bir klasöre açmak için -c ile açılan içeriği standart çıktıya gönderir ve [>] işaretinden sonra yeni dosyanın yolunu yazarsınız. Aşağıdaki komut memo.txt.gz'yi restore klasöründeki memo.txt olarak açar.
gzip -dc memo.txt.gz > restore/memo.txtls -l restore/total 4
-rw-r--r-- 1 root root 45 Oct 29 00:19 memo.txt-c ile açınca memo.txt.gz olduğu gibi kalır. Yeni oluşturulan restore/memo.txt dosyasının değiştirme zamanı, dosyanın oluşturulduğu Oct 29 00:19'dur.
3️⃣ gzip komutu seçenekleri
-l, sıkıştırılmış dosyayı açmadan sıkıştırılmış boyutu, özgün boyutu, küçülme oranını ve açıldığında alacağı adı tek satırda yazdırır. access.log'u -k ile yeniden sıkıştırıp -l ile bakınca sonuç aşağıdaki gibidir.
gzip -k access.loggzip -l access.log.gz compressed uncompressed ratio uncompressed_name
4424 31878 86.2% access.log-v de eklenirse başa sıkıştırma yöntemi (deflate kısaltması defla), özgün verinin CRC değeri ve özgün dosyanın tarihi ile saati eklenir.
gzip -lv access.log.gzmethod crc date time compressed uncompressed ratio uncompressed_name
defla b49b41c4 Oct 28 23:50 4424 31878 86.2% access.log-t yalnızca sıkıştırılmış dosyanın bozulup bozulmadığını denetler ve biter. -v ile birlikte kullanılırsa sorunsuz her dosyanın arkasında [OK] çıkar.
gzip -tv access.log.gzaccess.log.gz: OK-1'den -9'a kadarki sayılar sıkıştırma düzeyidir ve resmî kılavuza göre varsayılan -6'dır. Aynı access.log -c ile üç kez sıkıştırılıp boyutlar wc -c ile karşılaştırıldı.
gzip -c -1 access.log | wc -c5564gzip -c -6 access.log | wc -c4424gzip -c -9 access.log | wc -c4164| Sıkıştırma düzeyi | .gz boyutu | Özgün boyuta oranı |
|---|---|---|
| Özgün dosya (access.log) | 31.878 bayt | 100% |
| -1 (en hızlı) | 5.564 bayt | 17.5% |
| -6 (varsayılan) | 4.424 bayt | 13.9% |
| -9 (en küçük) | 4.164 bayt | 13.1% |
-9 varsayılandan 260 bayt küçük, -1 ise varsayılandan 1.140 bayt büyük çıktı.
Yalnızca klasör adını yazarsanız [is a directory -- ignored] çıkar ve klasör atlanır.
gunzip configgzip: config is a directory -- ignoredBir klasördeki tüm dosyaları işlemek için -r ekleyin. İki yapılandırma dosyasının sıkıştırıldığı config klasörünü gunzip -r ile açınca iki dosya sırayla açılır.
gunzip -rv configconfig/app.conf.gz: 78.7% -- replaced with config/app.conf
config/site.conf.gz: 87.7% -- replaced with config/site.confls -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, klasördeki dosyaları tek tek ayrı ayrı sıkıştırır ya da açar; birden çok dosyayı tek dosyada toplamaz. Bir klasörü tek bir sıkıştırılmış dosya yapmak için tar komutu ile paketleyip aynı anda sıkıştırın. config klasörünü tar -czf ile sıkıştırınca klasör ve iki dosya tek bir config.tar.gz içine girer.
tar -czf config.tar.gz configtar -tzvf config.tar.gzdrwxr-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📌 Başlıca seçenekler: bu yazıda çalıştırılan sonuçlar
| Seçenek | Görev | Bu yazıdaki sonuç | |
|---|---|---|---|
| -c | Sonucu standart çıktıya gönderir ve özgün dosyayı olduğu gibi bırakır | -dc çıktısını restore/memo.txt'ye yönlendirince 45 baytlık memo.txt oluştu | |
| -d | Açma (gunzip ile aynı) | access.log.gz kayboldu ve 31878 baytlık access.log geri geldi | |
| -k | Sıkıştırdıktan ya da açtıktan sonra özgün dosyayı korur | memo.txt (45 bayt) ve memo.txt.gz (71 bayt) yan yana kaldı | |
| -v | Her dosya için küçülme oranını ve yeni dosya adını yazdırır | readme.txt: 81.5% -- replaced with readme.txt.gz | |
| -l | Sıkıştırılmış dosyaların boyutunu, oranını ve açılınca alacağı adı liste olarak yazdırır | Sıkıştırılmış boyut 4424, özgün boyut 31878, oran 86.2%, ad access.log | |
| -t | Sıkıştırılmış dosyanın bozulup bozulmadığını denetler | -tv ile access.log.gz: OK, sonu kesilmiş broken.gz için unexpected end of file | |
| -r | Klasördeki tüm dosyaları sıkıştırır ya da açar | Tek bir gunzip -rv config ile config/app.conf.gz ve config/site.conf.gz açıldı | |
| -f | Aynı adlı dosya olsa da sormadan üzerine yazar | Sorulmadan üzerine yazıldı; memo.txt yok, yalnızca memo.txt.gz (71 bayt) kaldı | |
| -1 ~ -9 | Sıkıştırma düzeyi (-1 en hızlı, -9 en küçük, varsayılan -6) | -1, -6 ve -9 ile sıkıştırılan çıktılar wc -c ile sayıldı: 5564, 4424, 4164 |
📎 Diğer seçenekler: resmî kılavuza göre
| Seçenek | Görev | |
|---|---|---|
| -N | Sıkıştırırken özgün dosya adını ve zamanını kaydeder (sıkıştırmada varsayılan), açarken kaydedilen ad ve zamanla geri getirir | |
| -n | Sıkıştırırken özgün dosya adını ve zamanını kaydetmez, açarken yalnızca .gz atılmış adı kullanır (açmada varsayılan) | |
| -q | Hiçbir uyarıyı yazdırmaz | |
| -S sonek | .gz yerine belirtilen soneki ekleyerek sıkıştırır, açarken önce o soneki arar | |
| --rsyncable | Sıkıştırılmış dosyalar rsync ile başka bir sunucuyla eşitlenirken yalnızca değişen kısımlar gönderilecek biçimde sıkıştırır |
🔲 gzip komutu simülatörü
Aşağıdaki simülatörde gzip ile sıkıştırma, açma ve zcat ile zgrep kullanarak içeriği görme adımlarını kendiniz yazarak deneyebilirsiniz.
4️⃣ gzip dosyasının içeriğini görme
Tarihle saklanan eski günlükler gzip ile sıkıştırılırsa daha az yer kaplar. Aşağıdaki komut bir önceki günün günlüğü olan access.log-20261027'yi sıkıştırır.
gzip access.log-20261027Sıkıştırılmış günlüğü açmadan zcat ile ekrana yazdırırsınız. zcat, gunzip -c ile aynı komut olduğundan (resmî kılavuza göre) .gz dosyası olduğu gibi kalır.
zcat access.log-20261027.gz | head -3192.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 13813zcat çıktısı boru ile başka komutlara aktarılabilir; wc -l ile sayınca bu günlük 600 satırdır.
zcat access.log-20261027.gz | wc -l600Sıkıştırılmış günlükte belirli bir metni aramak için zgrep kullanılır. -c eklenirse yalnızca [ 404 ] içeren satırların sayısı çıkar; satırların kendisini görmek için -c olmadan çalıştırın.
zgrep -c ' 404 ' access.log-20261027.gz37zgrep ' 404 ' access.log-20261027.gz | head -3192.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 414zcat sıkıştırılmamış bir dosya alınca [not in gzip format] yazdırır ve durur.
zcat access.log | head -1
gzip: access.log: not in gzip formatzgrep sıkıştırılmamış dosyaları da olduğu gibi okur; böylece şu an kullanılan günlükle sıkıştırılmış eski günlüklerde bir kerede arama yapabilirsiniz. İki veya daha fazla dosya yazarsanız satır sayısının önüne dosya adı eklenir.
zgrep -c wp-login.php access.log access.log-20261027.gzaccess.log:36
access.log-20261027.gz:525️⃣ gzip hataları
Zaten .gz ile biten bir dosyayı yeniden sıkıştırırsanız [already has .gz suffix -- unchanged] çıkar ve dosya olduğu gibi kalır.
gzip access.log.gzgzip: access.log.gz already has .gz suffix -- unchangedTersine, .gz ile bitmeyen bir dosyayı -d ile açarsanız [unknown suffix -- ignored] çıkar.
gzip -d memo.txtgzip: memo.txt: unknown suffix -- ignoredYalnızca adı .gz olan ama gzip ile sıkıştırılmamış dosya [not in gzip format] ile biter. Metin dosyası memo.txt, notgzip.gz adıyla kopyalanıp açılınca bu ileti çıktı.
cp memo.txt notgzip.gzgzip -d notgzip.gz
gzip: notgzip.gz: not in gzip formatİndirme yarıda kesildiği için sonu eksik kalan .gz dosyası [unexpected end of file] ile biter. Sıkıştırılmış eski bir günlüğün yalnızca ilk 2.000 baytını içeren broken.gz -t ile denetlendiğinde sonuç budur.
head -c 2000 access.log-20261027.gz > broken.gzgzip -t broken.gz
gzip: broken.gz: unexpected end of fileKesilmiş bir dosyada bile zcat ile açarak kesildiği yere kadarki içeriği çıkarabilirsiniz. 600 satırlık günlükten 162 satır restore/broken.log içinde kaldı; resmî kılavuz da bozuk sıkıştırılmış dosyanın baş kısmını zcat ile kurtarmayı önerir.
zcat broken.gz > restore/broken.logwc -l restore/broken.log
gzip: broken.gz: unexpected end of file
162 restore/broken.logOluşturulacak .gz dosyasıyla aynı adlı bir dosya zaten varsa gzip üzerine yazıp yazmayacağını sorar. n yazarsanız [not overwritten] ile hiçbir şeyi değiştirmeden biter.
gzip memo.txtgzip: memo.txt.gz already exists; do you wish to overwrite (y or n)? n
not overwritten-f eklerseniz sormadan hemen üzerine yazar. -k eklenmediği için memo.txt kaybolur, yalnızca memo.txt.gz kalır.
gzip -f memo.txtls -l memo.txt memo.txt.gzls: cannot access 'memo.txt': No such file or directory
-rw-r--r-- 1 root root 71 Oct 28 14:30 memo.txt.gzSıkıştırmayla uğraşırken çıkan hata iletileri ve ardından denetlenecekler aşağıdaki gibidir.
| Çıktı | Anlamı | Sonra kontrol edilecek |
|---|---|---|
| already has .gz suffix -- unchanged | Dosya zaten .gz ile bittiği için yeniden sıkıştırılmaz | Sıkıştırılacak özgün dosyanın adını yazdınız mı |
| unknown suffix -- ignored | .gz ile bitmeyen bir dosya açılmaya çalışıldı | ls ile .gz dosyasının adı |
| not in gzip format | Adı .gz ama gzip ile sıkıştırılmış dosya değil | Gerçek biçim (zip, tar) ve ona uygun komut |
| unexpected end of file | Sıkıştırılmış dosyanın sonu kesilmiş | Boyutu özgünle karşılaştırıp yeniden indirme · zcat ile baş kısmı kurtarma |
| already exists; do you wish to overwrite | Oluşturulacak dosyayla aynı adlı bir dosya zaten var | Üzerine yazılabilirse y ya da -f · korumak için -c ile başka ad |
| is a directory -- ignored | Dosya yerine klasör adı yazıldı | Klasördeki dosyalar için -r · tek dosyada toplamak için tar |
🔢 SSS & önerilen içerikler
Ara
Linux grep komutu
Günlük gibi metin dosyalarında istenen dizgiyi bulan grep komutu. tail ve find ile boru üzerinden birlikte kullanma örnekleri de var.
Disk
du komutu: Dosyaların disk alanını kontrol etme
Dosya ve dizinlerin diskte ne kadar yer kapladığını denetleyen du komutu.
Dosya görüntüleme
Linux head komutu ve tail komutu
Dosyanın ilk ve son satırlarını gösteren head ve tail komutları. Sunucu erişim günlüklerini denetlerken sık kullanılır.
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.