Moreutils
| Fiche express | |
|---|---|
| Domaine | Utilitaires Unix pour les pipes et les flux |
| Paquet | moreutils
|
| Outils clés | sponge, vipe, ts, pee
|
| Voir aussi | Tee (traite le même sujet des pipes) |
moreutils est une collection de petits utilitaires Unix complémentaires aux outils classiques (tee, cat, xargs...), pensés pour combler des trous précis dans les pipelines shell : absorber un flux avant de réécrire un fichier, éditer interactivement au milieu d'un pipe, timestamper des logs en direct, dupliquer un flux vers plusieurs commandes au lieu de plusieurs fichiers, etc.
Installation
# Debian/Ubuntu
apt-get install moreutils
# RHEL/CentOS (dépôt EPEL)
yum install moreutils
sponge
sponge lit tout son entrée standard jusqu'à la fin (elle "absorbe" le flux, d'où le nom) avant d'écrire quoi que ce soit sur disque. C'est ce qui permet de trier ou filtrer un fichier "en place" dans un pipe, ce que la redirection > seule ne permet pas : le shell tronque le fichier de sortie dès l'ouverture, avant même que la commande en amont ait fini de le lire, ce qui produit un fichier vide ou corrompu.
# Ne fonctionne PAS : > tronque access.log avant que sort ait fini de le lire
sort access.log > access.log
# Fonctionne : sponge n'écrit qu'une fois tout le flux reçu
sort access.log | sponge access.log
# Même logique pour filtrer une liste de paquets en place
grep -v '^#' hosts.allow | sponge hosts.allow
vipe
vipe insère un éditeur interactif ($EDITOR, ou vi par défaut) au milieu d'un pipe : le flux entrant est chargé dans l'éditeur, on le modifie ou on le trie à la main, puis le contenu sauvegardé repart en sortie vers la suite du pipe.
# Récupérer une liste de conteneurs, en retirer quelques-uns à la main, puis les arrêter
docker ps -q | vipe | xargs docker stop
ts
ts préfixe chaque ligne d'un flux avec un horodatage. Très utile pour suivre un log en direct dont la source ne date pas elle-même ses lignes, ou pour dater précisément la sortie d'une commande longue.
# Dater chaque ligne d'un tail -f dont le format de log ne contient pas d'horodatage
tail -f /var/log/mon-appli.log | ts
# Format personnalisé (identique à strftime)
ping clipsy.tech | ts '%Y-%m-%d %H:%M:%.S'
pee
pee fonctionne comme tee, mais duplique le flux d'entrée vers plusieurs commandes au lieu de plusieurs fichiers, chaque commande recevant une copie complète du flux.
# Envoyer le même flux à la fois vers un fichier et vers grep, en une seule lecture de la source
generate-report | pee 'cat > rapport.txt' 'grep -i erreur'
Autres outils
- ifdata — affiche les informations d'une interface réseau (adresse, MTU...) dans un format simple à parser en script, sans dépendre du format changeant de
ifconfigouip. - isutf8 — vérifie qu'un fichier ou un flux est bien encodé en UTF-8 valide, utile avant un traitement texte qui suppose cet encodage.
Liste des binaires du paquet
combine ifdata ifne isutf8 lckdo mispipe parallel pee sponge ts vidir vipe zrun
Voir aussi
- Tee — duplication de flux vers des fichiers, sujet directement recoupé par sponge et pee