Tutoriel Linux

Tar sous Linux : créer et extraire une archive sans perdre les chemins

Débutant6 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Vous avez récupéré une archive tar ou tar.gz, vous voulez l’ouvrir proprement, ou vous devez empaqueter un dossier avant de le déplacer. La commande paraît simple, jusqu’au moment où l’archive recrée toute une arborescence au mauvais endroit ou écrase un fichier que vous vouliez garder.

Je vous conseille de traiter tar comme un outil d’archivage, pas comme une commande magique d’installation. Dans ce guide, on va créer une archive, la lister, l’extraire dans un dossier choisi et vérifier le résultat avant de toucher aux fichiers de production.

Tux organise une archive tar Linux avec des dossiers et des chemins abstraits
Avec tar, le dossier de destination et les chemins enregistrés comptent autant que la commande elle-même.

Tar sert à archiver, pas forcément à compresser

Le point à garder en tête : tar regroupe des fichiers et conserve leurs chemins. La compression vient souvent en plus, avec gzip, xz ou bzip2. C’est pour cela que vous croisez des fichiers en .tar, .tar.gz, .tgz, .tar.xz ou .tar.bz2.

Avant d’extraire une archive inconnue, ne lancez pas directement une commande au hasard dans votre dossier personnel ou dans /var/www. Listez son contenu. Vous verrez si elle contient un dossier racine propre, plusieurs fichiers à plat, ou des chemins plus longs que prévu.

tar -tf sauvegarde.tar

tar -tzf sauvegarde.tar.gz

tar -tJf sauvegarde.tar.xz

Le t liste le contenu. Le f indique le fichier d’archive. Les options z et J indiquent respectivement gzip et xz.

Créer une archive tar proprement

Pour créer une archive non compressée d’un dossier, placez-vous d’abord au bon niveau. C’est important, car tar enregistre les chemins que vous lui donnez.

cd /home/nathan/projets

tar -cf site.tar site

Cette commande crée site.tar avec le dossier site à l’intérieur. Si vous l’extrayez plus tard, vous récupérerez un dossier site/, pas une dispersion de fichiers dans le répertoire courant.

Pour créer une archive compressée en gzip, ajoutez z :

tar -czf site.tar.gz site

Pour xz, souvent plus compact mais plus lent, utilisez J :

tar -cJf site.tar.xz site

Sur un serveur, je préfère parfois une archive gzip simple. Elle se crée vite, elle se relit partout, et elle suffit largement pour déplacer un dossier de configuration ou préparer une sauvegarde ponctuelle.

Éviter les chemins absolus dans une archive

Une mauvaise habitude consiste à archiver un chemin absolu sans réfléchir :

tar -czf site.tar.gz /var/www/site

Tar sait généralement retirer le / initial et vous avertir, mais ce n’est pas la meilleure base pour un transfert propre. Vous risquez surtout de ne plus savoir exactement où les fichiers vont ressortir à l’extraction.

Je préfère utiliser -C pour dire clairement à tar où se placer avant de lire les fichiers :

tar -czf /tmp/site.tar.gz -C /var/www site

Ici, l’archive contient site/, pas var/www/site/. C’est plus lisible, plus portable, et beaucoup moins pénible à extraire sur une autre machine.

Extraire une archive dans le bon dossier

Pour extraire une archive .tar dans le dossier courant :

tar -xf site.tar

Pour une archive gzip :

tar -xzf site.tar.gz

Mais dans la pratique, je vous recommande souvent de préparer un dossier vide et d’extraire dedans. Vous voyez immédiatement ce que l’archive contient, sans polluer le répertoire courant.

mkdir -p /tmp/test-extraction

tar -xzf site.tar.gz -C /tmp/test-extraction

find /tmp/test-extraction -maxdepth 2 -type f | head

Cette méthode évite une bonne partie des mauvaises surprises, surtout avec une archive téléchargée ou envoyée par quelqu’un d’autre.

Voir ce qui va être écrasé avant d’extraire

Tar peut remplacer des fichiers existants si les chemins correspondent. Sur un poste de test, ce n’est pas dramatique. Sur un dossier applicatif, ça peut vite devenir une vraie galère.

Avant d’extraire dans un dossier qui contient déjà des fichiers, listez l’archive puis comparez avec la destination :

tar -tzf site.tar.gz | head

ls -la /var/www/site

Si vous voulez tester sans mélanger les fichiers, gardez le réflexe du dossier temporaire :

rm -rf /tmp/test-extraction
mkdir -p /tmp/test-extraction

tar -xzf site.tar.gz -C /tmp/test-extraction

diff -qr /tmp/test-extraction/site /var/www/site

Le diff -qr ne remplace pas une vraie stratégie de sauvegarde, mais il donne déjà une idée claire des fichiers différents.

Extraire sans recréer tout le premier dossier

Certains projets sont livrés avec un dossier racine du type app-1.4.2/. Si vous voulez récupérer uniquement son contenu dans une destination précise, --strip-components=1 peut être utile.

mkdir -p /tmp/app

tar -xzf app-1.4.2.tar.gz -C /tmp/app --strip-components=1

Attention : n’utilisez pas cette option sans avoir listé l’archive avant. Si l’archive ne contient pas le niveau de dossier attendu, vous pouvez obtenir un résultat différent de ce que vous aviez en tête.

Exclure un dossier d’une archive

Pour sauvegarder un dossier applicatif, vous n’avez pas toujours envie d’inclure les caches, les logs volumineux ou les dépendances régénérables. L’option --exclude permet de garder l’archive plus propre.

tar -czf site.tar.gz --exclude='site/cache' --exclude='site/logs' site

Si vous préparez une vraie sauvegarde, ne remplacez pas une synchronisation rsync maîtrisée par une archive faite à la main. Tar est pratique pour empaqueter, transporter ou figer un dossier. Pour une sauvegarde régulière, il faut aussi penser rotation, test de restauration et stockage séparé.

Tar.gz à installer : ne confondez pas archive et programme

Un fichier .tar.gz peut contenir un logiciel, mais cela ne veut pas dire qu’il s’installe toujours avec la même commande. Parfois il contient un binaire prêt à lancer, parfois un script, parfois du code source à compiler.

Si votre objectif est vraiment l’installation d’un logiciel téléchargé sous forme tar.gz, commencez par lire le contenu, le fichier README ou la documentation de l’éditeur. J’ai détaillé ce cas à part dans le guide installer un fichier tar.gz sous Linux sans lancer des commandes au hasard.

Avant de restaurer l’archive

Avant de déplacer ou restaurer une archive, contrôlez au minimum ces points :

  • le contenu exact avec tar -tf, tar -tzf ou tar -tJf ;
  • le dossier de destination avec pwd et ls -la ;
  • une extraction de test dans /tmp quand l’archive vient d’une source externe ;
  • les droits et propriétaires après extraction avec ls -l ;
  • les fichiers modifiés avec diff -qr si vous restaurez par-dessus un dossier existant.

Si vous devez ensuite renommer ou déplacer des fichiers extraits, faites-le proprement avec la commande mv, pas en bricolant une extraction dans le mauvais dossier. Une archive tar bien préparée doit vous faire gagner du temps, pas vous laisser avec une arborescence à réparer à la main.

Pour aller plus loin, vous pouvez aussi consulter le manuel GNU tar et la page tar(1) de man7.org. Elles sont moins digestes qu’un guide pratique, mais très utiles dès que vous touchez aux options avancées.

sudo apt update && sudo apt upgrade