15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
08.10.2024

Comment extraire des fichiers .tar.gz à l’aide de la ligne de commande Linux

Un fichier .tar.gz est une archive compressée créée en combinant deux opérations distinctes : tar (Tape Archive), qui regroupe plusieurs fichiers et répertoires en une seule archive, et gzip, qui compresse cette archive pour réduire sa taille. Le résultat est un format de paquet portable et économe en espace qui constitue le standard de facto pour la distribution de logiciels, de bundles de configuration et de sauvegardes système dans pratiquement tous les environnements Linux et Unix.

La commande canonique pour extraire une archive .tar.gz est `tar -xzvf archive-name.tar.gz`. Comprendre ce que fait chaque option — et quand s’écarter de cette valeur par défaut — est ce qui distingue un administrateur système compétent de quelqu’un qui colle aveuglément des commandes trouvées sur internet.

Comprendre le format .tar.gz

Avant d’exécuter une commande, il est utile de comprendre ce à quoi vous avez réellement affaire. Le format `.tar.gz` (également écrit `.tgz`) est un processus en deux étapes :

  1. `tar` collecte les fichiers, préserve la structure des répertoires, les permissions, la propriété et les liens symboliques dans un seul fichier plat.
  2. `gzip` compresse ce fichier plat en utilisant l’algorithme DEFLATE, atteignant généralement une réduction de taille de 60 à 70 % sur les contenus à forte densité de texte.

Cette architecture en deux étapes explique pourquoi les options `-z` (gzip) et `-x` (extraction) sont toutes deux nécessaires. Aucun outil seul ne gère l’intégralité du travail. Sur les systèmes Linux modernes, `tar` est suffisamment intelligent pour détecter automatiquement le type de compression via `–auto-compress` ou simplement en lisant les octets magiques du fichier, mais être explicite avec les options reste toujours la pratique la plus sûre dans les scripts et les pipelines d’automatisation.

Syntaxe de base et référence des options

“`bash

tar -xzvf archive-name.tar.gz

“`

OptionForme longueFonction
—————–———-
`-x``–extract`Extraire les fichiers de l’archive
`-z``–gzip`Filtrer l’archive via la décompression gzip
`-v``–verbose`Afficher chaque nom de fichier au fur et à mesure de son traitement
`-f``–file=ARCHIVE`Spécifier le nom du fichier archive (doit immédiatement précéder le nom de fichier)
`-C``–directory=DIR`Extraire vers un répertoire cible spécifique
`-t``–list`Lister le contenu de l’archive sans extraire
`-p``–preserve-permissions`Restaurer les permissions de fichiers originales exactement
`–strip-components=N`Supprimer N composants de chemin de tête des noms de fichiers

Détail critique : L’option `-f` doit toujours être la dernière option avant le nom de fichier. Écrire `tar -xvzf` et `tar -xzvf` sont tous deux valides, mais `tar -fxzv archive.tar.gz` échouera car `-f` s’attend à ce que l’argument suivant soit le chemin de l’archive.

Guide d’extraction étape par étape

1. Ouvrir un terminal

Sur la plupart des distributions Linux de bureau, appuyez sur `Ctrl + Alt + T`. Sur un serveur sans interface graphique accessible via SSH, vous êtes déjà dans une session de terminal.

2. Localiser votre archive

“`bash

ls -lh /path/to/directory

“`

Confirmez que le fichier existe et notez sa taille. L’option `-h` affiche les tailles dans un format lisible par l’homme (KB, MB, GB).

3. Extraire sur place

Naviguez vers le répertoire contenant l’archive, puis extrayez :

“`bash

cd /path/to/directory

tar -xzvf archive-name.tar.gz

“`

Les fichiers extraits apparaîtront dans le répertoire de travail actuel, généralement dans un sous-répertoire qui reflète la structure interne de l’archive.

4. Extraire vers un répertoire spécifique

Utilisez l’option `-C` pour rediriger la sortie vers n’importe quel chemin cible. Si la destination n’existe pas, créez-la d’abord :

“`bash

mkdir -p /opt/myapp

tar -xzvf archive-name.tar.gz -C /opt/myapp

“`

L’option `-p` sur `mkdir` évite les erreurs si le répertoire existe déjà — une bonne habitude dans les scripts.

Exemple — déploiement d’une archive d’application web :

“`bash

mkdir -p ~/deployments/webapp-v2

tar -xzvf webapp-v2.tar.gz -C ~/deployments/webapp-v2

“`

5. Extraire sans sortie détaillée

Dans les scripts automatisés, les tâches cron ou les pipelines CI/CD, la sortie détaillée crée du bruit dans les journaux. Supprimez l’option `-v` :

“`bash

tar -xzf archive-name.tar.gz -C /opt/myapp

“`

C’est la forme préférée dans l’automatisation en production. Le mode détaillé est utile de manière interactive lorsque vous devez confirmer quels fichiers sont en cours d’écriture.

Lister le contenu d’une archive sans extraire

Avant d’extraire une archive inconnue — surtout une archive téléchargée depuis une source externe — inspectez toujours son contenu en premier. Certaines archives contiennent des fichiers avec des chemins absolus ou sans répertoire de niveau supérieur, ce qui peut disperser des fichiers dans votre système de fichiers de manière inattendue.

“`bash

tar -tzvf archive-name.tar.gz

“`

Si la sortie affiche des chemins commençant par `/` ou `..`, extrayez avec précaution ou utilisez `–strip-components` pour assainir les chemins.

Pour vérifier la présence d’un répertoire de niveau supérieur :

“`bash

tar -tzf archive-name.tar.gz | head -20

“`

Si tous les chemins partagent un préfixe commun (par exemple, `myapp-1.0/`), l’extraction est propre. Sinon, créez un répertoire dédié et extrayez-y avec `-C`.

Gestion des composants de chemin supprimés

Un scénario courant dans la pratique : vous téléchargez une archive source GitHub qui enveloppe tout dans `project-main/`, mais vous souhaitez que le contenu se trouve directement dans `/opt/project/` sans cette couche d’imbrication supplémentaire.

“`bash

tar -xzvf project-main.tar.gz -C /opt/project –strip-components=1

“`

`–strip-components=1` supprime le premier segment de chemin de chaque fichier extrait, « déballant » ainsi efficacement le répertoire de niveau supérieur. Cette technique est largement utilisée dans les scripts de déploiement et les Dockerfiles.

Extraire un seul fichier ou répertoire d’une archive

Vous n’avez pas toujours besoin d’extraire tout le contenu. Pour extraire un fichier spécifique :

“`bash

tar -xzvf archive-name.tar.gz path/to/specific-file.conf

“`

Pour extraire un répertoire spécifique et tout son contenu :

“`bash

tar -xzvf archive-name.tar.gz path/to/specific-directory/

“`

Le chemin doit correspondre exactement à ce que `tar -tzf` indique. Cette technique est précieuse pour récupérer un seul fichier de configuration depuis une grande archive de sauvegarde sans décompresser des gigaoctets de données.

Extraire des fichiers .tar sans compression gzip

Un fichier `.tar` simple n’a pas de couche de compression. Supprimez entièrement l’option `-z` :

“`bash

tar -xvf archive-name.tar

“`

Comparaison : .tar.gz vs. autres formats d’archives courants

FormatExtensionAlgorithme de compressionTaux de compressionVitesseTar requis
——–———–———————–——————-——-————–
Archive Gzip`.tar.gz` / `.tgz`DEFLATE (gzip)ModéréRapideOui
Archive Bzip2`.tar.bz2`Burrows-Wheeler (bzip2)ÉlevéLentOui
Archive XZ`.tar.xz`LZMA2 (xz)Très élevéTrès lentOui
Archive Zstandard`.tar.zst`ZstandardÉlevéTrès rapideOui
Archive ZIP`.zip`DEFLATEModéréRapideNon
Tar simple`.tar`AucunAucunLe plus rapideOui

Point clé : `.tar.xz` est désormais le format préféré pour les paquets de distribution Linux (source du noyau, archives source RPM/DEB) en raison de son taux de compression supérieur. Cependant, `.tar.gz` reste dominant pour la distribution à usage général grâce à sa prise en charge universelle par les outils et sa vitesse d’extraction. `.tar.zst` (Zstandard) gagne du terrain dans les distributions modernes comme Arch Linux pour son équilibre exceptionnel entre taux de compression et vitesse.

Pour extraire ces formats alternatifs, remplacez `-z` par l’option appropriée :

“`bash

tar -xjvf archive.tar.bz2 # bzip2

tar -xJvf archive.tar.xz # xz/lzma

tar -x –zstd -vf archive.tar.zst # zstandard (GNU tar 1.31+)

“`

Préservation des permissions et de la propriété des fichiers

Lors de l’extraction d’archives contenant des fichiers système, des scripts ou des binaires d’application, la préservation des permissions est importante :

“`bash

tar -xzvpf archive-name.tar.gz

“`

L’option `-p` indique à tar de restaurer les permissions originales. Sans elle, le umask de l’utilisateur actuel est appliqué, ce qui peut silencieusement casser des scripts exécutables ou des binaires setuid.

Pour préserver la propriété (nécessite les droits root) :

“`bash

sudo tar -xzvpf archive-name.tar.gz –same-owner

“`

Ceci est essentiel lors de la restauration de sauvegardes système ou du déploiement de paquets d’application qui reposent sur une propriété utilisateur/groupe spécifique pour les limites de sécurité.

Erreurs courantes et comment les corriger

`tar: Error is not recoverable: exiting now`

L’archive est corrompue ou le téléchargement était incomplet. Vérifiez l’intégrité du fichier avec `md5sum` ou `sha256sum` par rapport à la somme de contrôle publiée, puis téléchargez à nouveau.

`tar: Skipping to next header` / `tar: Archive contains obsolescent base-64 headers`

Corruption partielle dans l’archive. Vous pouvez tenter une extraction partielle avec `–ignore-zeros`, mais traitez la sortie comme potentiellement incomplète.

`gzip: stdin: not in gzip format`

Le fichier a une extension `.tar.gz` mais n’est pas réellement compressé en gzip. Exécutez `file archive-name.tar.gz` pour identifier le vrai format. Il peut s’agir d’un fichier `.tar` simple, d’un fichier `.zip`, ou d’un fichier `.bz2` avec une extension incorrecte.

`Cannot open: No such file or directory`

Soit le chemin est incorrect, soit le nom de fichier contient un espace. Mettez le nom de fichier entre guillemets : `tar -xzvf "my archive.tar.gz"`.

Permission refusée lors de l’extraction

Vous n’avez pas les droits d’écriture sur le répertoire cible. Utilisez soit `sudo`, soit changez la cible avec `-C` vers un répertoire dont vous êtes propriétaire.

Cas d’utilisation pratiques sur un VPS ou un serveur dédié

Dans un environnement d’hébergement VPS, les archives `.tar.gz` apparaissent constamment : déploiement de versions d’applications, restauration de dumps de bases de données, transfert de bundles de configuration entre serveurs et décompression de logiciels compilés depuis les sources.

Un workflow de déploiement typique sur un serveur Linux :

“`bash

Download release archive

wget https://example.com/releases/myapp-2.1.0.tar.gz

Verify integrity

sha256sum myapp-2.1.0.tar.gz

Inspect contents before extracting

tar -tzf myapp-2.1.0.tar.gz | head -30

Extract to deployment directory

sudo mkdir -p /var/www/myapp

sudo tar -xzvpf myapp-2.1.0.tar.gz -C /var/www/myapp –strip-components=1

Set correct ownership

sudo chown -R www-data:www-data /var/www/myapp

“`

Sur les serveurs dédiés gérant des sauvegardes à grande échelle, combiner `tar` avec des pipes évite entièrement d’écrire des fichiers intermédiaires sur le disque :

“`bash

Create and stream a compressed archive directly over SSH to a remote server

tar -czvf – /var/www/html | ssh user@backup-server "cat > /backups/html-$(date +%F).tar.gz"

“`

Ce modèle est particulièrement efficace lorsque l’espace disque est limité ou lorsque la vitesse de sauvegarde est critique.

Si vous gérez un environnement d’hébergement web via un panneau de contrôle, des outils comme VPS avec cPanel exposent les opérations `.tar.gz` via l’interface du Gestionnaire de fichiers, mais la commande `tar` sous-jacente est toujours disponible dans le terminal pour les workflows scriptés.

