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“.