Linux Komut Satırını Kullanarak .tar.gz Dosyaları Nasıl Çıkarılır
Bir .tar.gz dosyası, iki farklı işlemin birleştirilmesiyle oluşturulan sıkıştırılmış bir arşivdir: birden fazla dosya ve dizini tek bir arşivde bir araya getiren tar (Tape Archive) ve boyutunu küçültmek için bu arşivi sıkıştıran gzip. Sonuç, neredeyse tüm Linux ve Unix benzeri ortamlarda yazılım, yapılandırma paketleri ve sistem yedeklerinin dağıtımı için fiili standart olan taşınabilir, alan açısından verimli bir paket formatıdır.
Bir .tar.gz arşivini çıkarmak için standart komut `tar -xzvf archive-name.tar.gz`’dir. Her bayrağın ne işe yaradığını — ve bu varsayılandan ne zaman sapılacağını — anlamak, yetkin bir sistem yöneticisini internetten körü körüne komut yapıştıran birinden ayıran şeydir.
.tar.gz Formatını Anlamak
Herhangi bir komut çalıştırmadan önce, aslında neyle uğraştığınızı anlamak faydalıdır. `.tar.gz` formatı (`.tgz` olarak da yazılır) iki aşamalı bir süreçtir:
- `tar` dosyaları toplar, dizin yapısını, izinleri, sahipliği ve sembolik bağlantıları tek bir düz dosyada korur.
- `gzip` bu düz dosyayı DEFLATE algoritmasını kullanarak sıkıştırır; metin ağırlıklı içeriklerde genellikle %60–70 boyut küçültmesi sağlar.
Bu iki aşamalı mimari, `-z` (gzip) ve `-x` (çıkarma) bayraklarının ikisinin de neden gerekli olduğunu açıklar. Hiçbir araç tek başına tüm işi yapamaz. Modern Linux sistemlerinde `tar`, `–auto-compress` aracılığıyla veya yalnızca dosyanın sihirli baytlarını okuyarak sıkıştırma türünü otomatik olarak algılayacak kadar akıllıdır; ancak betikler ve otomasyon hatlarında bayraklarla açık olmak her zaman daha güvenli bir uygulamadır.
Temel Sözdizimi ve Bayrak Referansı
“`bash
tar -xzvf archive-name.tar.gz
“`
| Bayrak | Uzun Form | İşlev |
|---|
| —— | ———– | ———- |
|---|
| `-x` | `–extract` | Dosyaları arşivden çıkarır |
|---|
| `-z` | `–gzip` | Arşivi gzip açma işleminden geçirir |
|---|
| `-v` | `–verbose` | İşlenen her dosya adını yazdırır |
|---|
| `-f` | `–file=ARCHIVE` | Arşiv dosya adını belirtir (dosya adından hemen önce gelmelidir) |
|---|
| `-C` | `–directory=DIR` | Belirli bir hedef dizine çıkarır |
|---|
| `-t` | `–list` | Çıkarmadan arşiv içeriğini listeler |
|---|
| `-p` | `–preserve-permissions` | Orijinal dosya izinlerini tam olarak geri yükler |
|---|
| `–strip-components=N` | — | Dosya adlarından N baştaki yol bileşenini kaldırır |
|---|
Kritik ayrıntı: `-f` bayrağı her zaman dosya adından önceki son bayrak olmalıdır. `tar -xvzf` ve `tar -xzvf` yazmak ikisi de geçerlidir, ancak `tar -fxzv archive.tar.gz` başarısız olur çünkü `-f` bir sonraki argümanın arşiv yolu olmasını bekler.
Adım Adım Çıkarma Kılavuzu
1. Bir Terminal Açın
Çoğu masaüstü Linux dağıtımında `Ctrl + Alt + T` tuşlarına basın. SSH aracılığıyla erişilen başsız bir sunucuda zaten bir terminal oturumundasınızdır.
2. Arşivinizi Bulun
“`bash
ls -lh /path/to/directory
“`
Dosyanın var olduğunu doğrulayın ve boyutunu not edin. `-h` bayrağı boyutları insan tarafından okunabilir biçimde (KB, MB, GB) gösterir.
3. Yerinde Çıkarın
Arşivi içeren dizine gidin, ardından çıkarın:
“`bash
cd /path/to/directory
tar -xzvf archive-name.tar.gz
“`
Çıkarılan dosyalar, genellikle arşivin iç yapısını yansıtan bir alt dizin içinde mevcut çalışma dizininde görünecektir.
4. Belirli Bir Dizine Çıkarın
Çıktıyı herhangi bir hedef yola yönlendirmek için `-C` bayrağını kullanın. Hedef mevcut değilse önce oluşturun:
“`bash
mkdir -p /opt/myapp
tar -xzvf archive-name.tar.gz -C /opt/myapp
“`
`mkdir` üzerindeki `-p` bayrağı, dizin zaten mevcutsa hataları önler — betiklerde iyi bir alışkanlıktır.
Örnek — bir web uygulaması arşivini dağıtmak:
“`bash
mkdir -p ~/deployments/webapp-v2
tar -xzvf webapp-v2.tar.gz -C ~/deployments/webapp-v2
“`
5. Ayrıntılı Çıktı Olmadan Çıkarın
Otomatik betiklerde, cron işlerinde veya CI/CD hatlarında, ayrıntılı çıktı günlüklerde gürültü oluşturur. `-v` bayrağını kaldırın:
“`bash
tar -xzf archive-name.tar.gz -C /opt/myapp
“`
Bu, üretim otomasyonunda tercih edilen formdur. Ayrıntılı mod, hangi dosyaların yazıldığını doğrulamanız gerektiğinde etkileşimli olarak kullanışlıdır.
Çıkarmadan Arşiv İçeriğini Listeleme
Tanımadığınız bir arşivi çıkarmadan önce — özellikle harici bir kaynaktan indirilen birini — her zaman önce içeriğini inceleyin. Bazı arşivler mutlak yollu veya üst düzey dizini olmayan dosyalar içerebilir; bu da dosyaların beklenmedik şekilde dosya sisteminize dağılmasına neden olabilir.
“`bash
tar -tzvf archive-name.tar.gz
“`
Çıktı `/` veya `..` ile başlayan yollar gösteriyorsa, dikkatli çıkarın veya yolları temizlemek için `–strip-components` kullanın.
Üst düzey dizin sarmalayıcısını kontrol etmek için:
“`bash
tar -tzf archive-name.tar.gz | head -20
“`
Tüm yollar ortak bir ön ek paylaşıyorsa (örn. `myapp-1.0/`), çıkarma temizdir. Aksi takdirde, özel bir dizin oluşturun ve dosya dağılmasını önlemek için `-C` ile içine çıkarın.
Şerit Bileşenlerini Yönetme
Gerçek dünyada yaygın bir senaryo: her şeyi `project-main/` içine saran bir GitHub kaynak tarball’ı indiriyorsunuz, ancak içeriğin o ekstra iç içe geçme katmanı olmadan doğrudan `/opt/project/` içinde olmasını istiyorsunuz.
“`bash
tar -xzvf project-main.tar.gz -C /opt/project –strip-components=1
“`
`–strip-components=1` çıkarılan her dosyadan ilk yol segmentini kaldırarak üst düzey dizini etkin bir şekilde “açar”. Bu, dağıtım betiklerinde ve Dockerfile’larda yaygın olarak kullanılır.
Arşivden Tek Dosya veya Dizin Çıkarma
Her zaman her şeyi çıkarmanız gerekmez. Belirli bir dosyayı çekmek için:
“`bash
tar -xzvf archive-name.tar.gz path/to/specific-file.conf
“`
Belirli bir dizini ve tüm içeriğini çıkarmak için:
“`bash
tar -xzvf archive-name.tar.gz path/to/specific-directory/
“`
Yol, `tar -tzf`’ın raporladığıyla tam olarak eşleşmelidir. Bu teknik, gigabaytlarca veriyi açmadan büyük bir yedek arşivinden tek bir yapılandırma dosyasını kurtarırken son derece değerlidir.
gzip Sıkıştırması Olmadan .tar Dosyalarını Çıkarma
Düz bir `.tar` dosyasının sıkıştırma katmanı yoktur. `-z` bayrağını tamamen kaldırın:
“`bash
tar -xvf archive-name.tar
“`
Karşılaştırma: .tar.gz ve Diğer Yaygın Arşiv Formatları
| Format | Uzantı | Sıkıştırma Algoritması | Sıkıştırma Oranı | Hız | Tar Gerekli mi |
|---|
| ——– | ———– | ———————– | ——————- | ——- | ————– |
|---|
| Gzip tarball | `.tar.gz` / `.tgz` | DEFLATE (gzip) | Orta | Hızlı | Evet |
|---|
| Bzip2 tarball | `.tar.bz2` | Burrows-Wheeler (bzip2) | Yüksek | Yavaş | Evet |
|---|
| XZ tarball | `.tar.xz` | LZMA2 (xz) | Çok Yüksek | Çok Yavaş | Evet |
|---|
| Zstandard tarball | `.tar.zst` | Zstandard | Yüksek | Çok Hızlı | Evet |
|---|
| ZIP arşivi | `.zip` | DEFLATE | Orta | Hızlı | Hayır |
|---|
| Düz tar | `.tar` | Yok | Yok | En Hızlı | Evet |
|---|
Temel içgörü: `.tar.xz` artık Linux dağıtım paketleri (çekirdek kaynağı, RPM/DEB kaynak tarball’ları) için üstün sıkıştırma oranı nedeniyle tercih edilen formattır. Ancak `.tar.gz`, evrensel araç zinciri desteği ve çıkarma hızı nedeniyle genel amaçlı dağıtımda baskın olmaya devam etmektedir. `.tar.zst` (Zstandard), sıkıştırma oranı ve hız arasındaki olağanüstü dengesi nedeniyle Arch Linux gibi modern dağıtımlarda giderek daha fazla yer kazanmaktadır.
Bu alternatif formatları çıkarmak için `-z`’i uygun bayrakla değiştirin:
“`bash
tar -xjvf archive.tar.bz2 # bzip2
tar -xJvf archive.tar.xz # xz/lzma
tar -x –zstd -vf archive.tar.zst # zstandard (GNU tar 1.31+)
“`
Dosya İzinlerini ve Sahipliğini Koruma
Sistem dosyaları, betikler veya uygulama ikili dosyaları içeren arşivleri çıkarırken, izin koruması önem taşır:
“`bash
tar -xzvpf archive-name.tar.gz
“`
`-p` bayrağı, tar’a orijinal izinleri geri yüklemesini söyler. Bu olmadan, mevcut kullanıcının umask‘ı uygulanır; bu da çalıştırılabilir betikleri veya setuid ikili dosyalarını sessizce bozabilir.
Sahipliği korumak için (root gerektirir):
“`bash
sudo tar -xzvpf archive-name.tar.gz –same-owner
“`
Bu, sistem yedeklerini geri yüklerken veya güvenlik sınırları için belirli kullanıcı/grup sahipliğine dayanan uygulama paketlerini dağıtırken kritik öneme sahiptir.
Yaygın Hatalar ve Nasıl Düzeltilir
`tar: Error is not recoverable: exiting now`
Arşiv bozuk veya indirme tamamlanmamış. Dosyanın bütünlüğünü yayımlanan sağlama toplamına karşı `md5sum` veya `sha256sum` ile doğrulayın, ardından yeniden indirin.
`tar: Skipping to next header` / `tar: Archive contains obsolescent base-64 headers`
Arşiv içinde kısmi bozulma. `–ignore-zeros` ile kısmi çıkarma deneyebilirsiniz, ancak çıktıyı potansiyel olarak eksik kabul edin.
`gzip: stdin: not in gzip format`
Dosyanın `.tar.gz` uzantısı var ancak aslında gzip ile sıkıştırılmamış. Gerçek formatı belirlemek için `file archive-name.tar.gz` çalıştırın. Yanlış uzantıya sahip düz bir `.tar`, `.zip` veya `.bz2` dosyası olabilir.
`Cannot open: No such file or directory`
Ya yol yanlış ya da dosya adında boşluk var. Dosya adını tırnak içine alın: `tar -xzvf "my archive.tar.gz"`.
Çıkarma sırasında izin reddedildi
Hedef dizine yazma erişiminiz yok. `sudo` kullanın ya da hedefi sahip olduğunuz bir dizine `-C` ile değiştirin.
VPS veya Dedicated Sunucuda Pratik Kullanım Senaryoları
Bir VPS Hosting ortamında, `.tar.gz` arşivleri sürekli karşınıza çıkar: uygulama sürümlerini dağıtmak, veritabanı dökümlerini geri yüklemek, sunucular arasında yapılandırma paketleri aktarmak ve kaynaktan derlenen yazılımları açmak.
Bir Linux sunucusunda tipik bir dağıtım iş akışı:
“`bash
Download release archive
wget https://example.com/releases/myapp-2.1.0.tar.gz
Verify integrity
sha256sum myapp-2.1.0.tar.gz
Inspect contents before extracting
tar -tzf myapp-2.1.0.tar.gz | head -30
Extract to deployment directory
sudo mkdir -p /var/www/myapp
sudo tar -xzvpf myapp-2.1.0.tar.gz -C /var/www/myapp –strip-components=1
Set correct ownership
sudo chown -R www-data:www-data /var/www/myapp
“`
Büyük ölçekli yedeklemeleri yöneten Dedicated Sunucularda, `tar`’i borularla birleştirmek ara dosyaları diske yazmaktan tamamen kaçınır:
“`bash
Create and stream a compressed archive directly over SSH to a remote server
tar -czvf – /var/www/html | ssh user@backup-server "cat > /backups/html-$(date +%F).tar.gz"
“`
Bu kalıp, disk alanının kısıtlı olduğu veya yedekleme hızının kritik olduğu durumlarda özellikle verimlidir.
Bir kontrol paneli aracılığıyla web hosting ortamını yönetiyorsanız, cPanel ile VPS gibi araçlar `.tar.gz` işlemlerini Dosya Yöneticisi arayüzü üzerinden sunar; ancak betikli iş akışları için terminalde her zaman `tar` komutu mevcuttur.
HTTPS üzerinden dosya sunan uygulamaları barındırırken, dağıtım hattınızı düzgün yapılandırılmış SSL Sertifikaları ile eşleştirmek, çıkardığınız ve dağıttığınız uygulama varlıklarının ilk istekten itibaren güvenli şekilde sunulmasını sağlar.
Birden fazla ortamı yöneten ekipler için, VPS Kontrol Panelleri büyük ölçüde `.tar.gz` arşivlerine dayanan zamanlanmış yedekleme ve geri yükleme işlemlerini basitleştirebilir.
Hızlı Referans: En Çok Kullanılan tar Komutları
“`bash
Extract .tar.gz to current directory
tar -xzvf archive.tar.gz
Extract to specific directory
tar -xzvf archive.tar.gz -C /target/dir
Extract silently (no verbose output)
tar -xzf archive.tar.gz -C /target/dir
List contents without extracting
tar -tzvf archive.tar.gz
Extract single file
tar -xzvf archive.tar.gz path/inside/archive/file.conf
Extract and strip top-level directory
tar -xzvf archive.tar.gz -C /target/dir –strip-components=1
Extract preserving permissions and ownership (as root)
sudo tar -xzvpf archive.tar.gz –same-owner
Extract .tar.bz2
tar -xjvf archive.tar.bz2
Extract .tar.xz
tar -xJvf archive.tar.xz
“`
Teknik Karar Matrisi
| Senaryo | Önerilen Komut |
|---|
| ———- | ——————— |
|---|
| Etkileşimli çıkarma, ilerlemeyi görmek gerekiyor | `tar -xzvf archive.tar.gz` |
|---|
| Otomatik betik veya cron işi | `tar -xzf archive.tar.gz -C /target` |
|---|
| Bilinmeyen arşiv yapısı, önce incele | `tar -tzf archive.tar.gz | head -20` |
|---|
| Üst düzey sarmalayıcı olmadan dizine dağıt | `tar -xzf archive.tar.gz -C /target –strip-components=1` |
|---|
| Tam izinlerle sistem yedeğini geri yükle | `sudo tar -xzvpf archive.tar.gz –same-owner` |
|---|
| Büyük arşivden tek dosyayı kurtar | `tar -xzf archive.tar.gz path/to/file` |
|---|
| Çıkarmadan önce arşiv bütünlüğünü doğrula | `tar -tzf archive.tar.gz > /dev/null && echo "OK"` |
|---|
SSS
.tar.gz ile .tgz arasındaki fark nedir?
Bunlar özdeş formatlardır. `.tgz`, dosya sistemlerinin veya araçların uzantı uzunluğu sınırlamaları olduğunda kullanılan `.tar.gz` için kısaltılmış tek uzantılı bir takma addır. Her ikisi de aynı `tar -xzvf` komutuyla çıkarılır.
`tar -xzvf` neden bazen dosyaları bir alt dizin yerine mevcut dizine çıkarır?
Bu, arşiv üst düzey dizin sarmalayıcısı olmadan oluşturulduğunda gerçekleşir. Çıkarmadan önce her zaman `tar -tzf archive.tar.gz | head -20` çalıştırın. Yollar ortak bir ön ek paylaşmıyorsa, özel bir dizin oluşturun ve dosya dağılmasını önlemek için `-C` ile içine çıkarın.
tar komutu olmadan bir .tar.gz dosyasını çıkarabilir miyim?
Evet. Önce gzip katmanını `gunzip archive.tar.gz` ile açabilirsiniz; bu `archive.tar` üretir, ardından `tar -xvf archive.tar` ile çıkarın. Bazı sistemler ayrıca açmayı doğrudan tar’a aktarmak için `zcat archive.tar.gz | tar -xvf -`’i destekler. Ancak tek bir komutta `tar -xzvf` her zaman en verimli yaklaşımdır.
`-v` bayrağı büyük arşivlerde çıkarmayı yavaşlatır mı?
Marjinal olarak, evet. Yüz binlerce küçük dosya içeren arşivlerde, her dosya adını stdout’a yazdırmanın ek yükü ölçülebilir süre ekleyebilir. Performansa duyarlı veya otomatik bağlamlarda her zaman `-v`’i atlayın.
Hesap değiştirmeden farklı bir kullanıcı olarak .tar.gz dosyasını nasıl çıkarabilirim?
`sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir` kullanın. Bu, çıkarma işlemini hedef kullanıcının kimliği altında çalıştırır; `su` aracılığıyla tam kullanıcı değişikliği gerektirmeden çıkarılan dosyaların doğru şekilde sahiplenilmesini sağlar.
