Guide des technologies

Barres de progression en ligne de commande : pv et progress

8 min read Linux Mis à jour 07 Oct 2025
pv vs progress : barre de progression CLI
pv vs progress : barre de progression CLI

Contexte

Imaginez que vous lancez depuis un terminal la copie d’un très gros fichier depuis une clé USB vers votre système Linux. Vous faites autre chose puis, au retour, la commande tourne toujours sans message ni erreur. Que faire ? Sur une machine sans interface graphique, on attend souvent ou on annule (Ctrl+C) puis on relance. Ce n’est pas optimal.

Les outils pv et progress ajoutent une visibilité de type « barre de progression » pour les opérations en ligne de commande : temps écoulé, pourcentage, débit actuel, quantité transférée et ETAs. Ils évitent les interruptions inutiles et permettent de mieux piloter les transferts.

Important : toutes les commandes et instructions présentées ici ont été testées sur Ubuntu 14.04, mais les concepts sont applicables à d’autres distributions avec quelques adaptations indiquées plus bas.

Commandes et modèles mentaux (définition rapide)

  • Pipeline : chaîne de commandes reliées par des tuyaux (|). pv s’insère dans la chaîne et transmet les octets.
  • Moniteur système : outil qui observe un processus externe sans en modifier l’appel. progress fonctionne comme moniteur pour certaines commandes.

pv — insérer une barre de progression dans un pipeline

pv (pipe viewer) surveille le flux de données dans un pipeline. Il affiche le temps écoulé, le pourcentage (avec barre), le débit, le total transféré et l’ETA. La philosophie : modifier la commande pour placer pv entre source et destination.

Installation (Debian/Ubuntu) :

sudo apt-get install pv

Exemple simple — copier un dossier d’images depuis une clé USB et compresser en même temps :

pv /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Si vous ne voulez afficher que la barre de progression (moins de détails) :

pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz

Explications des options utiles :

  • -p : n’afficher que la barre de progression.
  • -W ou –wait : attendre le premier octet transféré avant d’afficher quoi que ce soit (utile si la commande en aval a une phase d’initialisation).
  • -L : limiter le débit (par ex. -L 5m pour ~5 mégaoctets/s ; suffixes k, m, g, t représentent des puissances de 1024).

Exemples d’usage avancés :

  • Pour visualiser la progression d’une copie avec dd (utile pour les images disque) :
dd if=/dev/sdb | pv | dd of=/dev/sdc
  • Pour afficher la progression d’une compression tar :
tar cf - folder | pv | gzip > folder.tar.gz

Quand pv est judicieux :

  • Vous pouvez modifier la commande que vous exécutez (pipeline possible).
  • Vous avez besoin d’afficher une ETA et un débit en temps réel.

Limites de pv :

  • pv ne voit que les données qui passent par son flux ; il ne peut pas « attacher » à une commande existante déjà lancée.

progress — surveiller les commandes coreutils sans les modifier

Progress (anciennement cv) est conçu pour détecter et afficher la progression d’opérations lancées avec des commandes courantes comme cp, mv, dd, tar, gzip/gunzip, cat, etc. Contrairement à pv, vous n’avez pas besoin de modifier la commande initiale : progress va observer les processus en cours et estimer leur avancement.

Dépendance : progress repose sur la bibliothèque ncurses pour l’affichage interactif. Installez ncurses si absent :

sudo apt-get install libncurses5-dev

Installation depuis le dépôt GitHub (méthode décrite upstream) :

git clone https://github.com/Xfennec/progress.git

Puis, depuis le répertoire cloné :

make
sudo make install

Usage basique :

progress

Options utiles :

  • -m : surveiller tant que les processus observés sont en cours (mode boucle).
  • -M : surveiller en continu (ne s’arrête jamais — utile pour affichage télémetré).
  • -c : ne surveiller que cette commande par nom (ex. -c cp). Option réutilisable pour plusieurs commandes.
  • -p : surveiller un PID précis.
  • -i : ignorer un fichier donné (chemin absolu requis si le fichier n’existe pas encore).

Exemple : lancer une copie dans un autre terminal et observer depuis votre session :

  1. Terminal A :
cp -r /media/usb/bigfolder ~/Desktop/
  1. Terminal B :
progress -m

Le moniteur listera les copies cp en cours et estimera la progression, le débit et l’ETA.

Quand progress est judicieux :

  • Vous ne pouvez pas ou ne voulez pas modifier la commande initiale.
  • Vous administrez une machine distante et souhaitez surveiller plusieurs opérations utilisateur.

Limites de progress :

  • Il ne supporte que des commandes reconnues (coreutils et quelques autres).
  • L’estimation repose sur l’analyse des descripteurs de fichiers et peut être approximative selon le cas.

Capture d'écran : commande Progress affichant les opérations en cours

Note : l’illustration montre un écran de surveillance multi-processus fourni par le projet progress.

Comparaison rapide — heuristiques pour choisir

  • Besoin d’insérer une supervision dans un pipeline → pv.
  • Besoin de « s’attacher » à des processus déjà lancés (cp, mv, dd, tar, gzip) → progress.
  • Souplesse : pv s’utilise partout où vous pouvez mettre un pipe ; progress est plus pratique pour le dépannage sur une machine en production.

Fact box (points clés) :

  • pv : fonctionne en pipeline, affiche débit/ETA/%, options -p -W -L.
  • progress : moniteur attachable, compatible coreutils, options -m -M -c -p -i.

