Linux moreutils
Geschrieben am 16-02-2025 - ⧖ 3 mincoreutils 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.