Microsoft Windows kullandıysanız zip dosyalarını da mutlaka kullanmışsınızdır. Microsoft’un XP’den başlayarak Windows işletim sistemine dahil etmesiyle bu özellik popüler hale geldi. Zip programı, büyük dosyaları (hem metin hem de diğer birçok türü) küçük dosyalar haline kolayca sıkıştırmanıza olanak tanır. Linux ise birkaç dahili dosya sıkıştırma programı içerir. Bu yazımızda Linux ile veri sıkıştırma, arşivleme ve kullanımına değiniyoruz.
Linux için mevcut yardımcı dosya sıkıştırma programları ve açıklamaları şöyle;
| Araç | Uzantı | Açıklama |
| bzip2 | .bz2 | Burrows-Wheeler sıkıştırma algoritmasını ve Huffman kodlamasını kullanır. |
| compress | .Z | Orijinal Unix dosya sıkıştırma aracıdır. |
| gzip | .gz | GNU projesinin sıkıştırma aracıdır. Lempel-Ziv kodlamasını kullanır. |
| zip | .zip | Windows’un PKZIP programının Unix versiyonudur. |
“Compress” dosya sıkıştırma programı genelde Linux sistemlerinde bulunmaz. Ancak karşımıza .Z uzantılı bir dosya çıktığında ilgili paketi indirerek kullanmak zorunda kalabiliriz.
Linux sistemlerinde en çok kullanılan sıkıştırma aracı “gzip”tir. gzip orijinal Unix sıkıştırma aracının ücretsiz bir sürümünü ortaya çıkarma çabalarının bir ürünüdür. GNU araçlarının zaten bu şekilde ortaya çıktığına değinmiştik.
gzip paketi şunları içerir;
- dosyaları sıkıştırmak için gzip aracı
- sıkıştırılan metin dosyalarını görüntüleyebilen gzcat
- dosyaları ayıklamak (açmak, extend) için gunzip.
gzip komutunun kullanım şekli şöyledir:
gzip [dosya adı]
gzip ile bir dosya sıkıştırıldıktan sonra, dosya uzantısı .gz olacak şekilde yeni sıkıştırılmış dosya oluşturulur, ancak eski dosya silinir;

Örnekte görüldüğü gibi sıkıştırma işlemi sonrası ls komutu ile yaptığımız listelemede “GNU_tools” adlı dosyanın artık var olmadığını, sadece “GNU_tools.gz” adlı sıkıştırılmış halinin bulunduğunu görüyoruz.
Dosyanın aslının kalmasını istiyorsak “-k” (keep input file) parametresini kullanabiliriz;

Böylece asıl dosyayı da muhafaza etmiş olduk. Dosya boyutlarından yaklaşık olarak 2,5 kat bir sıkıştırma oranı görüyoruz.
Çoğu bash komutunda olduğu gibi “*” karakteri kullanarak benzer isimdeki dosyaları tek seferde sıkıştırabiliriz;

Sıkıştırılmış dosyaları ayıklamak
gzip ile sıkıştırdığımız dosyaları ayıklamak için gunzip komutunu kullanıyoruz.
gunzip dosya_adı.gz

bzip2 ile de bir dosyayı sıkıştırmak için benzer komutları kullanıyoruz;
bzip2 dosya_adi
bzip2 ile sıkıştırılmış dosyayı ayıklamak için ise;
bunzip2 dosya_adi.bz2
Dosyanın türüne göre değişse de bzip2 ile gzip’e göre daha iyi sıkıştırma oranları elde edilebilir.
Dosyaları Arşivlemek: tar komutu
Linux ve Unix sistemlerinde dosyaları arşivlemek için kullanılan popüler araç “tar”’ komutu. tar komutu aslında ilk dönemlerde dosyaları bir teyp cihazına yazıp arşivlemek için kullanılırdı. Evet, bildiğimiz manyetik teypler. Ancak komut, çıktılarını bir dosyaya da yazabilir. Günümüzde dosyaları arşivlemek için kullanılan popüler yöntem de nitekim bu.
tar komutunun kullanımı şu şekilde;
tar [parametre] [tar dosyası] nesne1 nesne2 …
tar komutu ile birlikte kullanılabilecek oldukça fazla parametre ve özellik mevcut. Bu bilgileri tar komutunun yardım bilgilerinden ya da man sayfasından öğrenebilirsiniz;
tar --help
ya da
man tar
Örneğin, yukarıdaki örneklerde yer alan “my_” ile başlayan dosyaları arşivleyelim;

