Introduzione
Il tar
di GNU (abbreviazione di T scimmia AR chiver) è l'utilità di archiviazione più utilizzata nei sistemi Linux. Disponibile direttamente nel terminale, il tar
Il comando aiuta a creare, estrarre ed elencare i contenuti dell'archivio.
L'utilità è semplice e offre molte opzioni utili per la compressione di file, la gestione dei backup o l'estrazione di un'installazione grezza.
Questo tutorial mostra come utilizzare il comando tar attraverso esempi e le opzioni disponibili.

Prerequisiti
- Un sistema che esegue Linux.
- Accesso alla riga di comando/terminale.
- Uno o più file per testare il comando.
Sintassi del comando Tar
Il tar
la sintassi generale del comando è:
tar <operation mode> <option(s)> <archive> <file(s) or location(s)>
- Modalità operativa indica quale operazione viene eseguita sui file (creazione, estrazione, ecc.). Il comando consente e richiede una sola operazione.
- Opzioni modificare la modalità di funzionamento e non sono necessari. Non c'è limite al numero di opzioni.
- L' archivio è il nome e l'estensione del file.
- Il nome/i file è un elenco separato da spazi per l'estrazione o la compressione o un nome con corrispondenza con caratteri jolly.
Esistono tre possibili stili di sintassi per utilizzare le operazioni e le opzioni:
1. Stile tradizionale , raggruppati insieme senza trattini.
Ad esempio:
tar cfv <archive> <file(s) or location(s)>
2. Stile opzione breve UNIX , utilizzando un unico trattino e opzioni raggruppate:
tar -cfv <archive> <file(s) or location(s)>
In alternativa, un trattino prima di ogni opzione:
tar -c -f -v <archive> <file(s) or location(s)>
3. Stile GNU con opzione lunga con un doppio trattino e un nome di opzione descrittivo:
tar --create --file <archive> --verbose <file(s) or location(s)>
Tutti e tre gli stili può essere utilizzato in un singolo tar
comando.
Opzioni del comando Tar
La tabella seguente delinea il tar
comunemente usato operazioni e opzioni.
Comando | Ruolo | Descrizione |
---|---|---|
--create -c | Operazione | Crea un nuovo archivio. |
--list -t | Operazione | Elenca i contenuti di un archivio. |
--extract -x | Operazione | Estrai uno o più elementi da un archivio. |
--append -r | Operazione | Aggiunge i file a un archivio esistente. |
--concatenate -A | Operazione | Aggiunge gli archivi a un archivio esistente. |
--compare --diff -d | Operazione | Confronta i membri dell'archivio con i file sul sistema. |
--delete | Operazione | Elimina un membro dall'archivio. |
--update -u | Operazione | Aggiorna l'archivio con nuovi file solo se non sono nell'archivio e sono più recenti dei file esistenti. |
--file=<archive> -f <archive> | Opzione | Specifica il file. |
-C | Opzione | Cambia la directory. |
--verbose -v | Opzione | Mostra il file tar funziona durante l'esecuzione. |
--wildcard | Opzione | Esegue il rendering delle opzioni di ricerca con caratteri jolly. |
--bzip2 -j | Opzione | Leggi o scrivi archivi compressi tramite il formato bzip2. |
--gzip -z | Opzione | Leggi o scrivi archivi compressi in formato gzip. |
--xz -J | Opzione | Leggi o scrivi archivi compressi in formato xz. |
Segui gli esempi nella prossima sezione per imparare come lavorare con tar .
Esempi di comandi Tar
Gli esempi seguenti hanno i seguenti requisiti:
1. Crea una directory denominata tar_examples e vai alla directory:
mkdir tar_examples && cd tar_examples
2. Crea un'altra directory chiamata files in tar_examples e inserisci quella directory:
mkdir files && cd files
3. Crea file per popolare i file directory:
touch file{0..100}.txt
Per tornare alla directory principale, usa:
cd ..

Tutti gli esempi seguenti funzionano da tar_examples directory.
1. Crea un archivio
La sintassi per la creazione di un archivio dipende dal tipo di archivio. Per creare un archivio, usa tar
con il -c
o --create
operazione.
Crea un archivio tar
Per creare un archivio tar (chiamato anche tarball), usa:
tar cf <archive name>.tar <file(s) or location(s)>
Ad esempio, archivia i file directory:
tar cf files.tar files
L'output elenca ogni file aggiunto all'archivio. Visualizza il contenuto della directory per vedere il file.tar creato archivio:
tar cf files.tar files
L'output elenca ogni file aggiunto all'archivio. Visualizza il contenuto della directory per vedere il file.tar creato archivio:
ls -l

