Barres de progression en ligne de commande : pv et progress

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 ; suffixesk
,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 :
- Terminal A :
cp -r /media/usb/bigfolder ~/Desktop/
- 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.
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
- Vérifier si progress est installé :
which progress
ouprogress --version
. - Si progress est installé, exécuter
progress -m
dans un terminal séparé et repérer la copie. - 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
. - Pour limiter l’impact sur l’I/O, utilisez
pv -L 5m
pour plafonner à 5 Mo/s. - Si la copie semble bloquée, contrôlez l’activité disque :
iostat -x 1
,iotop
(si installé) etdmesg
pour erreurs matérielles. - 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)
- Installer pv et lancer un tar piping : vérifier qu’une barre, l’ETA et le débit s’affichent.
- 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.
- Simuler limitation de bande passante avec
pv -L 1m
et vérifier que le débit observé pariostat
est plafonné.
Compatibilité et migration rapide
- Debian/Ubuntu :
sudo apt-get install pv
etlibncurses5-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
etyum 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
etprogress
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
Matériaux similaires

Escaliers colimaçon et cercles — Conan Exiles

Voir Instagram anonymement — guide pratique

Installer et configurer CSF sur CentOS 7

WhatsApp se reconnecte sur iPhone — Guide de réparation

Améliorer la qualité vidéo sur Windows