Burada kullandığımız “-c” parametresi “create” kelimesine atıfta bulunarak yeni bir arşiv dosyası oluşturmasını, “-v” parametresi işlenen dosyaları listelemesini, “-f” parametresi ise çıktının bir dosya (file) olacağını belirtmek için kullanıldı. Genel kullanım bu şekilde olsa da farklı amaçlar için farklı parametreler kullanılabilir.
Bir arşiv dosyasının içindeki dosyaları görüntülemek için “-tf” parametresi kullanılabilir;

Buradaki listeleme dosyaları ayıklamaz, sadece içeriğini listeler.
Arşiv dosya içeriğini ayıklamak için tar komutu ile birlikte “-xvf” parametrelerini birlikte kullanabiliriz;
tar -xvf my_files.tar
Arşivleme işlemini yapan parametrenin “-c”, ayıklama işlemini yapan parametrenin “-x” (extract) olduğuna dikkat edin.
Oluşturulmuş bir arşiv dosyasına başka bir dosya daha ilave etmek isterseniz “-r” parametresini kullanmalısınız;
tar -rf my_files.tar yenidosya.txt
Bir klasörü tamamen arşivlemek için ise;
tar -cvf arsiv_klasor.tar klasör_adi/
komutunu kullanabiliriz. Klasör adından sonra “/” simgesini koymayı unutmayın.
Arşivlerken dosyaları sıkıştırmak
Dikkat ettiyseniz arşivleme ve sıkıştırmanın aynı şeyler olmadığını fark etmişsinizdir.
Dosyaları tar komutu ile arşivlerken aynı zamanda sıkıştırılmasını da sağlayabiliriz. tar komutu ile birlikte “-z” parametresini kullanmak arşivlenecek dosyaları aynı zamanda gzip ile sıkıştıracaktır.
tar -zcvf arsiv.tar.gz dosya1 dosya2 dosya3

Yukarıdaki örnekte dört adet .sh uzantılı dosyayı “-zcvf” parametresi ile hem arşivledik hem de sıkıştırdık. Ardından soya ayrıntılarını listeledik ve listeye aynı dosyaların sadece arşivli hali olan “my_files.tar” dosyasını da ekledik.
Sadece arşivlenen “my_files.tar” ve hem sıkıştırılıp hem de arşivlenen “arsiv.tar.gz” dosyalarının boyutlarına bakacak olursak, sırasıyla 10240 byte ve 1301 byte olduğunu göreceğiz. Bu da arşivleme ve sıkıştırma arasındaki farkı ortaya koyuyor.
Arşivlenip sıkıştırılmış bir dosyayı ayıklamak için ise ayıklama parametrelerine “-z”yi de ekliyoruz;
tar -zxvf arsiv.tar.gz
İnternetten indirdiğiniz bir dosyanın uzantısı size dosyanın sadece arşivli mi (tar) yoksa aynı zamanda sıkıştırılmış mı (tar.gz) olduğu hakkında bilgi verecektir. Ancak dosya hakkında daha detaylı bilgiyi “file” komutu ile edinebileceğinizden bahsetmiştik.

Yukarıdaki örnekte üç farklı dosyanın file komutu çıktısını görüyoruz. file komutu ile dosyaların sıkıştırılma ya da arşiv durumları hakkında bilgi edinmiş oluyoruz.
Linux dünyasındaki açık kaynak pek çok kod ve program tar komutu ile arşivlenen ve/veya sıkıştırılan paketler halinde yayılmaktadır. Sıklıkla karşımıza .tar, .gz ve .tar.gz uzantılı dosyaların çıkması muhtemel. Linux ile veri sıkıştırma konusunda daha detaylı bilgiler için komutların bilgi sayfalarını incelemeyi ve pratik yapmayı unutmayın.