Crea un archivio compresso tar.gz
Aggiungi il -z
opzione per creare un file GNUzip (gzip) compresso:
tar czf <archive name>.tar.gz <file(s) or location(s)>
Ad esempio:
tar czf files.tar.gz files

La dimensione del file è inferiore a un normale file tarball e alla directory originale.
Crea archivio compresso tar.bz2
bzip2 è un programma di compressione file e un'alternativa a gzip.
Per creare un tar.bz2 file, aggiungi il -j
tag:
tar cjf <archive name>.tar.bz2 <file(s) or location(s)>
Ad esempio:
tar cjf files.tar.bz2 files

bzip2 ha un tasso di compressione maggiore e impiega più tempo di gzip.
Crea archivio tar.xz
Usa il -J
tag per comprimere gli archivi nel formato tar.xz:
tar cJf <archive name>.tar.xz <file(s) or location(s)>
Ad esempio:
tar cJf files.tar.xz files

La compressione xz impiega più tempo rispetto a gzip e bz2. Tuttavia, con file più grandi, xz ha i tassi di compressione più elevati.
2. Rimuovi i file dopo la creazione
Per rimuovere i file dal disco dopo l'archiviazione, utilizza il --remove-files
opzione alla fine:
tar cf <archive> <file(s) or location(s)> --remove-files
Ad esempio, crea un archivio tar con i file directory e rimuoverlo dal disco con un comando:
tar cf files.tar files --remove-files

Controllare il contenuto della directory per verificare che l'operazione funzioni correttamente.
3. Estrai dall'archivio
L'estrazione da un archivio o da un archivio compresso utilizza il -x
o --extract
operazione con tar
. Le opzioni aggiuntive dipendono dal tipo di file e da dove tar dovrebbe estrarre i componenti.
Estrai dall'archivio tar
La sintassi generale per l'estrazione da un archivio tar è:
tar xf <archive name>.tar
Per impostazione predefinita, tar estrae tutti i componenti nella directory corrente. Per indicare dove estrarre i componenti, aggiungi il -C
opzione e specificare il percorso:
tar xfC <archive name>.tar <path>
Ad esempio, per creare una directory denominata extracted_tar ed estrai i file da files.tar , esegui:
mkdir extracted_tar && tar xfC files.tar extracted_tar

Il comando non genera un messaggio di conferma. Controlla il contenuto della directory per confermare che i componenti sono stati estratti correttamente.
Estrai dall'archivio tar.gz
Usa il -z
opzione per estrarre un file tar.gz:
tar xzf <archive name>.tar.gz
Il comando estrae il contenuto nella directory corrente. Aggiungi il -C
opzione per specificare la posizione:
tar xzfC <archive name>.tar.gz <location>
Ad esempio, crea una nuova directory denominata extracted_gz ed estrai i files.tar.gz contenuto:
mkdir extracted_gz && tar xzfC files.tar.gz extracted_gz

Gli archivi compressi tar.gz richiedono meno tempo per essere estratti rispetto ad altri formati di compressione.
Estrai dall'archivio tar.bz2
Per estrarre i file da un archivio compresso tar.bz2 nella directory corrente, usa:
tar xjf <archive name>.tar.bz2
Estrai gli archivi tar.bz2 in una directory specifica con:
tar xjfC <archive name>tar.bz2 <location>
Ad esempio, crea una directory ed estrai il contenuto da files.tar.bz2 :
mkdir extracted_bz2 && tar xjfC files.tar.bz2 extracted_bz2

Estrai dall'archivio tar.xz
Aggiungi il -J
opzione per estrarre da archivi compressi tar.xz. La sintassi da estrarre nella directory corrente è:
tar xJf <archive name>.tar.xz
Per estrarre il contenuto in una directory specifica, utilizza il -C
opzione e aggiungi il percorso:
tar xJfC <archive name>.tar.xz <location>
Ad esempio, crea una directory ed estrai files.tar.xz contenuto:
mkdir extracted_xz && tar xJfC files.tar.xz extracted_xz

Il formato di compressione xz è la via di mezzo tra gz e bz2 quando si tratta di tempo di estrazione.
4. Sovrascrivi controllo
I controlli di sovrascrittura tar gestiscono situazioni in cui i nomi dei file nell'archivio si sovrappongono ai file nella directory di lavoro.
Le tre possibili azioni di sovrascrittura sono:
1. Sovrascrivi i file nella directory di lavoro:
tar xf <archive> <Optional file(s) or location(s)> --overwrite
2. Non sovrascrivere i file nella directory di lavoro:
tar xf <archive> <Optional file(s) or location(s)> --keep-old-files

