[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor verwenden] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Das Paket [packages:bsdutils:] enthält die Basiswerkzeuge aus [wikipedia:Berkeley_Software_Distribution:4.4BSD-Lite]. Enthalten sind die Programme `logger, renice, script, scriptreplay` und `wall`. Wer alle Werkzeuge aus BSD braucht, kann zusätzlich [packages:bsdmainutils:] installieren. Neben der folgenden Kurzbeschreibungen liefern die [:man: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 [:Logdateien: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]: {{{#!vorlage Befehl tail -f /var/log/syslog }}} und sendet dann in einem anderen Terminal eine Mitteilung: {{{#!vorlage Befehl logger "Hallo, System-Log :)" }}} == wall == `wall` steht für "'''w'''rite 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 {{{#!vorlage Befehl wall }}} und gibt danach seine Mitteilung ein. Abgesendet wird diese durch die Tastenkombination [[Vorlage(Tasten, Strg+D)]]. Möchte man den Inhalt einer Datei als Mitteilung nutzen, verwendet man [:Shell/Umleitungen#Umleitung-der-Eingabe-mit:eine Eingabeumleitung]: {{{#!vorlage Befehl wall < DATEINAME }}} Mit dem Befehl `mesg` kann eingestellt werden, ob Mitteilungen empfangen werden. {{{#!vorlage Befehl mesg }}} gibt den aktuellen Status aus. {{{#!vorlage Befehl mesg y }}} ermöglicht es, Mitteilungen zu empfangen. {{{#!vorlage Befehl mesg n }}} stellt Mitteilungen von anderen Benutzern ab. Mitteilungen vom Benutzer '''root''' werden trotzdem empfangen. == renice == Der Befehl [:nice: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]: {{{#!vorlage Befehl script }}} Aufgezeichnet wird in die Datei '''typescript''', eine ggf. vorher schon vorhandene gleichnamige Datei wird aber überschrieben! Beendet wird die Aufzeichnung mittels der Tastenkombination [[Vorlage(Tasten, Strg+D)]] bzw. der Eingabe von {{{#!vorlage Befehl exit }}} Möchte man die Ausgabe an eine bereits existierende typescript-Datei anhängen, muss man `script` mit der Option `-a` aufrufen: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl script DATEINAME }}} bzw. {{{#!vorlage Befehl 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 [man:col:], das eine weitere Datei (in diesem Beispiel '''cleanedfile''') erzeugt, fast gänzlich säubern: {{{#!vorlage Befehl col -bx cleanedfile }}} Zum Lesen der Log-Dateien – besonders der ungesäuberten – eignet sich der Pager [:less:], bei sehr kurzen Dateien kann man auch [:cat:] verwenden: {{{#!vorlage Befehl 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ü ([[Vorlage(Tasten, rmt)]] 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: {{{#!vorlage Befehl 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 [[Vorlage(Tasten, Strg+D)]] bzw. der Eingabe von {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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`: {{{#!vorlage Befehl scriptreplay timingfile video }}} Um die beiden Dateien in eine gemeinsame zu packen, kann man sich mit einem Skript von Hean Kuang Ong behelfen: {{{#!code bash #!/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: {{{#!vorlage Befehl chmod +x script.sh }}} und kann danach über {{{#!vorlage Befehl ./script.sh -r DATEINAME }}} zum Aufnehmen beziehungsweise {{{#!vorlage Befehl ./script.sh -p DATEINAME }}} zum Abspielen genutzt werden. = Links = * [http://www.zdnet.de/39153802/log-dateien-unter-linux-protokollieren/ Terminal-Sessions und Log-Dateien unter Linux protokollieren] {de} * [:Shell/Befehlsübersicht:] - Übersicht über verschiedene Shellbefehle #tag: System, Shell