Moreutils

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 ifconfig ou ip.
  • 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