moreutils
À quoi il sert
moreutils, rassemblé par Joey Hess, réunit des outils qui manquaient à la boîte de base, chacun très court. Le plus utilisé est sponge : il lit toute son entrée avant d'ouvrir le fichier de destination, ce qui permet d'écrire jq '.version = "1.4.1"' config.json | sponge config.json, là où une redirection > config.json viderait le fichier avant que jq ne l'ait lu. Les autres : ts horodate chaque ligne d'un flux, chronic n'affiche la sortie d'une commande que si elle échoue (idéal pour cron), ifne ne lance une commande que si son entrée n'est pas vide, vipe insère un éditeur au milieu d'un tube, pee duplique un flux vers plusieurs commandes, errno traduit les codes d'erreur système. Debian 13 et Ubuntu 24.04 (dépôt universe) fournissent la version 0.69.
Quand le choisir
Sur un poste de travail ou dans une image de CI, pour des scripts plus lisibles. Sur un serveur, chaque paquet ajouté doit être justifié : pour réécrire un fichier, la méthode sans dépendance (écrire dans un fichier temporaire du même répertoire, vérifier, puis mv) est à peine plus longue, garantit l'écriture atomique et ne remplace rien si la commande a échoué.
Points d'attention
spongeécrit d'abord dans un fichier temporaire deTMPDIR(/tmppar défaut), puis tente de le renommer sur la destination en reprenant ses droits. Si/tmpest sur un autre système de fichiers (untmpfs, par défaut sur Debian 13), le renommage échoue etspongerecopie le contenu dans le fichier existant : l'écriture n'est plus atomique, et une interruption peut laisser un fichier tronqué. AvecTMPDIRplacé sur le même système de fichiers que la cible, le renommage réussit.spongene sait pas si la commande qui l'alimente a échoué :jq ... config.json | sponge config.jsonremplace le fichier par un fichier vide si jq rejette le document, même sousset -o pipefail, puisquespongea déjà écrit quand le shell découvre l'échec. Préférez un fichier temporaire du même répertoire, le contrôle du code de sortie, puismv.- Toute l'entrée est gardée en mémoire (ou dans un fichier temporaire au-delà d'une certaine taille).
- Le paquet installe une commande
parallelqui n'est pas GNU parallel, source de confusion quand les deux coexistent.
Par où commencer
La leçon jq : transformer, produire du JSON et choisir son outil du cours Traiter du texte, qui compare sponge et le couple fichier temporaire plus mv, puis la page du projet et les pages de manuel de chaque outil.