15 примера команди тар за Сисадмин и програмере

Tar je široko korišćen format za arhiviranje datoteka, pre svega na Unix i Linux operativnim sistemima.

Naziv „tar“ potiče od reči „Tape Archive“, s obzirom na to da je prvobitno razvijen za upisivanje sekvencijalnih podataka na magnetne trake. Takođe se često naziva i „tarball“.

U osnovi, tar samo grupiše datoteke u arhivu bez kompresije. Međutim, uz primenu odgovarajućih opcija, moguće je postići kompresiju koristeći različite tehnike. Alat „tar“ je standardno uključen u većinu Linux distribucija, a sam format je podržan i na drugim operativnim sistemima kao što su Windows i macOS, putem različitih alata i pomoćnih programa.

U ovom tekstu, detaljnije ćemo obraditi najčešće primere i načine upotrebe naredbe „tar“, kao i njene podržane opcije.

Krenimo…

Kreiranje tar arhive

Za formiranje osnovne, nekomprimovane arhive, koristi se sledeća sintaksa naredbe tar:

$ tar cvf <ime-tar-datoteke> <datoteke-za-arhiviranje>

Ovde, opcija ‘c’ označava kreiranje arhive, ‘v’ omogućava detaljan ispis komandi, a ‘f’ se koristi za određivanje imena tar arhive. Uobičajeno je da se tar datoteke imenuju sa ekstenzijom „.tar“. Datoteke koje se dodaju u arhivu mogu se navesti pomoću džoker znakova ili kao pojedinačna imena/putanje do datoteka.

Na primer, u jednom direktorijumu imam tri datoteke:

$ ls -l
total 12
-rw-r--r-- 1 korisnik korisnik 13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik 19 Sep 12 20:08 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik 24 Sep 12 20:08 datoteka3.txt
$

Želim da kreiram tar arhivu koja sadrži sve tri datoteke. To se može uraditi na sledeći način:

$ tar cvf arhiva.tar *
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l arhiva.tar
-rw-r--r-- 1 korisnik korisnik 10240 Sep 12 20:15 arhiva.tar
$

Moguće je navesti i samo određene datoteke za arhiviranje, na primer:

$ tar cvf arhiva1.tar datoteka1.txt datoteka2.txt
datoteka1.txt
datoteka2.txt
$ ls -l arhiva1.tar
-rw-r--r-- 1 korisnik korisnik 10240 Sep 12 20:15 arhiva1.tar
$

Kreiranje komprimovane arhive (GZ)

Pored arhiviranja, tar omogućava i kompresiju datoteka radi uštede prostora. Jedan od popularnih formata kompresije je gzip, koji se obično označava ekstenzijom „.gz“ nakon „.tar“ ili kao „.tgz“. Za kompresiju datoteka pomoću gzip-a koristimo opciju „z“. Primer:

$ tar cvzf arhiva.tar.gz datoteka*
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l arhiva.tar arhiva.tar.gz
-rw-r--r-- 1 korisnik korisnik 10240 Sep 12 20:15 arhiva.tar
-rw-r--r-- 1 korisnik korisnik   188 Sep 12 20:21 arhiva.tar.gz
$

Može se primetiti značajna razlika u veličini arhivskih datoteka, iako obe sadrže iste tri datoteke. Ovo je rezultat primene kompresije pomoću opcije „z“.

Kreiranje komprimovane arhive (BZ2)

Tar podržava i nekoliko drugih formata kompresije. Jedan od njih je bz2 ili bzip2, koji se označava ekstenzijom „.tar.bz2“ ili ponekad „.tbz2“. Ovaj format može da rezultira manjom veličinom arhive, ali zahteva više procesorske snage, što može usporiti proces kompresije/dekompresije u poređenju sa gzip arhivom.

Primer:

$ tar cvjf arhiva.tar.bz2 datoteka*
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l arhiva.tar arhiva.tar.gz arhiva.tar.bz2
-rw-r--r-- 1 korisnik korisnik 10240 Sep 12 20:15 arhiva.tar
-rw-r--r-- 1 korisnik korisnik   212 Sep 12 20:25 arhiva.tar.bz2
-rw-r--r-- 1 korisnik korisnik   188 Sep 12 20:21 arhiva.tar.gz
$ file arhiva.tar*
arhiva.tar:     POSIX tar arhiva (GNU)
arhiva.tar.bz2: bzip2 komprimovani podaci, veličina bloka = 900k
arhiva.tar.gz:  gzip komprimovani podaci, iz Unix, originalna veličina modulo 2^32 10240
$

Raspakivanje svih datoteka

Tar arhivu (bez obzira da li je komprimovana ili ne) moguće je raspakovati jednostavnim korišćenjem opcije „x“. Naredni primeri će dodatno objasniti upotrebu ove opcije:

$ tar xvf arhiva.tar
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l
total 24
-rw-r--r-- 1 korisnik korisnik 10240 Sep 19 18:25 arhiva.tar
-rw-r--r-- 1 korisnik korisnik    13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik    19 Sep 12 20:08 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik    24 Sep 12 20:08 datoteka3.txt
$

