Linux dünyasında sıkıştırma araçları söz konusu olduğunda çoğu sysadmin hemen tar, gzip veya bzip2‘ye uzanır. Bunlar güvenilir araçlar, kimse bir şey demez. Ama eğer ciddi sıkıştırma oranları istiyorsanız, büyük yedekleme dosyalarıyla uğraşıyorsanız ya da Windows sistemleriyle sürekli dosya alışverişi yapıyorsanız, 7-Zip masaya farklı bir şey koyuyor. LZMA2 algoritması, AES-256 şifreleme desteği ve çoklu format esnekliğiyle 7-Zip, Linux terminalinde gerçek anlamda güçlü bir silah haline gelebilir. Gelin bu aracı sadece yüzeysel değil, gerçekten derinlemesine tanıyalım.
7-Zip Nedir ve Neden Kullanmalısınız?
7-Zip, Igor Pavlov tarafından geliştirilen ve GNU LGPL lisansıyla dağıtılan açık kaynaklı bir sıkıştırma aracıdır. Windows dünyasında .7z uzantısıyla tanınır ama Linux’ta p7zip paketi aracılığıyla tam kapasitesiyle çalışır.
Klasik araçlara göre avantajlarını sıralayalım:
- LZMA ve LZMA2 algoritması: Özellikle metin tabanlı dosyalarda gzip’e kıyasla yüzde 30-70 daha iyi sıkıştırma oranı
- AES-256 şifreleme: Yedek dosyalarınızı şifreli tutmak için ayrı bir araca gerek yok
- Geniş format desteği: 7z, zip, tar, gzip, bzip2, xz, iso, rpm, deb gibi onlarca formatı açabilir
- Çok çekirdek desteği: LZMA2 ile paralel sıkıştırma yapabilirsiniz
- Ücretsiz ve açık kaynak: Lisans sorunu yok
Özellikle yedekleme scriptleri yazarken ya da büyük log dosyası arşivlerini yönetirken bu avantajlar çok somut hale geliyor.
Kurulum
Çoğu dağıtımda p7zip ve p7zip-full paketleri üzerinden kurulum yapılır. p7zip temel paketi içerirken p7zip-full ek codec’ler ve formatlar için gereklidir.
# Debian/Ubuntu tabanlı sistemler
sudo apt update
sudo apt install p7zip p7zip-full p7zip-rar
# RHEL/CentOS/Fedora
sudo dnf install p7zip p7zip-plugins
# Arch Linux
sudo pacman -S p7zip
# Kurulumu doğrula
7z i | head -20
Kurulumdan sonra iki komut kullanabilirsiniz: 7z (tam özellikli) ve 7za (bağımsız çalışan, daha az format desteği). Günlük kullanımda 7z tercih edin.
Temel Komut Yapısı
7-Zip’in komut yapısı biraz farklı, özellikle tar’a alışkınsanız. Genel sözdizimi şöyle:
7z [komut] [seçenekler] [arşiv_adı] [dosya/dizinler]
Temel komutlar:
- a: Arşive dosya ekle (add)
- e: Arşivden dosyaları mevcut dizine çıkar (extract)
- x: Arşivden dosyaları tam dizin yapısıyla çıkar (extract with full paths)
- l: Arşiv içeriğini listele (list)
- t: Arşiv bütünlüğünü test et (test)
- d: Arşivden dosya sil (delete)
- u: Arşivi güncelle (update)
Arşiv Oluşturma
En temel kullanım, bir dizini arşivlemek:
# Basit arşiv oluşturma
7z a yedek.7z /home/kullanici/belgeler/
# Birden fazla kaynak eklemek
7z a proje_yedek.7z /var/www/html/ /etc/nginx/ /etc/ssl/
# Wildcard ile belirli dosyaları arşivlemek
7z a log_arsiv.7z /var/log/*.log
Çıktıya bakarsanız 7-Zip size dosya sayısını, toplam boyutu ve sıkıştırma oranını gösterir. Bunu görünce neden kullandığınızı daha iyi anlarsınız.
Sıkıştırma Seviyeleri ve Yöntemleri
Bu kısım çoğu rehberin atladığı yerdir. 7-Zip’in sıkıştırma seviyesini -mx parametresiyle ayarlarsınız:
- -mx0: Sıkıştırma yok, sadece arşivleme
- -mx1: En hızlı, en düşük oran
- -mx3: Hızlı sıkıştırma
- -mx5: Normal (varsayılan)
- -mx7: Maksimum
- -mx9: Ultra sıkıştırma
# Hızlı sıkıştırma (CI/CD pipeline'ları için ideal)
7z a -mx1 hizli_yedek.7z /var/www/
# Ultra sıkıştırma (uzun sürer ama küçük dosya)
7z a -mx9 ultra_arsiv.7z /home/kullanici/
# Sıkıştırma yöntemi belirtmek
7z a -mm=LZMA2 -mx9 lzma2_arsiv.7z /data/
Gerçek dünya senaryosu: Bir müşteride aylık veritabanı yedeklerini gzip ile sıkıştırıyorduk, 15 GB civarında çıkıyordu. -mx7 ile 7-Zip’e geçince aynı dump 8.5 GB’a indi. S3 depolama maliyeti ayda kayda değer düştü. Bu tür optimizasyonlar küçük gibi görünür ama yüzlerce yedek dosyasında toplanınca ciddi para eder.
Şifreleme ile Güvenli Arşiv
7-Zip’in en değerli özelliklerinden biri AES-256 şifrelemesidir. Üstelik sadece dosya içeriklerini değil, dosya adlarını da şifreleyebilirsiniz.
# Şifreli arşiv oluşturma (şifre sorulur)
7z a -p gizli_yedek.7z /home/kullanici/ozel/
# Komut satırında şifre belirtmek (script kullanımı için)
7z a -pGucluSifre123! gizli_yedek.7z /home/kullanici/ozel/
# Dosya adlarını da şifrelemek (-mhe=on kritik özellik)
7z a -p -mhe=on tamamen_gizli.7z /home/kullanici/ozel/
-mhe=on parametresi çok önemli. Bu olmadan arşivi açmadan içindeki dosya adlarını görebilirsiniz. Hassas veri yedeklerinde mutlaka kullanın. Bir pentest sırasında şifresiz ama şifreli içerikli arşivlerin dosya adlarından bile bilgi sızdırdığını gördüm, bu yüzden vurguluyorum.
Şifreli arşivi açarken:
# Şifre ile çıkarma
7z x -pGucluSifre123! tamamen_gizli.7z
Çoklu Format Desteği
7-Zip’i sadece .7z dosyaları için kullanmak büyük israftır. Zip, tar, iso ve daha fazlasını yönetebilirsiniz:
# ZIP formatında arşiv oluşturma (Windows uyumluluğu için)
7z a -tzip windows_uyumlu.zip /home/kullanici/belgeler/
# TAR arşivi oluşturma
7z a -ttar arsiv.tar /var/log/
# Bir formatı başka bir formata dönüştürme
7z x eski_arsiv.tar.gz -so | 7z a -si -tzip yeni_arsiv.zip
# ISO dosyasının içeriğini listeleme
7z l sistem.iso
# Deb paketini açma
7z x paket.deb
Sistem yönetiminde bu çok işe yarıyor. Birisi size Windows’tan zip gönderdi mi, birisi deb açmanızı istedi mi, hepsi aynı komutla halloluyor.
Arşiv Yönetimi Komutları
# Arşiv içeriğini listeleme
7z l yedek.7z
# Detaylı listeleme (boyut, tarih, özellikler)
7z l -slt yedek.7z
# Arşiv bütünlüğü testi (kritik yedek kontrolü)
7z t yedek.7z
# Arşivden tek dosya çıkarma
7z e yedek.7z config/nginx.conf
# Arşivden belirli bir dizini çıkarma
7z x yedek.7z -o/tmp/geri_yukleme/ home/kullanici/belgeler/
# Arşive yeni dosya ekleme
7z a mevcut_arsiv.7z yeni_dosya.txt
# Arşivden dosya silme
7z d arsiv.7z gereksiz_dosya.log
-o parametresiyle çıkarma dizinini belirtebilirsiniz, bu çok kullanışlı. Mevcut dizini karıştırmadan önce /tmp altına çıkarmak iyi bir alışkanlık.
Çok Parçalı Arşiv Oluşturma
Büyük dosyaları e-posta ile göndermek veya belirli boyut sınırı olan sistemlere transfer etmek için çok parçalı arşiv şart:
# 500MB parçalara bölme
7z a -v500m buyuk_yedek.7z /data/veritabani/
# 1GB parçalar
7z a -v1g cok_parcali.7z /var/lib/mysql/
# Parçaları birleştirip çıkarma
7z x buyuk_yedek.7z.001
7-Zip parçaları otomatik olarak .001, .002, .003 şeklinde isimlendirir. Çıkarırken sadece ilk parçayı (001) belirtmeniz yeterli, geri kalanları otomatik bulur.
Paralel Sıkıştırma ve Performans Ayarları
Sunucunuzda birden fazla çekirdek varsa bunu kullanmak isteyeceksiniz:
# İş parçacığı sayısını belirtmek
7z a -mmt4 arsiv.7z /data/
# Tüm çekirdekleri kullanmak
7z a -mmt=on arsiv.7z /data/
# Sözlük boyutunu ayarlamak (daha büyük = daha iyi sıkıştırma ama daha fazla RAM)
7z a -md=256m -mmt=on buyuk_arsiv.7z /data/
# Kelime boyutu (word size)
7z a -mfb=273 -md=256m maksimum.7z /data/
Bellek kullanımına dikkat edin. -md=256m ile 256MB sözlük kullanıyorsanız bu her iş parçacığı için ayrılır. 4 çekirdekle çalışıyorsanız 1GB+ RAM kullanabilir. Üretim sunucusunda bunu gece saatlerinde çalıştırın.
Gerçek Dünya Senaryosu: Yedekleme Scripti
İşte gerçekten kullandığım türden bir yedekleme scripti:
#!/bin/bash
# Gelişmiş Yedekleme Scripti
TARIH=$(date +%Y%m%d_%H%M%S)
YEDEK_DIZIN="/backup/arsivler"
LOG_DOSYA="/var/log/yedek.log"
SIFRE="SuperGucluSifre_Degistir!"
# MySQL dump al
mysqldump --all-databases -u root -pDatabaseSifre > /tmp/tum_db_${TARIH}.sql
# Sıkıştır ve şifrele
7z a
-mx7
-mmt=on
-mhe=on
-p${SIFRE}
${YEDEK_DIZIN}/db_yedek_${TARIH}.7z
/tmp/tum_db_${TARIH}.sql
/etc/
/var/www/
# Bütünlük kontrolü
if 7z t ${YEDEK_DIZIN}/db_yedek_${TARIH}.7z -p${SIFRE} > /dev/null 2>&1; then
echo "[${TARIH}] Yedek basarili: db_yedek_${TARIH}.7z" >> ${LOG_DOSYA}
rm /tmp/tum_db_${TARIH}.sql
else
echo "[${TARIH}] HATA: Yedek bozuk!" >> ${LOG_DOSYA}
fi
# 30 günden eski yedekleri sil
find ${YEDEK_DIZIN} -name "*.7z" -mtime +30 -delete
echo "Yedekleme tamamlandi."
Bu scripti crontab’a ekleyip geceleri çalıştırabilirsiniz. Bütünlük kontrolü kısmı kritik, sıkıştırma sırasında disk dolu olursa ya da başka bir hata oluşursa bozuk bir yedek dosyası kalabilir.
Gerçek Dünya Senaryosu: Log Arşivleme
Web sunucularında log dosyaları hızlı büyür. İşte aylık log arşivleme için kullandığım bir yaklaşım:
#!/bin/bash
# Log rotasyonu ve arşivleme
AY=$(date -d "last month" +%Y%m)
LOG_KAYNAK="/var/log/nginx"
ARSIV_HEDEF="/arsiv/nginx-logs"
# Geçen aya ait logları bul ve arşivle
find ${LOG_KAYNAK} -name "*.log.*" -mtime +30 |
xargs 7z a
-mx9
-mmt=on
${ARSIV_HEDEF}/nginx_${AY}.7z
# Arşivlenen orijinal dosyaları sil
if 7z t ${ARSIV_HEDEF}/nginx_${AY}.7z > /dev/null 2>&1; then
find ${LOG_KAYNAK} -name "*.log.*" -mtime +30 -delete
echo "Log arsivleme basarili: nginx_${AY}.7z"
fi
Log dosyaları tekrarlı verilerden oluştuğu için sıkıştırma oranları inanılmaz olabilir. 10GB log dosyası 7-Zip ile 400-500MB’a inebilir, bu bir şaka değil.
Hariç Tutma ve Filtreleme
Büyük dizinleri arşivlerken bazı dosyaları veya dizinleri hariç tutmak isteyebilirsiniz:
# Belirli uzantıları hariç tut
7z a arsiv.7z /var/www/ -xr!*.tmp -xr!*.cache
# Belirli dizinleri hariç tut
7z a site_yedek.7z /var/www/html/
-xr!node_modules
-xr!.git
-xr!vendor
# Belirli bir dosyayı hariç tut
7z a yedek.7z /home/kullanici/ -x!.bash_history
# Dosya listesinden ekleme
find /var/www -name "*.php" > dosya_listesi.txt
7z a php_dosyalari.7z @dosya_listesi.txt
-xr! sözdizimi özellikle önemli. r harfi recursive (özyinelemeli) anlamına gelir, yani alt dizinlerde de bu filtreyi uygular. Node.js projeleri yedeklerken node_modules hariç tutmak zorunlu, yoksa saatler sürebilir.
Arşiv Kıyaslaması: Hangi Durumda Ne Kullanmalı
Pratikte şu yaklaşımı benimsiyorum:
- Hızlı transferler ve geçici arşivler:
-mx1veya-mx3yeterli, zaman önemli - Uzun dönem yedekler:
-mx7ile iyi oran/süre dengesi - Kritik ve nadir erişilen arşivler:
-mx9 -mmt=onile maksimum sıkıştırma - Çapraz platform paylaşım:
-tzipile ZIP formatı - Hassas veriler:
-p -mhe=onile tam şifreleme
Sıkıştırma seviyesini körü körüne en yükseğe almayın. -mx9 ile -mx7 arasındaki fark genellikle yüzde 2-5 iken süre iki kat artabilir. Bu denge üretim ortamında önemli.
Sık Karşılaşılan Sorunlar ve Çözümleri
Birkaç sıkça yaşanan sorunu ve çözümlerini paylaşayım:
“No space left on device” hatası
Sıkıştırma sırasında geçici dosyalar için yer gerekir. /tmp doluysa hata alırsınız:
# Geçici dizin değiştirme
TMPDIR=/data/tmp 7z a buyuk_arsiv.7z /kaynak/
Sembolik linklerin korunması
7z sembolik linkleri her zaman doğru taşımaz. Sembolik link içeren dizinler için tar + 7z kombinasyonu daha güvenli:
tar cf - /dizin_semlink_ile/ | 7z a -si arsiv.7z
Arşiv bütünlüğü hatası
Yarıda kalan bir arşivi test etmek ve kurtarmak:
# Test et
7z t bozuk_olabilir.7z
# Mevcut dosyaları kurtar
7z e -y bozuk_olabilir.7z -o/tmp/kurtarma/
İpuçları ve Kısayollar
Günlük kullanımı kolaylaştıracak birkaç ipucu:
# .bashrc veya .bash_aliases dosyasına eklenebilecek fonksiyonlar
# Hızlı arşivleme fonksiyonu
7zarc() {
7z a -mx7 -mmt=on "${1}.7z" "$1"
}
# Hızlı çıkarma fonksiyonu
7zext() {
7z x "$1" -o"${1%.*}/"
}
# Arşiv içeriğini renkli listele
alias 7zls='7z l'
Bu fonksiyonları .bashrc‘ye eklerseniz 7zarc dizin_adi komutuyla anında arşiv oluşturabilirsiniz.
Sonuç
7-Zip Linux’ta göz ardı edilen güçlü bir araç. tar ve gzip alışkanlığı bizi çoğu zaman daha iyi alternatifleri denemekten alıkoyuyor. Oysa ciddi bir yedekleme altyapısı kuruyorsanız, büyük log dosyalarını yönetiyorsanız veya hassas verileri şifreli arşivlemeniz gerekiyorsa 7-Zip gerçek bir fark yaratıyor.
LZMA2 algoritmasının sıkıştırma oranları, AES-256 şifreleme desteği, çoklu çekirdek kullanımı ve geniş format uyumluluğu bir arada bulunduğunda rakibi az araç var. Üsterine üstlük ücretsiz ve açık kaynak.
Tavsiyem şu: Mevcut yedekleme scriptlerinizden birini alın, 7-Zip versiyonunu deneyin ve boyut farklarına bakın. Büyük ihtimalle disk ve bant genişliği tasarrufunu gördükten sonra geçiş kararını kendiniz vereceksiniz. Yedekleme altyapısı söz konusu olduğunda her gigabyte’ın maliyeti ve her saniyenin değeri var.