Dans un système Linux, savoir manipuler des fichiers et des répertoires
rapidement et efficacement est essentiel pour tout administrateur ou utilisateur
avancé. La commande tar est l’un des outils les plus utilisés pour archiver,
sauvegarder et transférer des données. Que ce soit pour automatiser une
sauvegarde quotidienne, compresser des logs ou extraire des fichiers d’une
archive distante, maîtriser tar permet de gagner un temps précieux et d’éviter
bien des erreurs. C’est une compétence de base incontournable pour toute
personne qui gère un serveur ou travaille régulièrement en ligne de commande.
Introduction à tar
Section intitulée « Introduction à tar »La commande tar, diminutif de tape archive, a été conçue à l’origine pour sauvegarder des fichiers sur des bandes magnétiques. Aujourd’hui, elle reste un pilier dans les systèmes Unix/Linux pour regrouper plusieurs fichiers ou répertoires en une seule archive, tout en conservant leurs droits, dates, structures et propriétaires.
Son grand avantage ? Elle permet de travailler avec ou sans compression, de lister ou d’extraire des fichiers spécifiques sans devoir décompresser toute l’archive et s’utilise dans des scripts, des tâches automatisées, ou des transferts réseau.
Voici quelques cas concrets où tar est utile :
- Sauvegarder le contenu d’un répertoire avant une mise à jour ;
- Compresser des fichiers journaux trop volumineux ;
- Transférer un projet complet à un autre serveur via SSH ;
- Préparer des dépôts ou packages pour un déploiement.
Elle est donc incontournable dès que l’on parle de gestion de fichiers à grande échelle ou de scripting système.
Syntaxe de base
Section intitulée « Syntaxe de base »La commande tar suit une structure simple mais puissante. Elle se compose d’options, du nom de l’archive et des fichiers ou répertoires à traiter.
tar [options] [nom_archive] [fichiers_ou_dossiers]Voici les options principales à connaître :
-c: crée une nouvelle archive (create)-x: extrait une archive (extract)-t: affiche le contenu d’une archive (list)-f: spécifie le fichier d’archive à utiliser (file) — toujours en dernier parmi les options-v: mode verbeux, affiche les fichiers traités (verbose)-z: utilise gzip pour la compression/décompression-j: utilise bzip2-J: utilise xz
Exemples d’utilisation :
-
Créer une archive :
Fenêtre de terminal tar -cvf archive.tar mon_dossier/ -
Créer une archive compressée avec gzip :
Fenêtre de terminal tar -czvf archive.tar.gz mon_dossier/ -
Extraire une archive :
Fenêtre de terminal tar -xvf archive.tar
Remarque : l’ordre des options est important, surtout pour -f, qui doit
précéder immédiatement le nom du fichier archive.
En maîtrisant cette syntaxe de base, on peut ensuite passer à des cas d’usage plus avancés : exclusion de fichiers, sauvegardes automatiques, transferts, et plus encore.
Création d’archives
Section intitulée « Création d’archives »Créer une archive avec tar est une opération fréquente, que ce soit pour faire une sauvegarde, transférer un répertoire complet ou simplement regrouper des fichiers. Voici les formes les plus courantes.
Sans compression
Section intitulée « Sans compression »Cette commande crée une archive .tar contenant tous les fichiers d’un dossier
:
tar -cvf archive.tar mon_dossier/-c: création-v: affiche les fichiers archivés-f: indique le nom de l’archive
Avec compression gzip
Section intitulée « Avec compression gzip »Gzip est le format de compression le plus répandu avec tar. Il est rapide et
bien supporté :
tar -czvf archive.tar.gz mon_dossier/-z: compression gzip
Avec compression bzip2
Section intitulée « Avec compression bzip2 »Bzip2 compresse mieux que gzip, mais il est plus lent. Utile pour les archives à long terme.
tar -cjvf archive.tar.bz2 mon_dossier/-j: compression bzip2
Avec compression xz
Section intitulée « Avec compression xz »XZ offre la meilleure compression, mais c’est aussi la plus lente.
tar -cJvf archive.tar.xz mon_dossier/-J: compression xz
Archiver plusieurs fichiers
Section intitulée « Archiver plusieurs fichiers »Il est aussi possible de cibler plusieurs fichiers à la fois :
tar -czvf mes_fichiers.tar.gz fichier1.txt fichier2.log dossier/Astuce : pour exclure certains fichiers ou répertoires lors de la création
d’une archive, on peut utiliser l’option --exclude :
tar --exclude='*.log' -czvf archive.tar.gz mon_dossier/Créer une archive adaptée à son besoin, avec ou sans compression, est le premier
pas vers une utilisation efficace de tar.
Extraction d’archives
Section intitulée « Extraction d’archives »Extraire une archive est tout aussi important que la créer. Que l’on souhaite récupérer l’intégralité d’un backup ou seulement un fichier précis, tar permet une grande souplesse.
Extraction simple (sans compression)
Section intitulée « Extraction simple (sans compression) »Pour extraire le contenu d’une archive .tar :
tar -xvf archive.tar-x: extraction-v: mode verbeux-f: fichier à extraire
Extraction avec compression
Section intitulée « Extraction avec compression »Les options de compression sont nécessaires si l’archive a été compressée :
-
.tar.gzou.tgz:Fenêtre de terminal tar -xzvf archive.tar.gz -
.tar.bz2:Fenêtre de terminal tar -xjvf archive.tar.bz2 -
.tar.xz:Fenêtre de terminal tar -xJvf archive.tar.xz
Extraction vers un répertoire spécifique
Section intitulée « Extraction vers un répertoire spécifique »Plutôt que d’extraire dans le répertoire courant, on peut spécifier un dossier
de destination avec l’option -C :
tar -xvf archive.tar -C /chemin/vers/dossier/Extraire un ou plusieurs fichiers spécifiques
Section intitulée « Extraire un ou plusieurs fichiers spécifiques »Si l’on ne veut pas tout extraire, on peut viser un ou plusieurs fichiers précis :
tar -xvf archive.tar chemin/vers/fichier.txtOu plusieurs fichiers à la fois :
tar -xvf archive.tar fichier1.txt fichier2.logUtilisation des jokers (wildcards)
Section intitulée « Utilisation des jokers (wildcards) »Pour extraire uniquement certains types de fichiers :
tar -xvf archive.tar --wildcards '*.jpg'Cela est très pratique pour récupérer uniquement les images, les scripts .sh,
ou tout autre format spécifique.
Avec ces commandes, on gagne un vrai contrôle sur ce que l’on extrait, où, et comment. C’est fondamental en environnement de production ou en cas de récupération ciblée de données.
Manipulation des archives
Section intitulée « Manipulation des archives »Tar ne se limite pas à créer ou extraire : on peut aussi analyser, modifier, ou compléter une archive existante. Ces fonctions avancées permettent d’ajuster une archive sans repartir de zéro.
Lister le contenu d’une archive
Section intitulée « Lister le contenu d’une archive »Avant d’extraire, il est souvent utile de voir ce qu’elle contient :
tar -tvf archive.tar-t: liste le contenu sans extraire-v: affiche les droits, tailles, dates, etc.
Avec une archive compressée :
tar -tzvf archive.tar.gzAjouter des fichiers à une archive
Section intitulée « Ajouter des fichiers à une archive »On peut ajouter des fichiers, mais seulement si l’archive n’est pas compressée :
tar -rvf archive.tar nouveau_fichier.txt-r: append, ajoute à l’archive
Ajouter un dossier complet :
tar -rvf archive.tar nouveau_dossier/Supprimer des fichiers d’une archive (via --delete)
Section intitulée « Supprimer des fichiers d’une archive (via --delete) »Attention : cette fonction ne marche que sur les archives non compressées :
tar --delete -f archive.tar chemin/vers/fichierExtraire des fichiers en fonction de motifs
Section intitulée « Extraire des fichiers en fonction de motifs »Pour extraire uniquement certains types de fichiers :
tar -xvf archive.tar --wildcards '*.sh'On peut aussi combiner avec un répertoire :
tar -xvf archive.tar --wildcards 'logs/*.log'Réparer une archive endommagée
Section intitulée « Réparer une archive endommagée »Il est possible de récupérer partiellement une archive incomplète :
tar -xvf archive.tar --ignore-zerosCela permet parfois d’extraire une partie des fichiers même si l’archive est corrompue en fin de fichier.
Cas pratiques
Section intitulée « Cas pratiques »Pour vraiment maîtriser la commande tar, rien ne vaut quelques scénarios
concrets. Voici des exemples d’usage courant dans un environnement système ou
DevOps.
Sauvegarde complète d’un répertoire
Section intitulée « Sauvegarde complète d’un répertoire »Pour archiver tout un répertoire, y compris ses sous-dossiers et permissions :
tar -czvf sauvegarde_$(date +%Y%m%d).tar.gz /etc/Cela crée une archive nommée avec la date du jour, utile pour les sauvegardes journalières.
Sauvegarde incrémentale (avec --listed-incremental)
Section intitulée « Sauvegarde incrémentale (avec --listed-incremental) »Créer un fichier d’état pour sauvegarder seulement ce qui a changé depuis la dernière sauvegarde :
tar --listed-incremental=etat.snar -czvf backup.tar.gz /home/user/À répéter régulièrement avec le même fichier etat.snar.
Transfert d’un dossier via SSH
Section intitulée « Transfert d’un dossier via SSH »Pour envoyer un dossier à un serveur distant sans le stocker localement :
tar -czf - mon_dossier/ | ssh user@serveur 'tar -xzf - -C /destination/'Cette méthode est rapide et évite les fichiers temporaires.
Compression et nettoyage de logs
Section intitulée « Compression et nettoyage de logs »Archiver et supprimer les fichiers .log vieux de plus de 7 jours :
find /var/log -name "*.log" -mtime +7 -print | tar -czvf logs_ancien.tar.gz -T - --remove-filesAutomatiser une sauvegarde avec cron
Section intitulée « Automatiser une sauvegarde avec cron »Exemple de ligne à insérer dans une crontab pour faire une sauvegarde chaque nuit à 2h :
0 2 * * * tar -czf /sauvegardes/backup_$(date +\%Y\%m\%d).tar.gz /home/utilisateur/Cette commande peut aussi être intégrée à un script avec envoi par email, upload vers un cloud, etc.
Intégration avec find pour cibler des fichiers
Section intitulée « Intégration avec find pour cibler des fichiers »Créer une archive avec tous les fichiers modifiés les 2 derniers jours :
find . -type f -mtime -2 -print | tar -czvf modifs.tar.gz -T -Ces cas d’usage permettent de passer d’une utilisation ponctuelle à une automatisation robuste, adaptée à un usage professionnel.
Bonnes pratiques
Section intitulée « Bonnes pratiques »Maîtriser la commande tar, c’est aussi adopter des habitudes fiables pour éviter les erreurs, améliorer la lisibilité et faciliter la maintenance.
Toujours vérifier le contenu avant extraction
Section intitulée « Toujours vérifier le contenu avant extraction »Avant d’extraire une archive, surtout si elle est volumineuse ou inconnue :
tar -tvf archive.tar.gzCela permet d’éviter d’écraser des fichiers importants ou de polluer un répertoire avec des fichiers inattendus.
Utiliser des répertoires dédiés
Section intitulée « Utiliser des répertoires dédiés »Une archive qui extrait des fichiers directement dans le répertoire courant est appelée une tarbomb. Pour éviter ça, archivez toujours un répertoire racine :
tar -czvf mon_projet.tar.gz mon_projet/Et pour l’extraction :
mkdir test && tar -xvf archive.tar -C test/Choisir la bonne compression
Section intitulée « Choisir la bonne compression »- gzip : rapide, supporté partout, bon compromis
- bzip2 : plus de compression, mais plus lent
- xz : compression maximale, très lent, idéal pour l’archivage long terme
Adaptez selon votre contexte : vitesse ou taille minimale ?
Inclure la date dans le nom des archives
Section intitulée « Inclure la date dans le nom des archives »C’est indispensable pour s’y retrouver dans les sauvegardes :
tar -czvf backup_$(date +%Y%m%d).tar.gz /etc/Toujours utiliser -f en dernier dans les options
Section intitulée « Toujours utiliser -f en dernier dans les options »L’ordre des options est important. Mettez toujours -f juste avant le nom de
l’archive :
tar -czvf archive.tar.gz dossier/Éviter les erreurs courantes
Section intitulée « Éviter les erreurs courantes »- Oublier
-fet avoir un message d’erreur confus - Essayer de modifier une archive compressée
- Extraire une archive à la racine sans vérifier son contenu
En suivant ces pratiques, on évite la plupart des pièges classiques. On gagne aussi en lisibilité, en sécurité et en efficacité, surtout dans des scripts automatisés.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
📋 Récapitulatif de vos réponses
Vérifiez vos réponses avant de soumettre. Cliquez sur une question pour la modifier.
Détail des réponses
Conclusion
Section intitulée « Conclusion »Maîtriser la commande tar, c’est s’offrir un outil polyvalent pour gérer
efficacement les fichiers sous Linux : sauvegarder, compresser,
transférer ou restaurer en quelques lignes de commande. Que ce soit pour
un usage ponctuel ou intégré dans des scripts d’automatisation, tar reste une
compétence indispensable pour tout administrateur système ou utilisateur avancé.
FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »Définition
tar (Tape ARchive) est un outil d'archivage qui regroupe plusieurs fichiers/dossiers dans une seule archive, préservant arborescence et métadonnées (permissions, timestamps, propriétaire).
| Caractéristique | Description |
|---|---|
| Type | Archiveur non-compresseur natif |
| Format | Concaténation séquentielle des fichiers |
| Métadonnées | Préserve permissions, dates, liens |
| Compression | Via pipe (gzip, bzip2, xz) |
| Extensions | .tar, .tar.gz, .tgz, .tar.bz2, .tar.xz |
| Origine | Conçu pour sauvegardes sur bandes (1979) |
Variantes de compression
# Sans compression (archive brute)
tar -cf archive.tar dossier/
# Avec gzip (standard, rapide)
tar -czf archive.tar.gz dossier/
# Avec bzip2 (meilleure compression)
tar -cjf archive.tar.bz2 dossier/
# Avec xz (compression maximale)
tar -cJf archive.tar.xz dossier/
Contexte DevOps : Essentiel pour déploiements, backups applicatifs, transferts de code sources, création d'images Docker (layers tar).
Raisons d'usage
| Cas d'usage | Avantages | Exemple |
|---|---|---|
| Backup | Préserve structure + métadonnées | tar -czf backup-$(date +%F).tar.gz /var/www |
| Transfert réseau | 1 fichier vs milliers | tar -czf - /app | ssh user@dest tar -xzf - |
| Déploiement | Reproductibilité exacte | tar -xzf release-v1.2.tar.gz -C /opt |
| Archivage | Compression efficace | tar -cJf logs-2023.tar.xz /var/log |
| Versionning | Snapshots horodatés | tar -czf config-$(date +%s).tar.gz /etc |
Avantages vs autres outils
- vs cp : Préserve permissions/propriétaires complexes
- vs zip : Format universel Linux, meilleure intégration pipe
- vs rsync : Archivage statique (pas de synchro)
- vs dd : Granularité fichiers (pas bloc brut)
# Backup incrémental (avec find)
find /var/www -mtime -1 | tar -czf daily.tar.gz -T -
# Pipeline réseau (sans fichier intermédiaire)
tar -czf - /data | ssh backup tar -xzf - -C /backups
Contexte DevOps : Backup GitLab, artifacts CI/CD, conteneurs LXC, exports Terraform state.
Syntaxe générale
tar [MODE] [OPTIONS] [ARCHIVE] [FICHIERS...]
Modes principaux (obligatoire 1)
| Mode | Option courte | Option longue | Action |
|---|---|---|---|
| Create | -c |
--create |
Créer archive |
| eXtract | -x |
--extract |
Extraire archive |
| lisT | -t |
--list |
Lister contenu |
| aPpend | -r |
--append |
Ajouter fichiers |
| Update | -u |
--update |
Mettre à jour fichiers modifiés |
Options essentielles
| Option | Signification | Usage |
|---|---|---|
-f FILE |
Fichier archive | Obligatoire (sinon stdin/stdout) |
-v |
Verbeux | Affiche fichiers traités |
-z |
gZip | Compression/décompression .tar.gz |
-j |
bZip2 | Compression .tar.bz2 |
-J |
XZ | Compression .tar.xz |
-C DIR |
Change directory | Extraction dans répertoire spécifique |
-p |
Preserve permissions | Conserve droits exacts (utile root) |
Exemples typés
# Création archive gzip
tar -czf backup.tar.gz /etc/nginx
# | | |
# | | +-> Nom archive
# | +----> gZip
# +------> Create, Fichier
# Extraction verbeux
tar -xzvf backup.tar.gz -C /restore
# | | |
# | | +-> Nom archive
# | +----> Verbeux
# +-------> eXtract, gZip, Fichier
Raisons d'usage
| Cas d'usage | Avantages | Exemple |
|---|---|---|
| Backup | Préserve structure + métadonnées | tar -czf backup-$(date +%F).tar.gz /var/www |
| Transfert réseau | 1 fichier vs milliers | tar -czf - /app | ssh user@dest tar -xzf - |
| Déploiement | Reproductibilité exacte | tar -xzf release-v1.2.tar.gz -C /opt |
| Archivage | Compression efficace | tar -cJf logs-2023.tar.xz /var/log |
| Versionning | Snapshots horodatés | tar -czf config-$(date +%s).tar.gz /etc |
Avantages vs autres outils
- vs cp : Préserve permissions/propriétaires complexes
- vs zip : Format universel Linux, meilleure intégration pipe
- vs rsync : Archivage statique (pas de synchro)
- vs dd : Granularité fichiers (pas bloc brut)
# Backup incrémental (avec find)
find /var/www -mtime -1 | tar -czf daily.tar.gz -T -
# Pipeline réseau (sans fichier intermédiaire)
tar -czf - /data | ssh backup tar -xzf - -C /backups
Contexte DevOps : Backup GitLab, artifacts CI/CD, conteneurs LXC, exports Terraform state.
Syntaxe générale
tar [MODE] [OPTIONS] [ARCHIVE] [FICHIERS...]
Modes principaux (obligatoire 1)
| Mode | Option courte | Option longue | Action |
|---|---|---|---|
| Create | -c |
--create |
Créer archive |
| eXtract | -x |
--extract |
Extraire archive |
| lisT | -t |
--list |
Lister contenu |
| aPpend | -r |
--append |
Ajouter fichiers |
| Update | -u |
--update |
Mettre à jour fichiers modifiés |
Options essentielles
| Option | Signification | Usage |
|---|---|---|
-f FILE |
Fichier archive | Obligatoire (sinon stdin/stdout) |
-v |
Verbeux | Affiche fichiers traités |
-z |
gZip | Compression/décompression .tar.gz |
-j |
bZip2 | Compression .tar.bz2 |
-J |
XZ | Compression .tar.xz |
-C DIR |
Change directory | Extraction dans répertoire spécifique |
-p |
Preserve permissions | Conserve droits exacts (utile root) |
Exemples typés
# Création archive gzip
tar -czf backup.tar.gz /etc/nginx
# | | |
# | | +-> Nom archive
# | +----> gZip
# +------> Create, Fichier
# Extraction verbeux
tar -xzvf backup.tar.gz -C /restore
# | | |
# | | +-> Nom archive
# | +----> Verbeux
# +-------> eXtract, gZip, Fichier
Création archive basique
# Syntaxe minimale
tar -cf archive.tar dossier/
# ||
# |+-> Fichier archive (nom obligatoire avec -f)
# +---> Create (créer)
Exemples pratiques
# Archive d'un répertoire
tar -cf backup.tar /var/www/html
# Archiver plusieurs sources
tar -cf projet.tar src/ docs/ README.md
# Verbeux (afficher fichiers traités)
tar -cvf backup.tar /etc/nginx
# Préserver permissions complètes (mode root)
tar -cpf system.tar /etc /opt
# |
# +-> Preserve permissions
Caractéristiques
| Propriété | Comportement |
|---|---|
| Compression | Aucune (archive brute) |
| Taille | Somme fichiers + métadonnées (~101% sources) |
| Vitesse | Rapide (I/O seul) |
| Métadonnées | Permissions, timestamps, liens préservés |
| Modification | Possible (-r pour append) |
Différence vs tar.gz
# SANS compression (rapide, grosse taille)
tar -cf backup.tar logs/ # 850 Mo
# AVEC compression (lent, petite taille)
tar -czf backup.tar.gz logs/ # 120 Mo
Usage : Archives à compléter incrémentalement, transferts réseau rapides (pipe).
Création avec compression gzip
# Option -z pour gzip
tar -czf archive.tar.gz dossier/
# |
# +-> gZip (compression)
# Équivalent verbeux
tar -czvf backup.tar.gz /var/www
Variantes de compression
| Méthode | Commande | Taux compression | Vitesse | Compatibilité |
|---|---|---|---|---|
| gzip | tar -czf |
~60-70% | Rapide | Universelle |
| bzip2 | tar -cjf |
~70-80% | Moyen | Très bonne |
| xz | tar -cJf |
~80-90% | Lent | Bonne (2009+) |
| lzma | tar --lzma -cf |
~80-85% | Lent | Moyenne |
Exemples comparatifs
# Test sur 1 Go de logs
# Sans compression (1.02 Go, 8s)
tar -cf logs.tar /var/log
# gzip - standard (320 Mo, 25s)
tar -czf logs.tar.gz /var/log
# bzip2 - meilleur ratio (180 Mo, 95s)
tar -cjf logs.tar.bz2 /var/log
# xz - compression max (140 Mo, 180s)
tar -cJf logs.tar.xz /var/log
Bonnes pratiques
# Convention nommage
tar -czf backup-$(date +%F).tar.gz /data
# backup-2026-01-08.tar.gz
# Exclure fichiers volumineux
tar -czf archive.tar.gz --exclude='*.mp4' dossier/
# Niveau compression custom (1-9)
GZIP=-9 tar -czf max-compress.tar.gz /data
Usage DevOps : Backups quotidiens, artifacts CI/CD, conteneurs exports.
Extraction de base
# Extraction dans répertoire courant
tar -xzf archive.tar.gz
# ||
# |+-> gZip (décompression automatique)
# +---> eXtract
# Verbeux (voir fichiers extraits)
tar -xzvf backup.tar.gz
Options d'extraction
| Option | Usage | Exemple |
|---|---|---|
-C DIR |
Extraire vers répertoire spécifique | tar -xzf data.tar.gz -C /restore |
-p |
Préserver permissions exactes | tar -xzpf system.tar.gz (root) |
--strip-components=N |
Retirer N niveaux de dossiers | tar -xzf app.tar.gz --strip-components=1 |
--keep-old-files |
Ne pas écraser existants | tar -xzf backup.tar.gz -k |
-v |
Mode verbeux | Affiche chaque fichier extrait |
Exemples pratiques
# Extraction dans /tmp
tar -xzf backup.tar.gz -C /tmp
# Extraire en préservant tout (mode root)
sudo tar -xzpf system-backup.tar.gz -C /
# Retirer dossier racine (app/src/* -> src/*)
tar -xzf release.tar.gz --strip-components=1
# Extraire fichier spécifique
tar -xzf archive.tar.gz chemin/vers/fichier.txt
# Extraire pattern (tous les .conf)
tar -xzf backup.tar.gz --wildcards '*.conf'
Vérifications avant extraction
# Lister contenu (sans extraire)
tar -tzf archive.tar.gz
# Compter fichiers
tar -tzf backup.tar.gz | wc -l
# Vérifier intégrité
gunzip -t backup.tar.gz
Sécurité : Toujours lister avant extraction (risque chemin absolus, path traversal).
Listing basique
# Lister fichiers (tar non compressé)
tar -tf archive.tar
# |
# +-> lisT (afficher contenu)
# Lister tar.gz
tar -tzf archive.tar.gz
# |
# +-> gZip
# Avec détails (permissions, taille, date)
tar -tvf backup.tar
# |
# +-> Verbeux (format long)
Formats de sortie
# Sortie simple (chemins seulement)
$ tar -tzf backup.tar.gz
app/
app/config.yml
app/main.py
# Sortie détaillée (ls -l style)
$ tar -tvzf backup.tar.gz
drwxr-xr-x user/group 0 2026-01-08 app/
-rw-r--r-- user/group 452 2026-01-08 app/config.yml
-rwxr-xr-x user/group 8743 2026-01-08 app/main.py
Filtrage et recherche
# Chercher fichier spécifique
tar -tzf archive.tar.gz | grep config
# Compter fichiers
tar -tzf backup.tar.gz | wc -l
# Lister seulement .py
tar -tzf app.tar.gz | grep '\.py$'
# Taille totale décompressée
tar -tvzf backup.tar.gz | awk '{sum+=$3} END {print sum/1024/1024 "Mo"}'
Vérifications sécurité
# Détecter chemins absolus (risque écrasement)
tar -tzf suspect.tar.gz | grep '^/'
# Détecter path traversal
tar -tzf suspect.tar.gz | grep '\.\.'
# Analyser structure
tar -tzf archive.tar.gz | cut -d/ -f1 | sort -u
Contexte DevOps : Validation artifacts CI/CD, audit backups, vérification releases.
Ajout incrémental
# Option -r (append)
tar -rvf archive.tar nouveau_fichier.txt
# ||
# |+-> Verbeux (optionnel)
# +---> aPpend (ajouter)
# Ajouter plusieurs fichiers
tar -rvf backup.tar docs/ config.yml
Limitations importantes
| Contrainte | Raison | Solution |
|---|---|---|
| Archives compressées | Incompatible (-r refuse .tar.gz) | Décompresser → ajouter → recompresser |
| Position | Ajout en fin d'archive | Utiliser -A pour concaténer |
| Taille | Archive grandit linéairement | Recréer périodiquement |
Workflow archives compressées
# Méthode 1 : Décompresser temporairement
gunzip backup.tar.gz # backup.tar
tar -rvf backup.tar new_file.txt # Ajout
gzip backup.tar # backup.tar.gz
# Méthode 2 : Extraction complète + recréation
mkdir temp && tar -xzf backup.tar.gz -C temp
cp new_file.txt temp/
tar -czf backup.tar.gz -C temp .
# Méthode 3 : Concaténation d'archives
tar -czf addon.tar.gz new_files/
tar -Af main.tar addon.tar # Fusionne (tar non compressé)
Alternatives modernes
# Backup incrémental avec find
find /data -newer /tmp/last_backup.stamp | \
tar -czf incremental.tar.gz -T -
touch /tmp/last_backup.stamp
# Versioning (créer nouvelle archive)
tar -czf backup-$(date +%Y%m%d-%H%M).tar.gz /data
Bonne pratique : Privilégier nouvelles archives horodatées vs append sur grosses archives.
Extraction ciblée
# Extraire 1 fichier (chemin exact)
tar -xzf archive.tar.gz chemin/vers/fichier.txt
# Extraire plusieurs fichiers
tar -xzf backup.tar.gz file1.conf file2.log
# Extraire avec pattern (wildcards)
tar -xzf archive.tar.gz --wildcards '*.conf'
Trouver le chemin exact
# Lister pour identifier chemin
tar -tzf archive.tar.gz | grep config
# Extraction avec résultat
tar -xzvf backup.tar.gz app/config/database.yml
Extraction avec filtres
| Méthode | Exemple | Usage |
|---|---|---|
| Pattern simple | tar -xzf data.tar.gz '*.json' |
Extension spécifique |
| Wildcards | tar -xzf backup.tar.gz --wildcards 'logs/2026-*' |
Pattern complexe |
| Dossier entier | tar -xzf archive.tar.gz app/config/ |
Répertoire complet |
| Exclusion | tar -xzf data.tar.gz --exclude='*.tmp' |
Inverser sélection |
Exemples pratiques
# Extraire tous les .conf d'un backup système
tar -xzf system.tar.gz --wildcards '*.conf' -C /tmp
# Restaurer seulement /etc/nginx
tar -xzf full-backup.tar.gz etc/nginx
# Extraire avec remplacement chemin
tar -xzf app.tar.gz app/config.yml --strip-components=1
# Résultat : config.yml (sans dossier app/)
# Extraction multiple ciblée
tar -xzf backup.tar.gz \
etc/nginx/nginx.conf \
etc/ssl/private/server.key
Astuce : Toujours lister (-t) avant extraction pour vérifier chemins exacts.
Exclusions simples
# Exclure pattern (fichiers .log)
tar --exclude='*.log' -czf backup.tar.gz /var/www
# Exclure plusieurs patterns
tar --exclude='*.tmp' --exclude='*.cache' -czf clean.tar.gz /app
# Exclure dossier entier
tar --exclude='node_modules' -czf projet.tar.gz /projet
Exclusions avancées
| Méthode | Syntaxe | Usage |
|---|---|---|
| Pattern simple | --exclude='*.log' |
Extension spécifique |
| Dossier | --exclude='cache' |
Nom dossier partout |
| Chemin absolu | --exclude='/var/cache' |
Emplacement précis |
| Fichier liste | --exclude-from=exclusions.txt |
Multiples patterns |
| Regex | --exclude-vcs |
Exclure .git, .svn auto |
Fichier d'exclusions
# Créer liste exclusions
cat > exclusions.txt <<EOF
*.log
*.tmp
node_modules
.git
__pycache__
*.pyc
EOF
# Utiliser la liste
tar --exclude-from=exclusions.txt -czf clean.tar.gz /projet
Patterns courants DevOps
# Backup code sans dépendances
tar --exclude='node_modules' \
--exclude='vendor' \
--exclude='.git' \
-czf code-only.tar.gz /app
# Backup avec exclusions multiples
tar --exclude='*.log' \
--exclude='*.tmp' \
--exclude='cache/*' \
--exclude-vcs \
-czf production.tar.gz /var/www
# Exclure fichiers volumineux (>100M)
tar --exclude-from=<(find /data -size +100M) \
-czf data-light.tar.gz /data
Option --exclude-vcs
# Exclut automatiquement
tar --exclude-vcs -czf projet.tar.gz /code
# Ignore : .git, .svn, .hg, .bzr, CVS
Astuce : Tester avec --exclude + -t (list) avant création réelle.
En ajoutant -C : tar -xvf archive.tar -C /chemin/vers/dossier/, ce qui extrait le contenu dans le dossier spécifié.
Gzip (-z) est rapide, bzip2 (-j) compresse mieux mais plus lentement, xz (-J) offre la meilleure compression mais est le plus lent. Le choix dépend du besoin entre vitesse et taux de compression.
On utilise un pipe : tar -czf - dossier/ | ssh user@serveur 'tar -xzf - -C /destination/', ce qui évite de créer un fichier temporaire.
On peut essayer : tar -xvf archive.tar --ignore-zeros, qui tente d'extraire malgré des erreurs dans l'archive.
Il est recommandé de toujours vérifier le contenu avec -t avant d'extraire, de préférer archiver un dossier racine pour éviter les 'tarbombs', d'inclure la date dans le nom des sauvegardes, et de bien placer -f juste avant le nom de l'archive.