Lors de l’hébergement d’applications qui servent des fichiers via HTTPS, associer votre pipeline de déploiement à des certificats SSL correctement configurés garantit que les ressources d’application que vous extrayez et déployez sont servies de manière sécurisée dès la première requête.

Pour les équipes gérant plusieurs environnements, les panneaux de contrôle VPS peuvent simplifier les opérations de sauvegarde et de restauration planifiées qui reposent fortement sur les archives `.tar.gz`.

Référence rapide : commandes tar les plus utilisées

“`bash

Extract .tar.gz to current directory

tar -xzvf archive.tar.gz

Extract to specific directory

tar -xzvf archive.tar.gz -C /target/dir

Extract silently (no verbose output)

tar -xzf archive.tar.gz -C /target/dir

List contents without extracting

tar -tzvf archive.tar.gz

Extract single file

tar -xzvf archive.tar.gz path/inside/archive/file.conf

Extract and strip top-level directory

tar -xzvf archive.tar.gz -C /target/dir –strip-components=1

Extract preserving permissions and ownership (as root)

sudo tar -xzvpf archive.tar.gz –same-owner

Extract .tar.bz2

tar -xjvf archive.tar.bz2

Extract .tar.xz

tar -xJvf archive.tar.xz

“`

Matrice de décision technique

ScénarioCommande recommandée
———-———————
Extraction interactive, besoin de voir la progression`tar -xzvf archive.tar.gz`
Script automatisé ou tâche cron`tar -xzf archive.tar.gz -C /target`
Structure d’archive inconnue, inspecter d’abord`tar -tzf archive.tar.gzhead -20`
Déployer dans un répertoire sans enveloppe de niveau supérieur`tar -xzf archive.tar.gz -C /target –strip-components=1`
Restaurer une sauvegarde système avec les permissions exactes`sudo tar -xzvpf archive.tar.gz –same-owner`
Récupérer un seul fichier depuis une grande archive`tar -xzf archive.tar.gz path/to/file`
Vérifier l’intégrité de l’archive avant d’extraire`tar -tzf archive.tar.gz > /dev/null && echo "OK"`

FAQ

Quelle est la différence entre .tar.gz et .tgz ?

Ce sont des formats identiques. `.tgz` est simplement un alias abrégé à extension unique pour `.tar.gz`, utilisé lorsque les systèmes de fichiers ou les outils ont des limitations de longueur d’extension. Les deux sont extraits avec la même commande `tar -xzvf`.

Pourquoi `tar -xzvf` extrait-il parfois des fichiers dans le répertoire actuel plutôt que dans un sous-répertoire ?

Cela se produit lorsque l’archive a été créée sans enveloppe de répertoire de niveau supérieur. Exécutez toujours `tar -tzf archive.tar.gz | head -20` avant d’extraire. Si les chemins ne partagent pas de préfixe commun, créez un répertoire dédié et utilisez `-C` pour y extraire, évitant ainsi la dispersion des fichiers.

Puis-je extraire un fichier .tar.gz sans la commande tar ?

Oui. Vous pouvez d’abord décompresser la couche gzip avec `gunzip archive.tar.gz`, ce qui produit `archive.tar`, puis extraire avec `tar -xvf archive.tar`. Certains systèmes prennent également en charge `zcat archive.tar.gz | tar -xvf -` pour diriger la décompression directement dans tar. Cependant, `tar -xzvf` en une seule commande est toujours l’approche la plus efficace.

L’option `-v` ralentit-elle l’extraction sur les grandes archives ?

Marginalement, oui. Sur des archives contenant des centaines de milliers de petits fichiers, la surcharge liée à l’affichage de chaque nom de fichier sur stdout peut ajouter un temps mesurable. Dans les contextes sensibles aux performances ou automatisés, omettez toujours `-v`.

Comment extraire un fichier .tar.gz en tant qu’utilisateur différent sans changer de compte ?

Utilisez `sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir`. Cela exécute le processus d’extraction sous l’identité de l’utilisateur cible, garantissant que les fichiers extraits sont correctement attribués sans nécessiter un changement d’utilisateur complet via `su`.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer