15 esempi di comandi tar per amministratore di sistema e sviluppatori

Pubblicato: 2021-09-21

tar è uno dei formati di archiviazione file più diffusi disponibili nei sistemi Unix e Linux.

Il nome stesso deriva da T ape AR chive poiché è stato sviluppato per scrivere dati sequenziali su dispositivi a nastro. A volte viene anche chiamato tarball.

Per impostazione predefinita, tar archivia solo i file senza compressione ma utilizzando alcune parti. Possiamo usare diverse tecniche di compressione per ottenere un output compresso. L'utilità tar è solitamente inclusa nella maggior parte delle distribuzioni Linux per impostazione predefinita e il formato stesso è supportato su altri sistemi operativi, inclusi Windows e macOS, tramite diversi strumenti e utilità.

Tratteremo alcuni degli esempi comuni e dell'utilizzo del comando tar e dei suoi flag supportati in questo articolo.

Quindi iniziamo…

Crea archivio tar

Per creare un semplice archivio non compresso, la sintassi del comando tar è:

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

Qui i flag c sta per la creazione, v per l'output dettagliato e f per specificare il nome del file di archivio tar. Per convenzione, specificare il nome del file tar con estensione .tar . I file da archiviare possono essere specificati con caratteri jolly o come nomi/percorsi di file singoli o multipli.

Ad esempio, ho tre file nella mia directory:

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

E voglio creare un archivio tar contenente tutti e tre i file, può essere fatto come:

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

Posso specificare anche solo file specifici da archiviare, come:

 $ 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 archivio compresso (GZ)

tar non solo consente l'archiviazione dei file, ma anche la loro compressione per risparmiare spazio. Uno dei formati di compressione più diffusi è gunzip, solitamente rappresentato dall'estensione .gz dopo .tar o come tgz . Possiamo usare il flag z per specificare che abbiamo bisogno che i file vengano compressi usando gunzip. Ecco un esempio:

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

È possibile osservare che la dimensione di entrambi i file di archivio è sostanzialmente diversa anche se entrambi contengono gli stessi tre file. Ciò è dovuto all'uso della compressione utilizzando il flag z .

Crea archivio compresso (BZ2)

tar supporta molti altri formati di compressione. Uno di questi è bz2 o bzip2 che è rappresentato dall'estensione tar.bz2 o talvolta come tbz2 . Potrebbe darti una dimensione di archivio più piccola ma a sua volta consuma più CPU, quindi il processo di compressione/decompressione potrebbe essere più lento dell'archivio gz .

Esempio:

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

Decomprimi tutti i file

Un archivio tar (compresso o non compresso) può essere estratto semplicemente utilizzando l'opzione x . Gli esempi seguenti ne chiariranno l'utilizzo:

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

Funziona per un archivio compresso gz come:

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

O anche per un archivio compresso bz2 come:

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

Elenco dei contenuti tar

Per elencare i contenuti di un archivio tar, puoi usare il flag t come mostrato di seguito:

 $ 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 di file specifici

È possibile estrarre un solo file da un archivio tar o tar.gz o tar.bz2 specificando il nome del file come:

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

Allo stesso modo, puoi specificare più nomi di file separati da uno spazio per estrarli insieme in una volta.

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

Annulla l'archiviazione utilizzando il carattere jolly

Per estrarre uno o più file utilizzando un PATTERN con caratteri jolly, utilizzare il 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 $

Aggiungere i files all'archivio

Nuovi file possono essere aggiunti/aggiunti ai tarball esistenti non compressi usando r o --append flag con nuovi nomi di file o pattern di caratteri jolly (ricorda che funziona solo con file .tar non compressi e non con formati compressi tar.gz o 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 $

Puoi osservare che l'elenco dei contenuti di archive.tar mostra nuovamente i due file appena aggiunti.

Elimina file dall'archivio

La rimozione di file specifici da un archivio tar è possibile utilizzando il flag --delete come mostrato di seguito (confrontare l'elenco tar prima e dopo la cancellazione dei file):

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

Anche in questo caso funziona solo per i tarball non compressi e fallirà per i formati di archivio compressi.

Crea con Verifica

Durante la creazione di file tar non compressi, è possibile verificare il contenuto dell'archivio utilizzando il flag W come:

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

Questo non può essere usato con i flag di compressione anche se puoi comprimere il file tar creato in un secondo momento usando gzip o altri strumenti.

Estrai tar nella cartella

Se si desidera estrarre il contenuto del tarball in una cartella specifica anziché nella directory corrente, utilizzare il flag -C con il percorso della directory come mostrato di seguito:

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

Usa flag diff

È possibile utilizzare --diff o d bandiera per trovare eventuali modifiche tra i file presenti nell'archivio tar e quelli nel filesystem. Ecco un esempio che esegue il diff una volta quando il file all'interno del tar e all'esterno era lo stesso. Dopo aver aggiornato il file, è stato eseguito ancora una volta per mostrare la differenza nell'output.

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

Escludi file

L'esclusione di file specifici può essere un requisito durante la creazione di archivi tar. Questo può essere ottenuto con --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 $

Come puoi notare dall'output sopra, possiamo specificare il flag --exclude più volte per specificare più nomi di file o modelli in condizione AND . Si noti che dei sei file nella dir nell'esempio di cui sopra, solo due file soddisfatto la condizione da includere nel archive.at.gz .

Visualizza la dimensione del contenuto tar

Possiamo ottenere la dimensione del contenuto di un archivio tar compresso usando il comando seguente:

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

Allo stesso modo per l'archivio 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 $

Conserva i permessi

Per impostazione predefinita, il comando tar conserva i permessi di file e directory che sta archiviando, sebbene sia possibile specificare esplicitamente lo stesso utilizzando il flag -p o --preserve-permissions come mostrato di seguito:

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

Riepilogo

tar è un'utilità utile sui sistemi Unix/Linux da molto tempo ed è stata utilizzata principalmente nelle attività di archiviazione e backup. L'utilità si è evoluta con molte opzioni nel tempo. Può essere utilizzato per attività da semplici a complesse, se conosci le funzionalità che offre. Questo articolo ha trattato alcune delle operazioni di base che puoi eseguire con il comando tar e mostra come può aiutarti nelle tue attività quotidiane di amministrazione del sistema.

Fare riferimento alla sua pagina man tar o utilizzare il comando tar --help o tar --usage per ulteriori dettagli.