Tar
| Fiche express | |
|---|---|
| Domaine | Archivage de fichiers |
| Commande | tar
|
| Format | .tar (non compressé) — combinable avec gzip/bzip2/xz
|
| Options clés | -c créer, -x extraire, -t lister, -v verbeux, -f fichier
|
| Compresseurs | -z gzip, -j bzip2, -J xz
|
tar (tape archive) regroupe un ensemble de fichiers et de répertoires dans une seule archive, en conservant l'arborescence, les permissions et les liens. Il ne compresse rien par lui-même : la compression est déléguée à un outil externe (gzip, bzip2, xz…), que tar peut invoquer directement via une option dédiée.
Commandes de base
tar -cvf archive.tar /chemin/a/sauvegarder # créer une archive
tar -tvf archive.tar # lister le contenu sans extraire
tar -xvf archive.tar # extraire dans le répertoire courant
tar -xvf archive.tar -C /chemin/de/destination # extraire vers un autre répertoire
Avec compression intégrée (l'option de compresseur se combine avec c/x) :
tar -czvf archive.tar.gz /chemin # créer, compression gzip
tar -xzvf archive.tar.gz # extraire une archive gzip
tar -cjvf archive.tar.bz2 /chemin # créer, compression bzip2
tar -xjvf archive.tar.bz2 # extraire une archive bzip2
tar -cJvf archive.tar.xz /chemin # créer, compression xz (lzma2)
tar -xJvf archive.tar.xz # extraire une archive xz
xz n'est pas toujours installé par défaut :
apt-get install xz-utils
Exclure des fichiers
tar -czf archive.tar.gz --exclude={'*.log','*.tmp','*.old'} /chemin/a/sauvegarder
Archive multi-volumes
Pour découper une archive en plusieurs morceaux (support de taille limitée, transfert par
lots…), on combine tar avec split plutôt que d'utiliser le mode multi-volume
natif de tar (plus contraignant à l'usage) :
# Sauvegarde en volumes de 2000 Mo
tar -cvf - /rep/a/sauvegarder | split -b 2000m - /rep/de/dest/archive.tar.
# Restauration : réassembler puis lister/extraire
cat /rep/de/dest/archive.tar.* | tar -tvf -
cat /rep/de/dest/archive.tar.* | tar -xvf -
Transfert par SSH
Envoyer une archive compressée à la volée vers un serveur distant, sans fichier intermédiaire :
tar -czf - toto | ssh user@host "cd /chemin/distant/ && tar -xzpf -"
Le -p à l'extraction préserve les permissions d'origine.
Cloner un disque à distance (flux tar redirigé vers dd côté distant) :
tar -xzOf image-disque.tar.gz | ssh root@host "dd of=/dev/sdb bs=1M"
-O envoie le contenu extrait sur la sortie standard au lieu de l'écrire sur
disque localement.
Choisir un algorithme de compression
Comparatif rapide, du plus rapide au plus compact :
- gzip (
-z) — le plus rapide, bon compromis vitesse/taux par défaut. - lzo — extrêmement rapide (peut aller plus vite que le disque), taux de compression modeste.
- bzip2 (
-j) — plus lent que gzip pour un gain de compression qui ne le justifie plus guère ; à éviter pour de nouvelles archives. - xz / lzma2 (
-J) — meilleur taux de compression, au prix de la vitesse (surtout en écriture).lzmaest l'ancienne génération de xz, à peu près équivalente en taux mais sans intérêt aujourd'hui puisque xz fait au moins aussi bien.
Pousser le niveau de compression au maximum (-9/-9e) rapporte peu
en pratique et coûte cher en temps CPU ; le niveau par défaut est généralement suffisant.
# Compression a posteriori avec un niveau spécifique
tar -cvf archive.tar /chemin && gzip -9 archive.tar
# Variable d'environnement pour piloter les options de xz depuis tar
XZ_OPT=-9 tar -Jcvf archive.tar.xz /chemin