bsdutils
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Das Paket bsdutils enthält die Basiswerkzeuge aus 4.4BSD-Lite. Enthalten sind die Programme logger, renice, script, scriptreplay
und wall
. Wer alle Werkzeuge aus BSD braucht, kann zusätzlich bsdmainutils installieren.
Neben der folgenden Kurzbeschreibungen liefern die Manpages weitere Informationen zu den einzelnen Programmen.
Installation¶
Die oben genannten Programme sind in jeder Ubuntu-Installation bereits enthalten und im Paket
bsdutils
integriert.
Programme¶
logger¶
Mit logger
kann man Mitteilungen ins System-Log schreiben. Um logger
zu testen, öffnet man sich am besten die Datei /var/log/syslog (bei älteren Ubuntu-Versionen /var/log/messages) mit tail in einem Terminalfenster [1]:
tail -f /var/log/syslog
und sendet dann in einem anderen Terminal eine Mitteilung:
logger "Hallo, System-Log :)"
wall¶
wall
steht für "write to all" und ermöglicht es, auf der Kommandozeile eine Mitteilung an alle auf dem System angemeldeten Nutzer zu senden, auch an sich selbst. Um eine Mitteilung zu erstellen, startet man mit dem Befehl
wall
und gibt danach seine Mitteilung ein. Abgesendet wird diese durch die Tastenkombination Strg + D . Möchte man den Inhalt einer Datei als Mitteilung nutzen, verwendet man eine Eingabeumleitung:
wall < DATEINAME
Mit dem Befehl mesg
kann eingestellt werden, ob Mitteilungen empfangen werden.
mesg
gibt den aktuellen Status aus.
mesg y
ermöglicht es, Mitteilungen zu empfangen.
mesg n
stellt Mitteilungen von anderen Benutzern ab. Mitteilungen vom Benutzer root werden trotzdem empfangen.
renice¶
Der Befehl renice zur Prozesssteuerung bzw. Priorität eines Prozesses wird in einem separaten Artikel besprochen.
script¶
Mit dem Programm script
ist es möglich, alle Ein- und Ausgaben einer Terminal-Sitzung in eine Datei zu schreiben, um zu einem späteren Zeitpunkt eine Dokumentation über durchgeführte Arbeitsschritte zur Hand zu haben. Neben Textdateien können auch Pseudo-Videos erstellt werden. Um die Aufzeichnung mittels script
zu starten, genügt dessen Aufruf auf der Kommandozeile [2]:
script
Aufgezeichnet wird in die Datei typescript, eine ggf. vorher schon vorhandene gleichnamige Datei wird aber überschrieben! Beendet wird die Aufzeichnung mittels der Tastenkombination Strg + D bzw. der Eingabe von
exit
Möchte man die Ausgabe an eine bereits existierende typescript-Datei anhängen, muss man script
mit der Option -a
aufrufen:
script -a
Dieser Befehl erstellt ggf. eine vorher nicht vorhandene Datei typescript. Möchte man in eine andere Datei oder in ein anderes Verzeichnis schreiben, muss man hinter script
den Dateinamen oder den Dateipfad setzen:
script DATEINAME
bzw.
script /PfAD/ZUR/DATEI
Der Nachteil bei der Verwendung von script
ist, dass auch sämtliche Sonderzeichen protokolliert werden, so dass die Ausgabedatei voller Steuerzeichen und ANSI-Escape-Sequenzen ist. Man kann den Inhalt der Ausgabedatei jedoch mittels des Programmes col, das eine weitere Datei (in diesem Beispiel cleanedfile) erzeugt, fast gänzlich säubern:
col -bx <typescript >cleanedfile
Zum Lesen der Log-Dateien – besonders der ungesäuberten – eignet sich der Pager less, bei sehr kurzen Dateien kann man auch cat verwenden:
less -r LOGDATEI
Systemadministratoren können mittels script
Terminalsitzungen anderer Benutzer aufzuzeichnen. Um dies zu testen, kann der Aufruf
exec /usr/bin/script -a -q ~/$USER
in /etc/profile eingetragen werden. Nach einer Anmeldung auf der virtuellen Konsole sollte die Sitzung ins Heimatverzeichnis des aktuellen Benutzers aufgezeichnet werden (Dateiname: aktueller Benutzername). Um auch in Terminals unter grafischen Benutzer-Oberflächen Sitzungen nach dieser Methode automatisch Log-Dateien zu schreiben, kann man z.B. im GNOME-Terminal einfach im Kontextmenü ( rechte Maustaste) das "momentan verwendete Profil bearbeiten" und im Reiter "Titel und Befehl" die Option "Befehl als Login-Shell starten" anwählen.
In der Praxis sollte die Einrichtung natürlich etwas unauffälliger ausfallen.
Anstelle von script
kann auch der folgende Befehl benutzt werden:
bash -i 2>&1 | tee teetypescript
Aufgezeichnet wird in die Datei teetypescript, eine ggf. vorher schon vorhandene gleichnamige Datei wird aber überschrieben! Beendet wird die Aufzeichnung mittels der Tastenkombination Strg + D bzw. der Eingabe von
exit
Eine andere Alternative zu script
ist ttyrec.
scriptreplay¶
script
kann auch verwendet werden, um ein Pseudo-Video zu erstellen. Hierfür muss der Befehl wie folgt aufgerufen werden:
script -t 2> timingfile video
Dadurch entstehen zwei Dateien im aktuellen Verzeichnis, timingfile und video. timingfile enthält die benötigten Zeitangaben, video die aufgezeichnete Log-Datei. Zur Wiedergabe nutzt man den Befehl scriptreplay
:
scriptreplay timingfile video
Um die beiden Dateien in eine gemeinsame zu packen, kann man sich mit einem Skript von Hean Kuang Ong behelfen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #!/bin/bash #//script.sh, uses script and scriptreplay to record and playback virtual terminal. #//Copyright (C) 2007 Hean Kuan Ong ( mysurface[at]gmail.com ) #// #//This program is free software; you can redistribute it and/or #//modify it under the terms of the GNU General Public License #//as published by the Free Software Foundation; either version 2 #//of the License, or (at your option) any later version. #// #//This program is distributed in the hope that it will be useful, #//but WITHOUT ANY WARRANTY; without even the implied warranty of #//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #//GNU General Public License for more details. #// #//You should have received a copy of the GNU General Public License #//along with this program; if not, write to the Free Software #//Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. SCRIPT=`which script` SCRIPTREPLAY=`which scriptreplay` if [ ! -n $SCRIPT ] then echo "script is not installed, please install script."; exit fi if [ ! -n $SCRIPTREPLAY ] then echo "scriptreplay is not installed, please install scriptreplay."; exit fi if [ "$1" == "-r" ] then if [ ! -n $2 ] then read -p "what is your session name? " NAME else NAME=$2 fi echo "script recording will start soon, type exit to end the recording" script -t 2>$NAME.timing -a $NAME.session; tar czf $NAME $NAME.timing $NAME.session rm $NAME.timing $NAME.session echo "run $0 -p and specified $NAME to play" elif [ "$1" == "-p" ] then if [ ! -n "$2" ] then read -p "What file you wanna play? " NAME else NAME=$2 fi if [ -e $NAME ] then tar -zxf $NAME scriptreplay $NAME.timing $NAME.session rm $NAME.timing $NAME.session echo "that is the end of the script play." else echo "the file $NAME doesn't exist." fi else echo `basename $0` " record and playback terminal session." echo "usage: " echo `basename $0` " -r to record" echo `basename $0` " -p to play" fi |
Dieses muss ausführbar gemacht werden:
chmod +x script.sh
und kann danach über
./script.sh -r DATEINAME
zum Aufnehmen beziehungsweise
./script.sh -p DATEINAME
zum Abspielen genutzt werden.
Links¶
Terminal-Sessions und Log-Dateien unter Linux protokollieren 🇩🇪
Shell/Befehlsübersicht - Übersicht über verschiedene Shellbefehle