15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
08.10.2024

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:

  1. `tar` dosyaları toplar, dizin yapısını, izinleri, sahipliği ve sembolik bağlantıları tek bir düz dosyada korur.
  2. `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

“`

BayrakUzun 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ı

FormatUzantıSıkıştırma AlgoritmasıSıkıştırma OranıHızTar Gerekli mi
——–———–———————–——————-——-————–
Gzip tarball`.tar.gz` / `.tgz`DEFLATE (gzip)OrtaHızlıEvet
Bzip2 tarball`.tar.bz2`Burrows-Wheeler (bzip2)YüksekYavaşEvet
XZ tarball`.tar.xz`LZMA2 (xz)Çok YüksekÇok YavaşEvet
Zstandard tarball`.tar.zst`ZstandardYüksekÇok HızlıEvet
ZIP arşivi`.zip`DEFLATEOrtaHızlıHayır
Düz tar`.tar`YokYokEn 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.gzhead -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.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın