Sysadmin ve Geliştiriciler için 15 tar Komut Örnekleri

Yayınlanan: 2021-09-21

tar, Unix ve Linux tabanlı sistemlerde bulunan popüler dosya arşivleme biçimlerinden biridir.

Adın kendisi, bant cihazlarına sıralı veri yazmak için geliştirildiği için T ape AR chive'dan türetilmiştir. Bazen tarball olarak da adlandırılır.

Varsayılan olarak, tar yalnızca dosyaları sıkıştırmadan ancak bazı bölümleri kullanarak arşivler. Sıkıştırılmış bir çıktı elde etmek için farklı sıkıştırma teknikleri kullanabiliriz. tar yardımcı programı genellikle varsayılan olarak çoğu Linux dağıtımında bulunur ve biçimin kendisi, Windows ve macOS dahil olmak üzere diğer işletim sistemlerinde farklı araçlar ve yardımcı programlar aracılığıyla desteklenir.

Bu makalede tar komutunun bazı yaygın örneklerini ve kullanımını ve desteklediği bayrakları ele alacağız.

O halde başlayalım…

katran Arşivi oluştur

Basit bir sıkıştırılmamış arşiv oluşturmak için tar komutunun sözdizimi şöyledir:

 $ tar cvf <tar-file-name> <files-to-archive>

Burada c işaretleri oluşturma, v ayrıntılı çıktı ve f tar arşiv dosyası adını belirtmek anlamına gelir. .tar , tar dosya adını .tar uzantılı olarak belirtin. Arşivlenecek dosyalar joker karakterlerle veya tek veya birden çok dosya adı/yolu olarak belirtilebilir.

Örnek olarak, dizinimde üç dosya var:

 $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

Ve üç dosyayı da içeren bir tar arşivi oluşturmak istiyorum, şu şekilde yapılabilir:

 $ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $

Yalnızca arşivlenecek belirli dosyaları da belirtebilirim, örneğin:

 $ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $

Sıkıştırılmış Arşiv Oluştur (GZ)

tar yalnızca dosyaların arşivlenmesine değil, aynı zamanda yerden tasarruf etmek için sıkıştırılmasına da izin verir. Popüler sıkıştırma formatları biri genellikle uzatma ile temsil gunzip olduğu .gz sonra .tar veya tgz . Gunzip kullanılarak sıkıştırılacak dosyalara ihtiyacımız olduğunu belirtmek için z bayrağını kullanabiliriz. İşte bir örnek:

 $ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $

Her ikisi de aynı üç dosyayı içermesine rağmen, her iki arşiv dosyasının boyutunun önemli ölçüde farklı olduğunu gözlemleyebilirsiniz. Bunun nedeni, z bayrağı kullanılarak sıkıştırma kullanılmasıdır.

Sıkıştırılmış Arşiv Oluştur (BZ2)

tar, diğer birkaç sıkıştırma biçimini destekler. Bunlardan biri bz2 veya bzip2 uzantısı ile temsil edilir tar.bz2 bazen veya tbz2 . Size daha küçük bir arşiv boyutu verebilir, ancak sırayla daha fazla CPU tüketir, bu nedenle sıkıştırma/açma işlemi gz arşivinden daha yavaş olabilir.

Örnek:

 $ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $

Tüm Dosyaları Tartan Çıkar

Bir tar arşivi (sıkıştırılmış veya sıkıştırılmamış) x seçeneği kullanılarak basitçe çıkarılabilir. Aşağıdaki örnekler kullanımını netleştirecektir:

 $ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

Bu, gz sıkıştırılmış bir arşiv için şu şekilde çalışır:

 $ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

Veya bir bz2 sıkıştırılmış arşivi için bile:

 $ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

katran İçeriğini Listele

Bir tar arşivinin içeriğini listelemek için aşağıda gösterildiği gibi t bayrağını kullanabilirsiniz:

 $ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $

Belirli Dosyaları Taramadan Kaldır

Dosya adını şu şekilde belirterek tar veya tar.gz veya tar.bz2 arşivinden yalnızca bir dosya çıkarılabilir:

 $ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $

Benzer şekilde, tek seferde bir araya getirmek için boşlukla ayrılmış birden çok dosya adı belirtebilirsiniz.

 $ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

