Linux moreutils

coreutils ist den vielen Nutzern sicher ein Begriff; das Paket enthält grundlegende Programme wie chmod, cp, ls, mv, rm, .., aber kennt jemand die moreutils? Die enthalten nämlich sehr nützliche und sinnvolle Programme, die man erst braucht, wenn man weiß das es sie gibt (auch wenn einige davon Perlscripte sind).

chronic programm
Es gibt nur eine Ausgabe, wenn programm mit einem Fehler beendet wurde, was bei Cronjobs nützlich sein kann.
combine datei1 datei2
Ist vergleichbar mit cat(1), wobei man hier auf die Operatoren "and", "not", "or" bzw. "xor" verwenden kann.
errno
Damit kann man die Variablen von errno(3) abrufen. Also wenn sich ein Programm mit "EADV" verabschiedet hat, kriegt man mit errno EADV raus wofür das steht.
ifdata
Damit kann man prüfen ob ein bestimmtes Netzwerkinterface existiert, die MTU, IP, Netmask, .. ausgeben lassen.
ifne command
Das ist ähnlich wie "chronic", nur das hier die Standardeingabe ausgewertet wird um zu entscheiden ob command starten soll. Das Beispiel aus der Manpage zeigt das recht deutlich:
$ find . -name core | ifne mail -E 'set escape' -s "Core files found" root
isuft8 datei..
Damit kann man prüfen ob eine Datei auch wirklich konform zu UTF8 kodiert ist.
lckdo lockfile programm
Einige Programme erstellen ein sog. Lockfile, damit das Programm nicht in einer zweiten Instanz gestartet werden kann. Mit lckdo kann man genau das implementieren.
mispipe "command1" "command2"
Normalerweise wertet die Shell nur den exit-Status des Kommandos nach der letzten Pipe aus und ignoriert die anderen. Mit mispipe kann man das umgehen:
$ mispipe "ls -l ~/dontexistyet.txt" "grep 1" || echo "Shit happens"
parallel
Da ist der Name Programm: Es werden alle angegebenen Programme parallel abgearbeitet.
pee command
Das ist ein Pendant zu tee(1), wobei pee die Ausgaben auf zwei Pipes verteilt, aber die Ausgabe auf STDOUT unterlässt.
$ ./blablaa.sh | tee ausgabe-a.txt ausgabe-b.txt
$ ./blablaa.sh | pee "grep irgendwas" "gzip -c > ausgabe-c.gz"
sponge
Das sammelt die Daten und speichert sie bevor sie in eine Ausgabedatei geschrieben werden. So kann man also Pipes erstellen, die gleichzeitig von der gleichen Datei lesen und schreiben.
ts
Fügt einen Zeitstempel (timestamp) hinzu, was z. B. wie folgt angewandt werden kann:
$ tail -f /varl/log/messages | ts

vidir datei|verzeichnis
Wenn man z. B. die Ausgaben von find(1), ls(1), .. verändern will, kann man das damit erledigen. Wenn man z. B. vidir /tmp eingibt, wird die Ausgabe von /tmp im Texteditor geöffnet. Hier kann man dann Dateien umbenennen, löschen, .. und nach dem speichern werden die Änderungen übernommen.
vipe
Damit kann man einen Texteditor zwischen Pipes einbinden und die Ausgabe der vorherigen Kommandos editieren und sie auch an ein weiteres Programm weitergeben. Also z. B.
$ grep "FAIL" /var/log/vsftpd.log | vipe | tee foobar.txt
zrun
zrun dekomprimiert die übergebenen Archive und übergibt sie einem weiterem Programm. Also z. B. zrun diff foo.gz bar.gz

Die Programme brauche ich zwar nicht regelmäßig, aber doch immer wieder mal. Und wenn ich sie brauche, bin ich froh sie zu haben.

For comments, please send me an email