Linux Fu : Faire des progrès | Hackaday

Le monde informatique est différent derrière un TeleType ou un autre terminal papier. Les choses qui ont tendance à ennuyer les gens à propos d’Unix ou de Linux ces jours-ci étaient parfaitement géniales lorsque vous imprimiez tout ce que l’ordinateur vous disait. Considérez la brièveté de la plupart des commandes de base. Lorsque vous copiez un fichier, par exemple, il ne vous dit pas grand-chose d’autre qu’il vous renvoie à l’invite lorsque c’est fait. Si vous êtes sur un ordinateur moderne travaillant localement avec des fichiers de taille normale, ce n’est pas grave. Mais si vous êtes sur un réseau lent ou avec des fichiers volumineux, ce serait bien d’avoir une barre de progression. Bien sûr, vous pourriez écrire votre propre version de copie, mais ne serait-il pas agréable d’avoir des options plus génériques ?

Sens Unique

Le pv programme peut faire certaines des choses que vous voulez. Il surveille les données via un tuyau ou, au moins via sa sortie standard. Pensez-y comme cat avec un mètre. Supposons que vous vouliez écrire une image disque sur /dev/sdz:

cat diskz.img >/dev/sdz

Mais tu peux aussi faire :

pv diskz.img >/dev/sdz

Par défaut, pv affichera une barre de progression, un temps écoulé, une heure de fin estimée, un taux et un nombre total d’octets. Vous pouvez désactiver tout cela ou ajouter des éléments à l’aide des options de ligne de commande. Vous pouvez également spécifier des éléments tels que la taille du terminal s’il doit compter des lignes au lieu d’octets et, dans le cas où le programme ne sait pas ce qu’il lit, la taille attendue du transfert.

Bien sûr, la sortie de pv est de stderr donc ça s’affiche à l’écran. Cela rend difficile si vous voulez l’utiliser avec quelque chose comme un dialogue qui veut que le stdout être l’indicateur de progrès. Heureusement, vous pouvez rediriger stderr pour stdout puis rediriger stdout à un dossier. Assurez-vous simplement de le faire dans cet ordre. Par exemple:

pv -n /tmp/bigfile.iso 2>&1 >/tmp/bigfile.iso.backup | dialog --gauge "Copy Progress" 10 60

Autrement

Il y a aussi progress. Il recherche des programmes fonctionnant comme cp, mv, dd, et bien d’autres, examine leurs fichiers ouverts et affiche des informations sur la progression de ces programmes. Il ne le fait qu’une seule fois, vous l’associerez donc généralement à la commande watch ou utiliserez le -M option. Vous pouvez également surveiller des programmes arbitraires avec un peu d’aide. Par exemple, supposons que vous ayez un gros téléchargement dans firefox :

watch progress -c firefox

En fait, si vous êtes comme moi et que vous avez plus de 32 instances de firefox en cours d’exécution, cela va échouer, mais vous voyez l’idée.

Le programme de progression peut également prendre un tube, mais il ne surveille toujours que les processus qu’il connaît, à moins que vous n’utilisiez -c. Vous pouvez ajouter à la liste avec le -a option. Par exemple:

tar czf /tmp/books.tgz ~/library/ebooks | progress -m


Résulte en:

Une longue commande tar

A noter que depuis gzip est l’un des programmes que le progrès connaît, il apparaît également sur la liste. Vous pouvez, bien sûr, lui dire de ne rechercher que tar avec -c.

Comme d’habitude

Comme d’habitude avec Linux, il y a toujours plusieurs façons de faire quoi que ce soit. Si vous êtes masochiste, vous pouvez utiliser ptrace pour regarder à l’intérieur d’un programme et comprendre les choses à partir de là. Vous pouvez également faire le même truc que progress fait et regarde à travers un programme /proc entrées.

Si vous souhaitez ajouter directement une barre de progression à vos scripts shell, essayez gum. Ou peut-être combiner la progression avec des widgets pour mettre le résultat sur votre bureau ?

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.