Procédure pas à pas (SOP) : surveiller une grosse copie sur un serveur headless

  1. Vérifier si progress est installé : which progress ou progress --version.
  2. Si progress est installé, exécuter progress -m dans un terminal séparé et repérer la copie.
  3. Si progress n’est pas installé et que vous pouvez relancer la commande, installez pv : sudo apt-get install pv, puis relancez la copie en insérant pv dans le pipeline. Exemple pour compresser en vol : pv /chemin/source | gzip > /chemin/dest/arch.tar.gz.
  4. Pour limiter l’impact sur l’I/O, utilisez pv -L 5m pour plafonner à 5 Mo/s.
  5. Si la copie semble bloquée, contrôlez l’activité disque : iostat -x 1, iotop (si installé) et dmesg pour erreurs matérielles.
  6. En cas d’erreur matérielle (dmesg signale I/O errors), arrêtez la copie, clonez le périphérique si nécessaire avec ddrescue et informez l’équipe matérielle.

Критерии приёмки

  • L’outil affiche une estimation d’ETA et un débit mesurable pendant la copie.
  • L’installation fonctionne sans erreurs sur la distribution cible.
  • L’usage ne corrompt pas les fichiers cibles.

Checklist par rôle

  • Administrateur système : vérifier dépendances (ncurses), tester progress -m, documenter sur la page interne.
  • Développeur : utiliser pv pour mesurer les performances d’archivage et limiter le débit en environnement partagé.
  • Utilisateur occasionnel : installer pv pour avoir une rétroaction visuelle lors de gros transferts.

Cas où ces outils échouent ou sont inadaptés

  • Opérations chiffrées ou passées par des sockets non exposées comme fichiers : progress peut ne pas détecter la progression.
  • Transferts via certains protocoles (SFTP, rsync via certaines options) où le flux n’est pas lisible comme un fichier : pv peut être inutilisable si vous ne pouvez pas insérer un pipe.
  • Pour des jobs orchestrés par un gestionnaire (systemd, batch), privilégiez les logs et métriques système plutôt que progress.

Alternatives et approches complémentaires

  • rsync : affiche une progression détaillée pour les synchronisations (rsync --progress), et permet la reprise de transfert.
  • ddrescue : pour récupérer des données sur disques défaillants, avec reprise et log.
  • iotop / iostat / atop : surveiller l’I/O au niveau du système plutôt que la progression des fichiers.

Tests et critères d’acceptation (tests à exécuter)

  1. Installer pv et lancer un tar piping : vérifier qu’une barre, l’ETA et le débit s’affichent.
  2. Cloner un gros dossier avec cp dans un terminal et lancer progress dans un autre : vérifier que la ligne correspondante montre un pourcentage et un ETA.
  3. Simuler limitation de bande passante avec pv -L 1m et vérifier que le débit observé par iostat est plafonné.

Compatibilité et migration rapide

  • Debian/Ubuntu : sudo apt-get install pv et libncurses5-dev pour progress. Le paquet progress peut exister dans certains dépôts ; sinon utilisez git clone et make.
  • RHEL/CentOS : utilisez yum install pv et yum install ncurses-devel puis adaptez l’installation de progress (make/make install).
  • macOS : pv est disponible via Homebrew (brew install pv). progress n’est pas natif sur macOS sans ports supplémentaires.

Notes locales (France / UE) : les commandes apt/yum sont identiques ; faites attention aux dépôts et aux stratégies de sécurité sur les serveurs de production.

Exemples pratiques supplémentaires

  • Mesurer l’export d’une base de données compressée :
pg_dump mydb | pv | gzip > mydb.sql.gz
  • Limiter l’impact pendant une sauvegarde hors heure de pointe :
tar cf - /data | pv -L 20m | gzip > /backup/data.tar.gz
  • Surveiller plusieurs transferts en même temps : lancez progress -M dans un terminal dédié pour un affichage continu multiprocessus.

Sécurité et bonnes pratiques

  • Évitez d’exposer des chemins sensibles en clair dans des logs accessibles. pv et progress lisent des métadonnées pour produire l’ETA ; ils ne transfèrent pas d’informations à l’extérieur par défaut.
  • Sur des environnements multi-utilisateurs, vérifiez les droits d’accès avant d’exécuter progress : il peut nécessiter des permissions pour lire certains descripteurs.

Résumé et recommandations

  • pv : préféré quand vous pouvez modifier la commande (pipeline), indispensable pour mesurer et limiter le débit, compatible avec dd/tar/gzip.
  • progress : idéal pour attacher un moniteur à des commandes coreutils déjà lancées, pratique pour l’administration et le dépannage.
  • Si vous cherchez la simplicité pour les synchronisations réseau, considérez rsync qui offre déjà une option --progress et la reprise.

Points clés à retenir :

  • Choisissez pv pour le contrôle direct et les pipelines.
  • Choisissez progress pour la surveillance sans modification des commandes.
  • Testez dans un environnement non critique avant déploiement en production.

Important : ni pv ni progress ne remplacent des solutions de sauvegarde et de reprise métier. Ils offrent une visibilité et un contrôle utiles lors des transferts, mais ne gèrent pas la tolérance aux pannes matérielles.

Fin

Auteur
Édition

Matériaux similaires

Escaliers colimaçon et cercles — Conan Exiles
Jeux vidéo

Escaliers colimaçon et cercles — Conan Exiles

Voir Instagram anonymement — guide pratique
Réseaux sociaux

Voir Instagram anonymement — guide pratique

Installer et configurer CSF sur CentOS 7
Sécurité Linux

Installer et configurer CSF sur CentOS 7

WhatsApp se reconnecte sur iPhone — Guide de réparation
Support iPhone

WhatsApp se reconnecte sur iPhone — Guide de réparation

Améliorer la qualité vidéo sur Windows
Windows

Améliorer la qualité vidéo sur Windows

Réparer une photo légèrement floue
Retouche photo

Réparer une photo légèrement floue