Ovo važi i za gzip komprimovanu arhivu:

$ tar xvf arhiva.tar.gz
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l
total 16
-rw-r--r-- 1 korisnik korisnik 188 Sep 19 18:27 arhiva.tar.gz
-rw-r--r-- 1 korisnik korisnik  13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik  19 Sep 12 20:08 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik  24 Sep 12 20:08 datoteka3.txt
$

Kao i za bz2 komprimovanu arhivu:

$ tar xvf arhiva.tar.bz2
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l
total 16
-rw-r--r-- 1 korisnik korisnik 212 Sep 19 18:31 arhiva.tar.bz2
-rw-r--r-- 1 korisnik korisnik  13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik  19 Sep 12 20:08 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik  24 Sep 12 20:08 datoteka3.txt
$

Prikaz sadržaja tar arhive

Za prikaz sadržaja tar arhive koristi se opcija „t“, kao što je prikazano ispod:

$ tar tvf arhiva.tar.bz2
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
$

Raspakivanje specifičnih datoteka

Moguće je izdvojiti samo jednu datoteku iz tar, tar.gz ili tar.bz2 arhive, tako što se navede njeno ime:

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

Na sličan način, moguće je izdvojiti više datoteka odjednom, navođenjem njihovih imena razdvojenih razmakom.

$ tar xvf arhiva.tar.bz2 datoteka1.txt datoteka3.txt
datoteka1.txt
datoteka3.txt
$ ls -l
total 12
-rw-r--r-- 1 korisnik korisnik 212 Sep 19 18:31 arhiva.tar.bz2
-rw-r--r-- 1 korisnik korisnik  13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik  24 Sep 12 20:08 datoteka3.txt
$

Raspakivanje korišćenjem džoker znakova

Da biste izdvojili jednu ili više datoteka koristeći džoker obrazac, koristite opciju „–wildcards“:

$ tar xvf arhiva.tar.bz2 --wildcards "datoteka*"
datoteka1.txt
datoteka2.txt
datoteka3.txt
$ ls -l
total 16
-rw-r--r-- 1 korisnik korisnik 212 Sep 19 18:31 arhiva.tar.bz2
-rw-r--r-- 1 korisnik korisnik  13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik  19 Sep 12 20:08 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik  24 Sep 12 20:08 datoteka3.txt
$

Dodavanje datoteka u arhivu

Nove datoteke mogu se dodati u postojeću nekomprimovanu tar arhivu korišćenjem opcije „r“ ili „–append“, uz navođenje novih imena datoteka ili uzorka (važno je napomenuti da ovo radi samo sa nekomprimovanim „.tar“ datotekama, a ne sa komprimovanim formatima kao što su tar.gz ili tar.bz2):

$ tar rvf arhiva.tar datoteka-nova*
datoteka-nova.txt
datoteka-nova2.txt
$ tar tvf arhiva.tar
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
-rw-r--r-- korisnik/korisnik 15 2021-09-19 18:59 datoteka2.txt
-rw-r--r-- korisnik/korisnik 10 2021-09-19 18:58 datoteka4.txt
-rw-r--r-- korisnik/korisnik  9 2021-09-19 19:10 datoteka-nova.txt
-rw-r--r-- korisnik/korisnik  9 2021-09-19 19:10 datoteka-nova2.txt
$

Može se primetiti da prikaz sadržaja „arhiva.tar“ sada uključuje dve novododate datoteke.

Brisanje datoteka iz arhive

Uklanjanje određenih datoteka iz tar arhive moguće je pomoću opcije „–delete“, kao što je prikazano ispod (uporedite spisak arhive pre i posle brisanja datoteka):

$ tar tvf arhiva.tar
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
-rw-r--r-- korisnik/korisnik 15 2021-09-19 18:59 datoteka2.txt
-rw-r--r-- korisnik/korisnik 10 2021-09-19 18:58 datoteka4.txt
-rw-r--r-- korisnik/korisnik  9 2021-09-19 19:10 datoteka-nova.txt
-rw-r--r-- korisnik/korisnik  9 2021-09-19 19:10 datoteka-nova2.txt
$ tar --delete -f arhiva.tar datoteka-nova.txt datoteka-nova2.txt
$ tar tvf arhiva.tar
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
-rw-r--r-- korisnik/korisnik 15 2021-09-19 18:59 datoteka2.txt
-rw-r--r-- korisnik/korisnik 10 2021-09-19 18:58 datoteka4.txt
$

I ovaj postupak je primenljiv samo na nekomprimovane arhive, i neće raditi sa komprimovanim arhivskim formatima.

Kreiranje sa verifikacijom

Prilikom kreiranja nekomprimovane tar datoteke, možete proveriti sadržaj arhive koristeći opciju „W“:

$ tar cvfW arhiva.tar datoteka*.txt
datoteka1.txt
datoteka2.txt
datoteka3.txt
Verifikacija datoteka1.txt
Verifikacija datoteka2.txt
Verifikacija datoteka3.txt
$

Ova opcija se ne može koristiti sa opcijama za kompresiju. Ipak, kreirana tar datoteka se može kasnije kompresovati koristeći gzip ili druge alate.

