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

tar este unul dintre formatele populare de arhivare a fișierelor disponibile în sistemele bazate pe Unix și Linux.

Numele în sine este derivat din Tape ARchive, deoarece a fost dezvoltat pentru scrierea datelor secvențiale pe dispozitive de bandă. Este denumit și tarball uneori.

În mod implicit, tar arhivează numai fișierele fără compresie, dar folosind unele porțiuni. Putem folosi diferite tehnici de compresie pentru a obține o ieșire comprimată. utilitarul tar este de obicei inclus în majoritatea distribuțiilor Linux în mod implicit, iar formatul în sine este acceptat pe alte sisteme de operare, inclusiv Windows și macOS, prin diferite instrumente și utilitare.

Vom acoperi câteva dintre exemplele comune și utilizarea comenzii tar și a steagurilor sale acceptate în acest articol.

Deci sa începem…

Creați arhiva tar

Pentru a crea o arhivă simplă necomprimată, sintaxa pentru comanda tar este:

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

Aici flags c reprezintă crearea, v pentru ieșire verbosă și f pentru specificarea numelui fișierului arhivă tar. Prin convenție, specificați numele fișierului tar cu extensia .tar. Fișierele care urmează să fie arhivate pot fi specificate cu caractere metalice sau ca nume/căi de fișiere unice sau multiple.

De exemplu, am trei fișiere în directorul meu:

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

Și vreau să creez o arhivă tar care să conțină toate cele trei fișiere, se poate face astfel:

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

Pot specifica doar anumite fișiere de arhivat, de asemenea, cum ar fi:

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

Creați arhivă comprimată (GZ)

tar nu permite doar arhivarea fișierelor, ci și comprimarea acestora pentru a economisi spațiu. Unul dintre formatele de compresie populare este gunzip, reprezentat de obicei prin extensia .gz după .tar sau ca tgz. Putem folosi z flag pentru a specifica că avem nevoie ca fișierele să fie comprimate folosind gunzip. 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
$

Puteți observa că dimensiunea ambelor fișiere de arhivă este substanțial diferită, chiar dacă ambele conțin aceleași trei fișiere. Acest lucru se datorează utilizării compresiei folosind steag-ul z.

  Street Racing 2 este un simplu joc de curse fără prostii [Review]

Creați arhivă comprimată (BZ2)

tar acceptă alte câteva formate de compresie. Unul dintre ele este bz2 sau bzip2 care este reprezentat prin extensia tar.bz2 sau uneori ca tbz2. Vă poate oferi o dimensiune mai mică a arhivei, dar la rândul său consumă mai mult CPU, astfel încât procesul de comprimare/decomprimare ar putea fi mai lent decât arhiva 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
$

Untar toate fișierele

O arhivă tar (fie comprimată sau necomprimată) poate fi extrasă pur și simplu folosind opțiunea x. Exemplele de mai jos vor clarifica utilizarea acestuia:

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

Acest lucru funcționează pentru o arhivă comprimată gz ca:

$ 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 pentru o arhivă comprimată bz2 ca:

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

Listează conținutul tar

Pentru a lista conținutul unei arhive tar, puteți folosi t flag așa 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
$

Untar Specific Files

Doar un fișier poate fi extras dintr-o arhivă tar sau tar.gz sau tar.bz2 specificând numele fișierului ca:

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

În mod similar, puteți specifica mai multe nume de fișiere separate prin spațiu pentru a le extrage împreună dintr-o singură mișcare.

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

Untar folosind Wildcard

Pentru a extrage unul sau mai multe fișiere folosind un PATTERN cu caractere joker, utilizați flag –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ăugați fișiere în arhivă

Fișierele noi pot fi adăugate/adăugate la tarball-uri necomprimate existente utilizând r sau –append flag cu nume de fișiere noi sau model de metacaracter (rețineți că acest lucru funcționează numai cu fișierele .tar necomprimate și 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
$

Puteți observa că listarea conținutului archive.tar arată din nou cele două fișiere nou adăugate.

  Cum se configurează un sistem audio desktop HiFi

Ștergeți fișierele din arhivă

Eliminarea anumitor fișiere dintr-o arhivă tar este posibilă utilizând flag –delete așa 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
$

Din nou, acest lucru funcționează numai pentru tarball-uri necomprimate și va eșua pentru formatele de arhivă comprimate.

Creați cu Verify

În timp ce creați fișiere tar necomprimate, puteți verifica conținutul arhivei folosind semnalul W ca:

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

Acest lucru nu poate fi utilizat cu steaguri de compresie, deși puteți comprima fișierul tar creat ulterior folosind gzip sau alte instrumente.

Extrageți gudronul în Folder

Dacă doriți să extrageți conținutul tarball-ului într-un folder specific în loc de directorul curent, utilizați flag -C cu calea directorului, așa 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
$

Utilizați steagul diff

Puteți folosi –diff sau d flag pentru a găsi orice modificări între fișierele din arhiva tar și cele din sistemul de fișiere. Iată un exemplu care rulează diferența o dată când fișierul din interiorul tarului și din exterior era același. După actualizarea fișierului, acesta a fost rulat din nou pentru a arăta diferența de ieșire.

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

Excludeți fișiere

Excluderea anumitor fișiere poate fi o cerință în timpul creării arhivelor tar. Acest lucru poate fi realizat cu –exclude flag.

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

După cum puteți observa din rezultatul de mai sus, putem specifica semnalul –exclude de mai multe ori pentru a specifica mai multe nume de fișiere sau modele în starea AND. Rețineți că din cele șase fișiere din directorul din exemplul de mai sus, doar două fișiere au îndeplinit condiția de a fi incluse în archive.at.gz.

  Cum să utilizați noul magazin de prompturi AI Claude 3 de la Anthropic

Vedeți dimensiunea conținutului tar

Putem obține dimensiunea conținutului unei arhive tar comprimate folosind comanda de mai jos:

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

În mod similar pentru arhiva 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ăstrați permisiunile

În mod implicit, comanda tar păstrează permisiunea fișierelor și directoarelor pe care le arhivează, deși puteți specifica în mod explicit același lucru folosind -p flag sau –preserve-permissions, așa cum se arată mai jos:

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

Rezumat 👨‍💻

tar este un utilitar util pe sistemele Unix/Linux pentru o lungă perioadă de timp și a fost folosit în principal în sarcinile de arhivare și backup. Utilitatea a evoluat cu multe opțiuni de-a lungul timpului. Poate fi folosit pentru sarcini simple până la complexe, având în vedere caracteristicile pe care le oferă. Acest articol a acoperit câteva dintre operațiunile de bază pe care le puteți face cu comanda tar și vă arată cum vă poate ajuta în sarcinile zilnice de administrare a sistemului.

Consultați pagina sa de manual man tar sau utilizați comanda tar –help sau tar –usage pentru a obține mai multe detalii.