Se i file esistono già, tar non esegue l'estrazione.
3. Estrarre i file solo se sono più recenti dei file esistenti:
tar xf <archive> <Optional file(s) or location(s)> --keep-newer-files

Se i file nella directory di lavoro sono più recenti o della stessa età, tar non estrae i file.
5. Elenca i contenuti dell'archivio
Utilizzare il comando seguente per elencare il contenuto di un archivio:
tar tf <archive>
L'opzione funziona per qualsiasi estensione di file contenente tar.
Ad esempio, elenca i file e le directory in files.tar archivio:
tar tf files.tar.gz

L'output elenca tutti i contenuti archiviati nell'archivio.
6. Trova un file in un archivio
Esistono due modi per individuare contenuti specifici utilizzando tar:
1. Il -t
l'opzione per elencare i file in un archivio è utile per individuare file specifici. Aggiungi il nome (oi nomi) del file dopo il comando:
tar tf <archive> <file(s)>
Ad esempio, per individuare file50.txt nei files.tar.gz archivia, esegui:
tar tf files.tar.gz file/file50.txt

L'opzione richiede la conoscenza del possibile percorso del file.
2. Usa il tar
insieme al comando grep per filtrare l'output:
tar tf <archive> | grep <file(s)>
Ad esempio:
tar tf files.tar.gz | grep file50.txt

L'opzione non richiede la conoscenza del possibile percorso del file.
7. Trova più file in un archivio
Usa il --wildcards
opzione per abbinare più istanze di file. Ad esempio:
tar tf files.tar.gz --wildcards file/files5*.txt

Applica la corrispondenza con caratteri jolly quando i file hanno un nome simile o per filtrare un determinato tipo di file.
8. Escludi file durante la creazione di un archivio
Per escludere determinati file dall'archivio durante la creazione, aggiungi la seguente opzione:
tar cf <archive> --exclude='<pattern>' <files(s) or location(s)>
Ad esempio, crea un archivio dalla directory dei file ed escludi tutti i file .txt:
tar cf files.tar --exclude='*.txt' files
Elenca il contenuto dell'archivio:
tar tf files.tar

L'output non mostra file .txt, solo i file directory nell'archivio.
9. Estrai file singolo dall'archivio
Evita di estrarre l'intero archivio se hai bisogno di uno o più file.
Per ottenere un singolo file da un archivio:
1. Elenca il contenuto e controlla se il file esiste:
tar tf files.tar | grep file100.txt
L'output stampa il percorso del file necessario per il passaggio successivo.
2. Estrarre il file specifico con:
tar xf files.tar files/file100.txt

Il comando crea la directory files con solo il file indicato. Segui gli stessi passaggi per estrarre un singolo file dagli archivi compressi aggiungendo il tag appropriato. Ad esempio, utilizza il -z
opzione per estrarre da un file tar.gz.
10. Opzione dettagliata
L'opzione dettagliata visualizza informazioni aggiuntive dopo l'esecuzione di un comando tar. Aggiungi -v
o --verbose
a qualsiasi operazione per vedere il risultato.
Ad esempio, crea un file tar.gz e aggiungi -v
:
tar czfv files.tar.gz files

L'output mostra ogni file man mano che viene aggiunto all'archivio.
Alcuni comandi tar mostrano informazioni aggiuntive quando aggiungi il -v
tagga due volte. Ad esempio, prova ad aggiungere file a un archivio con -vv
:
tar czfvv files.tar.gz files

L'output stampa un formato di elenco lungo e sembra simile all'esecuzione del comando ls -l.
11. Elimina dall'archivio
Per eliminare dall'archivio, individua il file che desideri rimuovere, ad esempio:
tar tf files.tar | grep file100.txt
Quindi, rimuovi il file utilizzando il --delete
tag:
tar --delete -f files.tar files/file100.txt

L'opzione di eliminazione non funziona su compresso formati di file.
12. Aggiungi file all'archivio
Aggiungi file a un archivio esistente utilizzando il -r
etichetta. La sintassi è:
tar rf <archive name>.tar <file(s) or location(s)>
Ad esempio, aggiungi i files.tar.gz compressi file nel files.tar archivio:
tar rf files.tar files.tar.gz

Gli archivi già compressi non possono essere aggiornati, quindi la sintassi funziona solo per i file tarball .
13. Combina archivi
Usa il --concatenate
o -A
possibilità di combinare più archivi. La sintassi di base è:
tar Af <archive to extend> <archive to extend with>
Ad esempio, copia il files.tar esistente file utilizzando il comando cp:
cp files.tar files_copy.tar
Successivamente, concatena i due archivi:
tar Af files.tar files_copy.tar