Joker karakter kullanarak untar

PATTERN joker karakteri kullanarak bir veya daha fazla dosyayı ayıklamak için --wildcards bayrağını kullanın:

 $ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $

Dosyaları arşive ekle

Yeni dosyalar, yeni dosya adları veya joker karakter deseniyle r veya --append bayrağı kullanılarak mevcut sıkıştırılmamış --append eklenebilir/eklenebilir (bunun yalnızca sıkıştırılmamış .tar dosyalarıyla çalıştığını ve tar.gz veya tar.bz2 sıkıştırılmış biçimleriyle çalışmadığını unutmayın):

 $ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $

archive.tar içeriğinin listelenmesinin yeni eklenen iki dosyayı tekrar gösterdiğini gözlemleyebilirsiniz.

Dosyaları Arşivden Sil

Belirli dosyaları bir tar arşivinden kaldırmak, aşağıda gösterildiği gibi --delete bayrağını kullanarak mümkündür (dosyaların silinmesinden önceki ve sonraki tar listesini karşılaştırın):

 $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $

Yine bu, yalnızca sıkıştırılmamış tarball'lar için çalışır ve sıkıştırılmış arşiv formatları için başarısız olur.

Verify ile oluştur

Sıkıştırılmamış tar dosyaları oluştururken, W bayrağını kullanarak arşivin içeriğini şu şekilde doğrulayabilirsiniz:

 $ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $

Bu, sıkıştırma bayraklarıyla kullanılamaz, ancak oluşturulan tar dosyasını daha sonra gzip veya diğer araçları kullanarak sıkıştırabilirsiniz.

Katranı Klasöre Çıkarın

Tarball içeriğinizi geçerli dizin yerine belirli bir klasöre çıkarmak istiyorsanız, aşağıda gösterildiği gibi dizin yolu ile -C bayrağını kullanın:

 $ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $

Farklı Bayrak Kullan

--diff veya d bayrağını tar arşivindeki dosyalar ile dosya sistemindeki dosyalar arasındaki değişiklikleri bulmak için kullanabilirsiniz. İşte tar içindeki ve dışındaki dosya aynı olduğunda diff kez çalıştıran bir örnek. Dosyayı güncelledikten sonra, çıktıdaki farkı göstermek için bir kez daha çalıştırıldı.

 $ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $

Dosyaları Hariç Tut

Tar arşivleri oluştururken belirli dosyaları hariç tutmak bir gereklilik olabilir. Bu --exclude bayrağı ile yapılabilir.

 $ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $

Yukarıdaki çıktıdan not edebileceğiniz gibi, AND koşulunda birden çok dosya adı veya desen belirtmek için --exclude bayrağını birden çok kez belirtebiliriz. Altı dosyaların Çek şu Not dir yukarıdaki örnekte, sadece iki dosya şartını yerine getirmiş dahil edilecek archive.at.gz .

Katran İçeriği Boyutunu Görüntüle

Aşağıdaki komutu kullanarak sıkıştırılmış bir tar arşivinin içeriğinin boyutunu alabiliriz:

 $ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $

Benzer şekilde bz2 arşivi için:

 $ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $

İzinleri Koru

Varsayılan olarak, tar komutu, arşivlediği dosya ve dizinlerin izinlerini korur, ancak -p bayrağını veya --preserve-permissions kullanarak aynısını aşağıda gösterildiği gibi açıkça belirtebilirsiniz:

 $ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $

Özet

tar, Unix/Linux sistemlerinde uzun süredir faydalı bir yardımcı programdır ve öncelikle arşivleme ve yedekleme görevlerinde kullanılmıştır. Yardımcı program zamanla birçok seçenekle gelişti. Sunduğu özellikleri bildiğinizden dolayı, basitten karmaşığa kadar olan görevler için kullanılabilir. Bu makale tar komutuyla yapabileceğiniz bazı temel işlemleri ele alıyor ve günlük sistem yönetimi görevlerinizde size nasıl yardımcı olabileceğini gösteriyor.

Daha fazla ayrıntı almak için tar --usage sayfasına bakın man tar veya tar --help veya tar --usage komutunu kullanın.