Archivage et compression sous Linux
Runbook d'exploitation des cinq outils d'archivage et de compression courants sous Linux : tar, zip/unzip, 7-Zip, rar/unrar, gzip. Création, extraction, chiffrement, transfert, dépannage, sécurité et récupération.
Référence d’exploitation des cinq outils d’archivage et de compression courants sous Linux : création, extraction, inspection, mise à jour, chiffrement, transfert, sauvegarde, dépannage par symptôme, sécurité, urgence et récupération. Couvre tar (archivage Unix et streaming), zip/unzip (interopérabilité), 7-Zip (compression et chiffrement), rar/unrar (format propriétaire) et gzip (compression de flux et de fichiers individuels). Cible un usage en ligne de commande sur systèmes Linux.
Choisir le bon outil
Le choix de l’outil se décide sur l’usage réel : interopérabilité, métadonnées Unix, ratio de compression, chiffrement, accès aléatoire.
Besoin Outil recommandé Pourquoi
────────────── ────────────── ──────────────
Sauvegarde système Linux tar (ou tar|7z) Préserve permissions, owner,
(permissions, liens, owner) liens, xattrs, sparse
Streaming réseau, pipeline SSH tar Flux séquentiel, pas d'index
Archive incrémentale (niveaux) tar --listed- Snapshot des fichiers modifiés
incremental
Échange multiplateforme simple zip Lu partout, accès sélectif
Mise à jour fréquente de membres zip Index central, ajout sans
tout réécrire
Meilleur ratio de compression 7z (LZMA2) Compression solide inter-fichiers
Chiffrement réel (AES-256 + noms) 7z -mhe=on ZipCrypto est cassé, RAR fermé
Accès aléatoire à un membre zip ou 7z non solide Index, pas de scan complet
Réception d'une archive .rar unrar Extraction seule sous Linux
Archivage long terme interopérable tar.zst / tar.gz Formats ouverts, pérennes
ou 7z
Compresser un seul fichier ou flux gzip Mono-flux, idéal texte/logs/CSV
Compresser un répertoire en .tar.gz tar + gzip tar assemble, gzip compresse
Append à un log compressé gzip -c >> Flux .gz concaténables
Accélérer gzip sur gros volumes pigz Multithread, format .gz identique
En une phrase : tar pour sauvegarder et streamer du Linux, zip pour échanger et mettre à jour, 7z pour compresser fort et chiffrer, rar uniquement en réception, gzip pour compresser un fichier ou un flux unique. Pour l’archivage pérenne, préférer les formats ouverts (tar.zst, tar.gz, 7z) au format propriétaire RAR.
Principes fondamentaux
Ces règles fondent un usage correct et évitent les erreurs destructrices (écrasement, perte de métadonnées, corruption de flux).
Archivage et compression sont deux fonctions distinctes. tar regroupe les fichiers en un flux séquentiel sans les compresser ; la compression (gzip, bzip2, xz, zstd) est un filtre appliqué au flux entier. Une archive tar compressée ne peut être ni parcourue ni modifiée sans décompression intégrale. Les formats zip et 7z compressent au contraire fichier par fichier ou par bloc, avec un index.
L’index change tout pour l’accès. zip et 7z (non solide) maintiennent un index qui permet d’extraire un seul fichier ou de lister le contenu sans tout lire. tar n’a pas d’index : lister ou extraire impose de lire depuis le début. Ce modèle séquentiel rend tar idéal pour le streaming et inefficace pour l’accès aléatoire.
L’extraction écrase sans prévenir, et le chemin compte. tar écrase les fichiers existants silencieusement. Un chemin absolu stocké dans l’archive peut réécrire des fichiers système à l’extraction. GNU tar retire le
/initial avec un avertissement, mais ce comportement n’est pas universel. Toujours inspecter une archive avant de l’extraire et contrôler le répertoire de base avec-C.
Les métadonnées Unix ne sont pas toutes préservées par défaut. tar conserve permissions, propriétaire, groupe et mtime, mais pas les ACL, les attributs étendus (xattrs) ni les contextes SELinux sans options explicites (
--acls --xattrs --selinux). zip ne préserve pas setuid/setgid/sticky. Pour une vraie sauvegarde système, tar avec ces options, ou le pipetar | 7z, est la seule voie correcte.
La compression solide améliore le ratio mais fragilise. En mode solide (défaut du format 7z, option des RAR), les fichiers sont compressés comme un flux unique : meilleur ratio, mais un octet corrompu peut perdre tout le bloc, la mise à jour devient impossible, et extraire un seul fichier impose de décompresser tout ce qui précède. Pour les archives à mettre à jour ou dont la résilience prime, désactiver le solide (
-ms=off).
Tester avant de supprimer l’original. Une archive se vérifie après création et avant toute suppression des sources :
tar -tf,unzip -t,7z t,unrar t. Une archive chiffrée se teste aussi (avec le mot de passe). Cette vérification est la dernière barrière avant une perte de données silencieuse.
gzip compresse un flux unique et supprime l’original par défaut. gzip ne crée pas d’archive multi-fichiers : il transforme un fichier en un
.gzet efface la source, sans fichier temporaire intermédiaire. Pour un répertoire, l’assembler d’abord avec tar (tar czf archive.tar.gz dossier/). Conserver l’original impose-kou la redirection-c >. Pour les fichiers critiques non sauvegardés,--synchronousforce le flush disque et évite de perdre à la fois l’original et le.gzen cas de crash.
Les flux gzip sont concaténables, et
gzip -lment au-delà de 4 Go. Coller deux.gz(cat a.gz b.gz > ab.gz) produit un gzip valide que gunzip décompresse en séquence, ce qui permet l’append atomique aux logs (gzip -c nouveau >> archive.gz). En revanche,gzip -laffiche une taille fausse pour un original de plus de 4 Go (champ ISIZE modulo 2^32) et pour un fichier multi-membres (dernier membre seulement) : la taille réelle se lit aveczcat fichier.gz | wc -c.
Opérations standard
Les opérations sont présentées par tâche, avec la commande de chaque outil concerné. Choisir l’outil selon le tableau ci-dessus.
Créer une archive
# tar : archivage Unix, compression par filtre (-C contrôle le chemin de base)
tar -czf archive.tar.gz -C /home/user data/ # gzip
tar -cJf archive.tar.xz -C /home/user data/ # xz (meilleur ratio, plus lent)
tar --zstd -cf archive.tar.zst -C /home/user data/ # zstd (rapide, multithread)
# zip : récursif, niveau de compression, exclusion de patterns
zip -r archive.zip /chemin/source -x "*/node_modules/*" "*.log"
zip -r -0 media.zip /dossier/videos # stockage seul (déjà compressés)
# 7z : meilleur ratio (LZMA2), niveau -mx, solide -ms
7z a -t7z -mx=5 archive.7z /source/ # usage courant
7z a -t7z -mx=9 -ms=on archive.7z /source/ # archivage long terme
# rar : création (outil propriétaire requis)
rar a archive.rar /source/
# gzip : compresser un fichier unique (pas un répertoire)
gzip -k fichier.log # garde l'original (-k)
gzip -c fichier.log > fichier.log.gz # vers stdout, original intact
gzip -9 fichier.log # ratio max (gain marginal vs -6)
État attendu : le fichier d’archive est créé. Vérifier sa structure avant
distribution avec tar -tf , unzip -l , 7z l ou unrar l . Le niveau -0
(zip) ou -mx=0 (7z) évite de recompresser des fichiers déjà compressés (MP4,
JPEG, archives), gain nul pour un coût CPU réel.
Inspecter sans extraire
tar -tvf archive.tar.gz # liste détaillée
unzip -l archive.zip # noms et tailles
zipinfo archive.zip # détails complets (méthode, CRC, permissions)
7z l -slt archive.7z # liste avec détails techniques
unrar l archive.rar # liste (sans extraction, sûr)
zipgrep "motif" logs.zip "*.log" # grep dans les membres sans extraire
gzip -tv fichier.log.gz # tester le CRC32 d'un .gz
gzip -lv fichier.log.gz # taille/ratio (FAUX si original > 4 Go)
zgrep "ERROR" fichier.log.gz # grep dans un .gz sans décompresser
État attendu : le contenu s’affiche sans rien écrire sur le disque. Inspecter
est le réflexe de sécurité avant toute extraction d’une archive d’origine
incertaine. Pour un .gz de plus de 4 Go décompressé, ignorer la taille de
gzip -l et utiliser zcat fichier.gz | wc -c .
Extraire une archive
# tar : autodétection de la compression sur GNU tar récent
tar -xf archive.tar.gz -C /destination/
tar -xpf archive.tar.gz --acls --xattrs --selinux -C /destination/ # sauvegarde système
# zip : contrôle de l'écrasement
unzip archive.zip -d /destination/ # demande avant d'écraser
unzip -o archive.zip -d /destination/ # écrase sans demander
unzip -n archive.zip -d /destination/ # n'écrase jamais
# 7z : x préserve l'arborescence, e extrait à plat
7z x archive.7z -o/destination/
# rar : extraction avec arborescence
unrar x archive.rar /destination/
# gzip : décompresser un .gz (supprime le .gz par défaut)
gunzip fichier.log.gz # restaure fichier.log, efface le .gz
gunzip -k fichier.log.gz # garde le .gz
zcat fichier.log.gz > /destination/fichier.log # vers une destination, .gz intact
État attendu : les fichiers apparaissent dans le répertoire cible. Sans -C
(tar) ou -d (zip), l’extraction a lieu dans le répertoire courant, ce qui peut
écraser des fichiers. Toujours fixer la destination explicitement.
Mettre à jour une archive existante
# tar : possible UNIQUEMENT sur archive non compressée
tar -rf archive.tar nouveau_fichier.txt # ajouter
tar --delete -f archive.tar chemin/fichier.txt # supprimer (GNU tar)
# zip : ajout et mise à jour natifs (index central)
zip archive.zip nouveau_fichier.txt # ajouter ou remplacer
zip -d archive.zip "obsolete/*.log" # supprimer
# 7z : update (impossible sur archive solide)
7z u archive.7z /source/
7z d archive.7z "obsolete/*.log"
État attendu : l’archive est modifiée sans recréation complète. Sur tar
compressé ( .tar.gz , .tar.xz , .tar.zst ) et sur 7z solide, la mise à
jour échoue : décompresser, modifier, recompresser, ou recréer l’archive.
Transférer une arborescence par pipeline SSH (tar)
# Copier un répertoire vers un serveur distant sans fichier intermédiaire
tar -czf - /chemin/source/ | ssh user@serveur "tar -xzf - -C /chemin/destination/"
# Sans compression sur réseau local rapide (le CPU est le goulot)
tar -cf - /chemin/source/ | ssh user@serveur "tar -xf - -C /chemin/destination/"
# Avec barre de progression
tar -cf - /src/ | pv -s $(du -sb /src/ | awk '{print $1}') | gzip | ssh user@hôte "tar -xzf - -C /dst/"
État attendu : l’arborescence est recréée à distance en préservant liens
symboliques, permissions et fichiers spéciaux, ce que scp ne fait pas. Sur
réseau gigabit, omettre la compression peut doubler le débit
quand le CPU limite.
Sauvegarde système et incrémentale (tar)
# Sauvegarde complète avec métadonnées, via pipe vers 7z pour le ratio
tar cf - /data/ | 7z a -si -mx=5 /backups/data_$(date +%Y%m%d).tar.7z
# Restaurer
7z x -so /backups/data_20260618.tar.7z | tar xf - -C /restore/
# Incrémentale par snapshot
tar --listed-incremental=/backup/data.snar -czf /backup/full.tar.gz /source/ # niveau 0
tar --listed-incremental=/backup/data.snar -czf /backup/incr1.tar.gz /source/ # niveau 1
État attendu : la sauvegarde complète crée le fichier snapshot ( .snar ) ; les
incrémentales ne capturent que les fichiers modifiés depuis. Restaurer une
chaîne incrémentale impose d’extraire les archives dans l’ordre, de la plus
ancienne à la plus récente. Si le .snar est perdu, la prochaine
sauvegarde sera complète.
Chiffrer une archive
# 7z : AES-256, chiffrement des noms de fichiers avec -mhe=on (RECOMMANDÉ)
7z a -p -mhe=on archive_securisee.7z /donnees/
7z t archive_securisee.7z -p # tester (obligatoire)
# zip : ZipCrypto FAIBLE, à éviter pour des données sensibles
zip -r -e archive.zip /donnees # saisie interactive du mot de passe
# Alternative robuste : chiffrer une archive avec GPG après création
tar -czf - /donnees/ | gpg -c > archive.tar.gz.gpg
État attendu : l’archive est chiffrée. Ne jamais passer le mot de passe en
argument ( -P motdepasse , -p'mdp' ) : il est visible dans ps aux ,
/proc/*/cmdline et l’historique shell. Toujours la saisie interactive. Pour
des données sensibles, préférer 7z AES-256 (avec -mhe=on qui masque aussi les
noms) ou GPG ; le ZipCrypto natif est cryptographiquement cassé.
Archives fractionnées et multi-volumes
zip -r -s 30m archive.zip dossier/ # zip : volumes de 30 Mo
7z a -v500m -mx=5 backup.7z /dataset/ # 7z : volumes de 500 Mo
7z x backup.7z.001 # extraction (pointer le .001)
État attendu : l’archive est découpée en volumes numérotés. L’extraction
requiert que tous les volumes soient présents dans le même répertoire, et se
lance depuis le premier ( .001 ou .part1 ).
Opérations spécifiques à gzip (flux, logs, rsync)
# Append atomique à un log compressé (les flux .gz sont concaténables)
gzip -c nouveau.log >> archive.log.gz
# Compression compatible rsync : ne retransmet que les blocs modifiés
gzip --rsyncable fichier.log # coût ~1% de taille, gros gain en bande passante
# Compression sûre contre les crashs (fsync avant suppression de l'original)
gzip --synchronous fichier_critique.log
# Opérer directement sur des .gz sans fichier temporaire
zgrep "ERROR" app.log.gz # grep
zless app.log.gz # pagination
zdiff v1.log.gz v2.log.gz # diff entre deux archives
# Accélérer sur gros volumes : pigz, remplacement drop-in multithread
pigz -p 4 gros_fichier.log # 4 threads, format .gz standard
pigz -p 4 --rsyncable gros_fichier.log
État attendu : ces opérations produisent ou lisent des .gz standards.
--rsyncable réinitialise périodiquement l’état DEFLATE pour qu’une petite
modification ne change pas tout le fichier, ce qui est indispensable pour les
archives synchronisées par rsync. --synchronous protège les fichiers critiques
non sauvegardés : sans lui, un crash entre la fin de la compression et le flush
disque peut perdre à la fois l’original (déjà supprimé) et un .gz incomplet.
pigz produit un format identique à gzip, décompressable par gunzip.
Dépannage par symptôme
« This does not look like a tar archive » ou « not in gzip format »
Symptôme : tar refuse d’ouvrir l’archive, ou l’option de décompression ne correspond pas. Cause probable : le format réel diffère de l’extension, ou l’archive n’est pas du tar. Correction : identifier le format réel, puis utiliser l’option correspondante.
file archive.tar.gz # "gzip compressed data", "XZ", "Zstandard"...
tar -xf archive.tar.gz # GNU tar récent détecte seul ; forcer -z/-j/-J en script portable
« Removing leading ‘/’ from member names »
Symptôme : avertissement à la création d’une archive avec des chemins absolus.
Cause probable : GNU tar retire le / initial par sécurité, pour éviter
d’écraser des fichiers système à l’extraction. Correction : c’est un
avertissement, pas une erreur. Pour contrôler le chemin de base, utiliser -C .
tar -czf backup.tar.gz -C /home/user data # au lieu de /home/user/data
L’archive zip est corrompue, unzip refuse de l’extraire
Symptôme : « End-of-central-directory signature not found » ou « zipfile is corrupt ». Cause probable : l’index central en fin de fichier est endommagé (troncation, transfert incomplet). Correction : tester, puis reconstruire l’index depuis les en-têtes locaux.
unzip -t archive.zip 2>&1 | tee diagnostic.log
zip -F archive.zip --out reparee.zip # reconstruction légère
zip -FF archive.zip --out reparee.zip # reconstruction agressive (scan octet par octet)
unzip reparee.zip -d /destination/recuperation/
-FF peut produire des membres fantômes mais récupère souvent ce que -F ne
peut pas. Si le support physique est suspect, imager d’abord avec ddrescue .
Noms de fichiers corrompus après extraction (caractères illisibles)
Symptôme : les noms contiennent des caractères graphiques DOS ou des symboles illisibles. Cause probable : archive créée sous Windows ou macOS avec un encodage autre qu’UTF-8 ; unzip interprète en CP437. Correction : forcer l’encodage à l’extraction, ou passer par 7z, ou renommer après coup.
unzip -O CP1252 archive_windows.zip -d /destination/ # patch Debian/Ubuntu
unzip -O Shift_JIS archive_japonaise.zip -d /destination/
7z x archive.zip -o/destination/ # 7z gère mieux les encodages
convmv --notest -f cp1252 -t utf-8 -r /destination/ # renommage après extraction
Extraction très lente, CPU saturé à 100 %
Symptôme : la décompression sature un cœur, le débit s’effondre. Cause probable : la décompression xz et bzip2 est monothread par défaut. Correction : utiliser les variantes multithread, ou préférer zstd pour les futures archives.
pixz -d < archive.tar.xz | tar -xf - # xz multithread
unpigz -c archive.tar.gz | tar -xf - # gzip multithread
tar --zstd -cf archive.tar.zst /source/ # zstd : multithread natif
« Can not open file as archive » (7z) ou « CRC failed » (rar)
Symptôme : 7z ou unrar refuse l’archive, ou signale une erreur CRC. Cause probable : format non reconnu, archive corrompue, ou téléchargement incomplet. Correction : vérifier le format, tester l’intégrité, et réparer si un enregistrement de récupération existe.
file archive.7z # confirmer le format réel
7z t archive.7z # test 7z (codes : 0 ok, 1 warning, 2 fatal)
unrar t archive.rar # test rar
# rar avec enregistrement de récupération (-rr à la création) :
unrar r archive.rar # tenter la réparation
unzip écrase des fichiers existants sans prévenir
Symptôme : des fichiers présents sont remplacés lors de l’extraction. Cause
probable : option -o active, ou réponse « All » à l’invite. Correction :
utiliser -n pour ne jamais écraser, ou extraire dans un répertoire vide dédié.
unzip -n archive.zip -d /destination/ # préserve l'existant
mkdir -p /tmp/extraction-propre && unzip archive.zip -d /tmp/extraction-propre
« gzip: fichier.gz: not in gzip format »
Symptôme : gzip refuse un fichier portant l’extension .gz . Cause probable :
le fichier n’est pas du gzip (corrompu, ou renommé sans être compressé, ou autre
format). Correction : vérifier le format réel et le magic number.
file fichier.gz # identifier le format réel
xxd fichier.gz | head -1 # gzip commence par 1f 8b ; bzip2 par 42 5a ; xz par fd 37 7a 58 5a
Si le magic number n’est pas 1f 8b , le fichier n’est pas du gzip. gunzip
décompresse aussi les formats .Z (compress), .zip (membre unique) et LZH, ce
qui peut surprendre un script qui se fie à l’extension.
« gzip -l » affiche une taille absurde ou un ratio faux
Symptôme : la taille décompressée annoncée est plus petite que la taille compressée, ou le ratio est aberrant. Cause probable : l’original fait plus de 4 Go ; le champ ISIZE du format gzip stocke la taille modulo 2^32. Un original de 5 Go apparaît comme environ 1 Go. Correction : lire la taille réelle en décompressant le flux.
zcat fichier.gz | wc -c # seule méthode fiable au-delà de 4 Go
C’est une limite du format gzip, non un bug. Sur un fichier multi-membres
(concaténation de .gz ), gzip -l n’affiche que le dernier membre.
La compression produit un fichier plus gros que l’original
Symptôme : le .gz est plus volumineux que la source. Cause probable : le
fichier est déjà compressé (JPEG, PNG, MP4, ZIP) ou à haute entropie (binaire
chiffré) ; gzip n’a alors rien à gagner et ajoute son en-tête. Correction :
vérifier le type avant de compresser, et ne pas recompresser ce qui l’est déjà.
file fichier_suspect # si déjà compressé, ne pas gziper
L’expansion worst-case reste minime (environ 0,015 % sur un gros fichier), mais le coût CPU est réel pour un gain nul.
« Argument list too long » avec gzip *.log
Symptôme : le shell refuse la commande quand trop de fichiers correspondent au
glob. Cause probable : la liste d’arguments dépasse la limite du shell.
Correction : passer par find ou compresser récursivement.
find . -name "*.log" -exec gzip {} + # regroupe les arguments en lots
gzip -r . # compresse récursivement le répertoire courant
Sécurité des archives
Une archive peut transporter du code malveillant ou écraser des fichiers hors de la destination prévue. Ces risques valent pour tous les formats.
Sur Linux, le risque le plus actuel vient des liens symboliques piégés. La faille CVE-2025-55188 (7-Zip antérieur à 25.01) permet à une archive forgée de créer un lien symbolique malveillant que 7-Zip suit à l’extraction, menant à l’écriture de fichiers arbitraires. Elle touche Linux pour les formats zip, tar, 7z et rar. Correction : passer 7-Zip en version 25.01 ou supérieure, et vérifier
7z i.
La CVE-2025-8088 de WinRAR (path traversal, exploitée par RomCom) n’affecte que Windows. Les versions Unix de RAR et unrar, le code portable et RAR Android ne sont pas concernés. Sous Linux, maintenir unrar à jour par les dépôts suffit ; cette faille ne doit pas servir d’argument pour craindre unrar sur un poste Linux à jour.
Une archive d’origine incertaine se traite comme hostile. Inspecter sans extraire (
unrar l,7z l,unzip -l), repérer les exécutables masqués (.exe,.scr,.js,.vbs) et les chemins suspects, scanner à l’antivirus, et n’extraire que dans un répertoire dédié, idéalement en machine virtuelle isolée pour une pièce jointe non sollicitée.
Le chiffrement réel passe par AES-256, non par les protections natives faibles. ZipCrypto est cassé, et la protection RAR ne vaut que par la robustesse du mot de passe. Pour des données sensibles, utiliser 7z avec
-mhe=on(chiffre contenu et noms) ou GPG, avec un mot de passe long et unique saisi interactivement.
Problèmes connus et contournements
Une archive tar compressée ne se modifie pas en place
Les opérations -r , -u , --delete , -A échouent sur .tar.gz ,
.tar.xz , .tar.zst : la compression est un filtre sur le flux entier.
Contournement : décompresser, modifier, recompresser, ou conserver le format
.tar non compressé pour les archives à modifier souvent.
Les ACL et attributs étendus sont perdus silencieusement (tar)
Par défaut tar ne préserve ni ACL, ni xattrs, ni contextes SELinux, sans
avertissement. La perte se découvre à l’extraction. Toujours créer et extraire
avec --acls --xattrs --selinux pour une sauvegarde système, et vérifier avec
getfacl -R avant/après.
Le transfert tar via SSH produit une archive corrompue
Si le ~/.bashrc distant écrit sur stdout (bannière, fortune), ces données
polluent le flux tar. Diagnostic et contournement :
ssh user@serveur "echo CLEAN_CHECK" | head -1 # doit afficher CLEAN_CHECK seul
ssh user@serveur "bash --norc --noprofile -c 'tar -czf - /src/'" | tar -xzf -
Correction définitive : déplacer les commandes d’affichage de ~/.bashrc vers
~/.bash_profile (exécuté seulement en session interactive).
p7zip est obsolète, utiliser 7zz
p7zip est abandonné depuis 2016. Le port officiel 7zz (paquet 7zip ) le
remplace depuis 2021 : il préserve les permissions Unix dans les archives 7z,
suit plus de formats récents et reçoit les correctifs de sécurité. Vérifier
l’implémentation avec 7z i .
gzip peut perdre l’original et le .gz en cas de crash
Par défaut, gzip supprime l’original après écriture du .gz , sans fsync . Si
le système crashe avant le flush du cache disque, le .gz peut être incomplet
alors que l’original est déjà supprimé. Contournement pour un fichier critique :
gzip --synchronous fichier.log , ou la voie non destructive
gzip -k fichier.log && rm fichier.log après vérification.
gzip -9 peut produire un fichier plus gros que gzip -6
Le niveau maximal n’est pas garanti optimal : sur certains fichiers, la
recherche exhaustive de -9 fait des choix localement optimaux mais globalement
moins bons que -6 . Pour l’archivage critique, comparer les deux ( gzip -6k
puis gzip -9k , puis ls -l ) plutôt que d’assumer que -9 gagne toujours.
Le gain typique de -9 sur -6 reste de 2 à 3 points pour un temps
deux fois plus long.
La variable d’environnement GZIP n’honore que quelques options
Les versions modernes de gzip n’appliquent via la variable GZIP que
--rsyncable , --synchronous et le niveau de compression. Les autres options
y sont ignorées en silence. Pour un comportement par défaut fiable, utiliser un
alias ( alias gzip='gzip --rsyncable' ) plutôt que la variable
d’environnement.
Protocole d’urgence
Pour le cas d’une extraction qui a écrasé des fichiers au mauvais endroit, ou d’une archive suspecte. Lire la première ligne de chaque étape suffit à agir.
- Arrêter. Interrompre l’extraction immédiatement (
Ctrl+C). Ne rien corriger manuellement à chaud. - Noter. Consigner la commande exacte exécutée et le répertoire
courant (
pwd). - Identifier. Lister ce que l’archive contient sans réextraire :
tar -tf archive.tar.gz | head -50ou7z l,unzip -l. - Isoler. Si des fichiers système (
/etc,/bin,/lib) ont été touchés, ne pas redémarrer ; arrêter les services impactés. Si l’archive est suspecte (pièce jointe non sollicitée), la déplacer hors ligne sans l’extraire et déconnecter la machine du réseau. - Préserver. Ne rien supprimer, conserver l’archive originale intacte. Passer à la récupération.
Ne jamais inverser : un redémarrage ou une suppression manuelle avant d’avoir évalué les dégâts transforme un incident réversible en perte définitive.
Processus de récupération
Prérequis. Vérifier avant de commencer ; si l’un manque, arrêter et le signaler.
Prérequis Vérification
────────────── ──────────────
Commande et répertoire connus historique shell, note de l'étape urgence
Archive originale intacte file archive.xxx, test d'intégrité
Source de référence disponible sauvegarde récente, snapshot, paquets distrib
Cas 1 : extraction accidentelle au mauvais endroit
# Lister ce qui a été écrit, repérer les fichiers écrasés
tar -tf archive.tar.gz > /tmp/extraits.txt
while IFS= read -r f; do [ -e "$f" ] && echo "ÉCRASÉ: $f"; done < /tmp/extraits.txt
# Restaurer les fichiers système depuis les paquets
dpkg -S /chemin/fichier && apt-get install --reinstall paquet # Debian
rpm -qf /chemin/fichier && dnf reinstall paquet # RHEL/Fedora
Cas 2 : après extraction d’une archive malveillante
1. Éradication : déconnecter du réseau, identifier et supprimer les fichiers
extraits, analyser le système à l'antivirus.
2. Restauration : restaurer les données légitimes endommagées depuis une
sauvegarde propre antérieure à l'incident, jamais depuis l'archive compromise.
3. Validation : vérifier l'intégrité des fichiers restaurés, changer les mots
de passe potentiellement exposés, réanalyser pour confirmer l'éradication.
Cas 3 : archive .gz corrompue, original supprimé
Travailler sur une copie, jamais sur la seule archive restante.
# 0. Préserver avant toute tentative
cp --preserve=all archive.gz /mnt/rescue/archive.gz.backup
gzip -tv /mnt/rescue/archive.gz.backup 2>&1 # diagnostic exact
# 1. Extraire les données valides jusqu'au point de corruption
zcat /mnt/rescue/archive.gz.backup > /mnt/rescue/partiel 2>/dev/null
wc -c /mnt/rescue/partiel # quantifier le récupéré
# 2. Récupération avancée si le flux est cassé en plusieurs points
sudo apt install gzrt # gzip recovery toolkit
gzrecover /mnt/rescue/archive.gz.backup # saute les blocs corrompus
# 3. Dernier recours : récupérer l'original supprimé par gzip
mount -o remount,ro /dev/sdXY # figer le filesystem d'abord
sudo extundelete /dev/sdXY --restore-file chemin/vers/fichier.log
État attendu : zcat récupère les données jusqu’au premier bloc corrompu (les
dernières lignes peuvent être tronquées) ; gzrecover récupère davantage avec
des lacunes sur un fichier texte. La récupération de l’original supprimé suppose
que le filesystem n’a pas été réécrit depuis : le remonter en lecture
seule immédiatement.
Validation finale. Fichiers restaurés intègres, aucun reliquat de l’archive incriminée, services fonctionnels, sauvegarde récente disponible.
Points clés à retenir
Archivage et compression sont distincts : tar regroupe, le filtre (gzip/xz/zstd) compresse. Une archive tar compressée ne se modifie pas en place.
Avant d’extraire, inspecter :
tar -tf,unzip -l,7z l,unrar l. C’est le réflexe de sécurité, surtout pour une archive d’origine incertaine.
tar écrase sans prévenir et le chemin compte : contrôler le répertoire de base avec
-C, fixer la destination avec-Cou-dà l’extraction.
Sauvegarde système Linux : tar avec
--acls --xattrs --selinux, ou le pipetar | 7z. tar seul perd ACL et xattrs silencieusement.
Tester avant de supprimer l’original :
tar -tf,unzip -t,7z t,unrar t, y compris pour les archives chiffrées.
Compression solide (défaut 7z, option RAR) : meilleur ratio, mais un octet perdu détruit le bloc et la mise à jour devient impossible.
-ms=offsi résilience ou mise à jour prioritaires.
Choix d’outil : tar pour sauvegarder et streamer, zip pour échanger et mettre à jour, 7z pour compresser fort et chiffrer, rar en réception seule. Pérenne : formats ouverts (tar.zst, tar.gz, 7z).
Chiffrement : 7z AES-256 avec
-mhe=on, ou GPG. ZipCrypto est cassé. Jamais le mot de passe en argument de ligne de commande (visible dansps).
Sur Linux, le risque archive le plus actuel est le symlink piégé (CVE-2025-55188, 7-Zip avant 25.01) : mettre 7-Zip à jour. La CVE WinRAR CVE-2025-8088 n’affecte que Windows.
Gros volumes lents : décompression xz et bzip2 monothread. Utiliser pixz, pigz, ou préférer zstd (multithread natif).
p7zip est obsolète depuis 2016 : utiliser 7zz (paquet 7zip), qui préserve les permissions Unix et reçoit les correctifs.
RAR n’est pas ouvert et reste un vecteur d’attaque privilégié : le réserver aux cas où ses fonctions spécifiques sont nécessaires, et l’intégrer dans une stratégie 3-2-1 (3 copies, 2 supports, 1 hors site).
gzip compresse un flux unique, pas un répertoire : pour un dossier, assembler avec tar d’abord (
tar czf). Il supprime l’original par défaut ;-kou-c >le conservent,--synchronousprotège un fichier critique contre un crash.
gzip -lest faux au-delà de 4 Go (taille modulo 2^32) et sur un fichier multi-membres (dernier seulement) : utiliserzcat fichier.gz | wc -c. Les niveaux 1 à 9 ne changent pas la mémoire, et-9n’est pas toujours meilleur que-6.
--rsyncableest indispensable pour les.gzsynchronisés par rsync (coût environ 1 %).pigzest un remplacement multithread au format identique. Ne pas compresser ce qui l’est déjà (vérifier avecfile).