Per confermare che la concatenazione ha funzionato, controlla la dimensione del file.
14. Differenza tra archivio e file
Per verificare la differenza tra un archivio e i file su disco, utilizza il -d
tag:
tar df <archive name>
Il comando ricerca gli stessi contenuti e li confronta con quelli presenti nell'archivio. L'opzione controlla solo i file esistenti e ignora i file appena aggiunti.
I passaggi seguenti mostrano come utilizzare il -d
, --diff
o --compare
tag con tar
:
1. Crea un archivio tar:
tar cf files.tar files
2. Confronta l'archivio con la directory esistente:
tar df files.tar

L'output non mostra nulla, il che significa che non c'è differenza tra i file esistenti.
3. Aggiungi testo a un file esistente in file directory:
echo 'Hello' >> files/file0.txt
4. Confronta nuovamente l'archivio con la directory esistente:
tar df files.tar

Questa volta, l'output mostra le differenze nell'ora di modifica e nella dimensione di un file specifico. Il confronto fornisce informazioni dettagliate su eventuali modifiche apportate al sistema dopo la creazione dell'archivio.
15. Aggiorna i file nell'archivio
Aggiorna i file esistenti nell'archivio con una versione più recente dal disco con il -u
opzione:
tar uf <archive> <file(s) or location(s)>
Ad esempio, aggiorna files.tar archivio con un file di testo modificato:
tar uf files.tar files
Controlla il contenuto di tar per il file modificato:
tar tfv files.tar | grep files0.txt

Il comando aggiorna l'archivio con i file modificati senza sovrascritture.
16. Ora modificata
Tar offre varie opzioni per modificare il timestamp del file. Imposta una data personalizzata durante la creazione di un archivio aggiungendo il --mtime
opzione e fornendo una data:
tar cf <archive> <file(s) or location(s)> --mtime=YYYY-MM-DD
Ad esempio, crea un archivio e imposta la data su 1 gennaio 1999:
tar cf files.tar files --mtime=1999-01-01

In alternativa, estrai i file con la data e l'ora correnti:
tar xf files.tar -m

Una funzionalità utile quando si lavora con il tempo è il filtraggio dei file modificati dopo una data specifica. Ad esempio, per estrarre i file creati dopo una data, utilizza il --newer-mtime
opzione e aggiungi la data:
tar xf <archive> --newer-mtime=YYYY-MM-DD
17. Autorizzazioni
Ci sono due modi possibili per controllare i permessi dei file con tar durante l'estrazione di un archivio:
1. Conserva le autorizzazioni originali:
tar xf <archive name> --preserve-permissions
I permessi sono quelli indicati nel file prima della creazione dell'archivio.
2. Modifica le autorizzazioni al valore umask predefinito:
tar xf <archive name> --no-same-permissions
I file assumono le autorizzazioni Linux predefinite.
18. Proprietà del file
Tar consente la configurazione della proprietà dei file. Ad esempio, per impostare il proprietario del file durante la creazione di un archivio, aggiungi il --owner
e --group
opzioni e fornire valori per ciascuno:
tar cf <archive> <file(s) or location(s)> --owner=<value> --group=<value>
Il valore proprietario rappresenta l'UID (ID utente) mentre il valore del gruppo è il GID (ID gruppo). Per trovare questi valori per un utente, esegui:
id <username>
Ad esempio, crea un archivio e imposta la proprietà su root:
tar cf files.tar files --owner=0 --group=0

Tar consente di preservare la proprietà durante l'estrazione da un archivio. Per farlo, aggiungi il --same-owner
opzione alla fine:
tar xf <archive> --same-owner
19. Scrivi al programma esterno
Il --to-command
opzione indica a tar di inviare ogni file estratto allo standard output per un programma esterno. La sintassi di base è:
tar xf <archive> --to-command='<command>'
Ad esempio, estrai files.tar content e reindirizzare i nomi dei file come directory:
tar xf files.tar --to-command='mkdir $TAR_FILENAME'

Il comando crea directory denominate dopo ogni file estratto. Per ulteriori informazioni e le variabili di ambiente Linux disponibili, visita la pagina di manuale.
20. Crea backup giornalieri
Per automatizzare i backup giornalieri, crea uno script bash e aggiungi le seguenti righe:
tar czf backup-$(date +%Y%m%d).tar.gz files
find backup* -mtime +1 -delete
Il comando tar crea un archivio compresso, mentre il comando find cerca i file di backup più vecchi di un giorno. Modifica il +1
parametro su +7
per settimana o +31
per backup mensili.