15 esempi di comandi tar per amministratore di sistema e sviluppatori
Pubblicato: 2021-09-21tar è 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.
