ubuntuusers.de

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:

Wiki/Icons/terminal.png 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 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.

Diese Revision wurde am 13. April 2020 13:47 von rklm erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell, System