Raspakivanje tar arhive u direktorijum

Ako želite da raspakujete sadržaj tar arhive u određeni direktorijum umesto u trenutni, koristite opciju „-C“ sa putanjom direktorijuma:

$ tar xvf arhiva.tar -C novi-direktorijum/
datoteka1.txt
datoteka2.txt
datoteka3.txt
datoteka2.txt
datoteka4.txt
$ ls -l novi-direktorijum/
total 16
-rw-r--r-- 1 korisnik korisnik 13 Sep 12 20:08 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik 15 Sep 19 18:59 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik 24 Sep 12 20:08 datoteka3.txt
-rw-r--r-- 1 korisnik korisnik 10 Sep 19 18:58 datoteka4.txt
$

Korišćenje diff opcije

Opcija „–diff“ ili „d“ može se upotrebiti za pronalaženje razlika između datoteka u tar arhivi i onih u fajl sistemu. U prikazanom primeru, „diff“ je pokrenut kada su datoteke unutar i izvan arhive bile identične. Nakon ažuriranja datoteke, ponovo je pokrenut kako bi se prikazala razlika u izlazu.

$ tar dvf arhiva.tar datoteka4.txt
datoteka4.txt
$
$ echo nova-linija > datoteka4.txt
$
$ tar dvf arhiva.tar datoteka4.txt
datoteka4.txt
datoteka4.txt: Razlikuje se vreme modifikacije
datoteka4.txt: Razlikuje se veličina
$

Izuzimanje datoteka

Izuzimanje određenih datoteka može biti potrebno prilikom kreiranja tar arhive. Ovo se postiže opcijom „–exclude“.

$ tar --exclude="dir/datoteka2.txt" --exclude="dir/datoteka-nova*.txt" -cvzf arhiva.tar.gz dir/
dir/
dir/datoteka1.txt
dir/datoteka3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 korisnik korisnik 9 Sep 19 19:10 datoteka-nova.txt
-rw-r--r-- 1 korisnik korisnik 9 Sep 19 19:10 datoteka-nova2.txt
-rw-r--r-- 1 korisnik korisnik 5 Sep 19 19:20 datoteka-nova3.txt
-rw-r--r-- 1 korisnik korisnik 5 Sep 19 19:27 datoteka1.txt
-rw-r--r-- 1 korisnik korisnik 6 Sep 19 19:27 datoteka2.txt
-rw-r--r-- 1 korisnik korisnik 8 Sep 19 19:27 datoteka3.txt
$ tar tvf arhiva.tar.gz
drwxr-xr-x korisnik/korisnik 0 2021-09-19 19:30 dir/
-rw-r--r-- korisnik/korisnik 5 2021-09-19 19:27 dir/datoteka1.txt
-rw-r--r-- korisnik/korisnik 8 2021-09-19 19:27 dir/datoteka3.txt
$

Kao što se može videti iz prethodnog izlaza, moguće je koristiti opciju „–exclude“ više puta da se navede više imena datoteka ili uzoraka. Imajte na umu da od šest datoteka u direktorijumu u gornjem primeru, samo dve datoteke ispunjavaju uslov za uključivanje u „arhiva.tar.gz“.

Prikaz veličine sadržaja tar arhive

Veličina sadržaja komprimovane tar arhive može se dobiti korišćenjem sledeće naredbe:

$ tar tvf arhiva.tar.gz
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
$ tar -xzf arhiva.tar.gz --to-stdout|wc -c
56
$

Slično za bz2 arhivu:

$ tar tvf arhiva.tar.bz2
-rw-r--r-- korisnik/korisnik 13 2021-09-12 20:08 datoteka1.txt
-rw-r--r-- korisnik/korisnik 19 2021-09-12 20:08 datoteka2.txt
-rw-r--r-- korisnik/korisnik 24 2021-09-12 20:08 datoteka3.txt
$ tar -xjf arhiva.tar.bz2 --to-stdout|wc -c
56
$

Čuvanje dozvola

Podrazumevano, naredba „tar“ čuva dozvole za datoteke i direktorijume koje arhivira, mada možete eksplicitno navesti isto koristeći opciju „-p“ ili „–preserve-permissions“, kao što je prikazano u nastavku:

$ tar cvpzf arhiva.tar.gz *.txt
datoteka1.txt
datoteka2.txt
datoteka3.txt
$

Zaključak 👨‍💻

Tar je odavno koristan alat na Unix/Linux sistemima i prvenstveno se koristi u zadacima arhiviranja i pravljenja rezervnih kopija. Alat se vremenom razvijao i dobijao mnoge opcije. Može se koristiti za jednostavne do složene zadatke, pod uslovom da su vam poznate funkcije koje nudi. U ovom tekstu su opisane neke od osnovnih operacija koje možete izvršiti pomoću naredbe „tar“ i prikazano je kako ona može pomoći u svakodnevnim zadacima sistemske administracije.

Za više detalja, možete pogledati man stranicu „man tar“ ili koristiti naredbu „tar –help“ ili „tar –usage“.