15 exemple de comandă tar pentru administratorul de sistem și dezvoltatori

Formatul tar este un instrument popular pentru gruparea fișierelor, des întâlnit în sistemele de operare bazate pe Unix și Linux.

Originea denumirii „tar” vine de la „Tape ARchive” (Arhivă pe bandă), reflectând scopul inițial de a scrie date secvențial pe dispozitive de bandă. Uneori, mai este numit și „tarball”.

De obicei, tar nu comprimă fișierele, ci doar le arhivează. Însă, utilizând anumite comenzi, putem aplica diferite metode de compresie pentru a reduce dimensiunea arhivei. Utilizatorul tar este de obicei disponibil implicit în majoritatea distribuțiilor Linux, iar formatul este compatibil cu alte sisteme de operare, inclusiv Windows și macOS, prin diverse programe și instrumente.

În acest articol, vom examina câteva exemple comune și utilizarea comenzii „tar” împreună cu opțiunile sale.

Să începem!

Crearea unei arhive tar

Pentru a crea o arhivă simplă, necomprimată, comanda tar are următoarea sintaxă:

$ tar cvf <nume-arhivă.tar> <fișiere-de-arhivat>

În această comandă, opțiunea „c” indică crearea arhivei, „v” activează afișarea detaliilor (verbose), iar „f” specifică numele fișierului arhivă tar. Convențional, fișierele tar au extensia .tar. Fișierele care urmează să fie arhivate pot fi specificate folosind caractere wildcard sau prin nume/căi individuale sau multiple.

De exemplu, avem trei fișiere în directorul curent:

$ 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
$

Pentru a crea o arhivă tar care include toate aceste trei fișiere, vom utiliza următoarea comandă:

$ 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
$

Putem specifica și doar anumite fișiere pentru arhivare, ca de exemplu:

$ 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
$

Crearea unei arhive comprimate (GZ)

tar nu doar arhivează fișiere, ci le și comprimă pentru a economisi spațiu. Un format popular de compresie este gunzip, reprezentat de obicei prin extensia .gz adăugată după .tar sau ca .tgz. Pentru a specifica că fișierele trebuie comprimate folosind gunzip, se utilizează opțiunea „z”. Iată un exemplu:

$ 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
$

Se poate observa că dimensiunile celor două arhive sunt considerabil diferite, chiar dacă ambele conțin aceleași trei fișiere. Aceasta se datorează utilizării compresiei cu opțiunea „z”.

Crearea unei arhive comprimate (BZ2)

tar suportă și alte formate de compresie, cum ar fi bz2 sau bzip2, reprezentat de extensia .tar.bz2 sau, uneori, .tbz2. Deși poate reduce și mai mult dimensiunea arhivei, consumă mai mult din puterea procesorului, ceea ce poate încetini procesul de comprimare/decomprimare comparativ cu arhivele gz.

Exemplu:

$ 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
$

Extragerea tuturor fișierelor

O arhivă tar (fie comprimată, fie necomprimată) poate fi extrasă simplu folosind opțiunea „x”. Exemplele de mai jos vor clarifica utilizarea ei:

$ 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
$

Această comandă funcționează și pentru arhivele comprimate gz, astfel:

$ 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
$

Sau chiar și pentru arhivele comprimate bz2, ca aici:

$ 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
$

Listarea conținutului arhivei tar

Pentru a vedea conținutul unei arhive tar, se poate utiliza opțiunea „t”, după cum se arată mai jos:

$ 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
$

Extragerea anumitor fișiere

Un singur fișier poate fi extras dintr-o arhivă tar, tar.gz sau tar.bz2 specificând numele fișierului, astfel:

$ 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
$

Similar, se pot specifica mai multe nume de fișiere separate prin spațiu pentru a le extrage simultan.

$ 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
$

Extragerea folosind caractere wildcard

Pentru a extrage unul sau mai multe fișiere folosind un șablon cu caractere wildcard, se utilizează opțiunea „–wildcards”:

$ 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
$

Adăugarea fișierelor în arhivă

Fișiere noi pot fi adăugate într-o arhivă tar necomprimată existentă folosind opțiunea „r” sau „–append”, împreună cu numele noilor fișiere sau un șablon (rețineți că acest lucru funcționează doar cu fișiere .tar necomprimate, nu cu formatele comprimate tar.gz sau tar.bz2):

$ 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
$

Se observă că lista conținutului „archive.tar” include acum cele două fișiere adăugate.

Ștergerea fișierelor din arhivă

Eliminarea anumitor fișiere dintr-o arhivă tar este posibilă folosind opțiunea „–delete”, după cum se arată mai jos (comparați lista tar înainte și după ștergerea fișierelor):

$ 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
$

Acest lucru funcționează doar pentru arhive tar necomprimate și va eșua pentru arhivele comprimate.

Crearea cu verificare

La crearea fișierelor tar necomprimate, se poate verifica conținutul arhivei folosind opțiunea „W”, astfel:

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

Această opțiune nu poate fi utilizată cu opțiuni de compresie, dar se poate comprima ulterior fișierul tar creat, folosind gzip sau alte instrumente.

Extragerea într-un folder

Dacă se dorește extragerea conținutului tar într-un folder specific, în loc de directorul curent, se folosește opțiunea „-C” împreună cu calea directorului, după cum se arată mai jos:

$ 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
$

Utilizarea opțiunii „diff”

Se poate utiliza opțiunea „–diff” sau „d” pentru a identifica eventualele modificări între fișierele din arhiva tar și cele din sistemul de fișiere. Iată un exemplu care arată diferența atunci când fișierul din arhivă și cel din exterior erau identice. După actualizarea fișierului, diferența este afișată din nou.

$ 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
$

Excluderea fișierelor

Excluderea anumitor fișiere poate fi necesară la crearea arhivelor tar. Acest lucru se poate realiza cu opțiunea „–exclude”.

$ 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
$

Din rezultatul de mai sus, se observă că se poate specifica opțiunea „–exclude” de mai multe ori pentru a exclude mai multe nume de fișiere sau șabloane în condiție AND. Din cele șase fișiere din directorul din exemplu, doar două au fost incluse în „archive.at.gz”.

Vizualizarea dimensiunii conținutului tar

Se poate obține dimensiunea conținutului unei arhive tar comprimate utilizând următoarea comandă:

$ 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
$

Similar, pentru arhivele bz2:

$ 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
$

Păstrarea permisiunilor

Implicit, comanda tar păstrează permisiunile fișierelor și directoarelor pe care le arhivează. Se poate specifica explicit același lucru folosind opțiunea „-p” sau „–preserve-permissions”, după cum se arată mai jos:

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

Rezumat 👨‍💻

tar este un instrument util în sistemele Unix/Linux de mult timp, fiind folosit în principal pentru arhivare și backup. Acesta a evoluat de-a lungul timpului și oferă multe opțiuni. Datorită caracteristicilor sale, poate fi folosit pentru sarcini simple, dar și complexe. Acest articol a acoperit câteva dintre operațiunile de bază care pot fi efectuate cu comanda tar și a demonstrat cum aceasta poate ajuta în activitățile zilnice de administrare a sistemului.

Pentru mai multe informații, consultați pagina de manual „man tar” sau utilizați comenzile „tar –help” sau „tar –usage”.