Wie protokolliere ich alle Ein- und Ausgaben in einer Terminalsitzung?

46

Wie kann ich alle über das Terminal geleisteten Arbeiten protokollieren? Zum Beispiel möchte ich eine Aufzeichnung aller auf der Datenbank durchgeführten Arbeiten über das Terminal.

Ankit
quelle
Dies ist auch in sudo integriert.
Wilhelm Erasmus
Ich habe meine Antwort hinzugefügt, die Sie überprüfen können
Mansur Ali

Antworten:

66

Wenn Sie bereit sind, eine Protokolldatei aufzuzeichnen, geben Sie Folgendes ein:

script screen.log

Bis Sie das Skript anhalten, werden alle Eingaben und Ausgaben im Terminal in screen.log gespeichert. Wenn Sie fertig sind, geben Sie einfach Folgendes ein:

exit

Ihre screen.log-Datei wird im lokalen Verzeichnis gespeichert. Wenn Sie es umleiten möchten, verwenden Sie einen absoluten Pfadnamen wie ~/screen.log. Dies wird genau das tun, wonach Sie suchen.

Quelle: Ubuntu-Handbuch - So protokollieren Sie Terminalbefehle

xlukasx
quelle
Hallo, danke für die Antwort. Funktioniert dies jedoch, wenn ich mich von der Shell aus in die MySQL-Datenbank einlogge und dabei die folgende Reihenfolge befolge: - 1) script screen.log 2) mysql -u <user> -p <database> 3) einige Arbeiten an der Datenbank 4) exit; Ich sehe, dass die Datei screen.log erstellt wurde, aber keine Protokolle für die Datenbank enthält. Ich werde die Datei so schnell wie möglich teilen. Thanks Ankt
Ankit
2
Es sollte mit allem funktionieren, was in der Konsole ausgeführt wird: Lesen von "Standardeingabe" (normalerweise Ihre Tastatur) und Schreiben in die Standardausgabe (normalerweise Ihr Terminalfenster). Es sollte also den mysql-Befehlszeilenclient enthalten. Die Manpage ( man script) erwähnt sogar vi(Editor) ...
Izzy
10

Vielleicht möchten Sie Asciinema ausprobieren . Sie können nicht nur eine Aufzeichnung erstellen, sondern diese auch freigeben und den Player in Ihr Blog, Ihren Artikel oder in ein Konferenzgespräch einbetten.

Sichel
quelle
6

Ich habe eine bessere Möglichkeit, Syslog zum Protokollieren jedes Shell-Befehls zu verwenden. Dies kann je nach Linux-Distribution variieren, aber die Methode bleibt dieselbe

Sie müssen einige Schritte befolgen:

Schritt 1 (Syslog-Dienst erstellen)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

Schritt # 2 (Öffne bashrc und gib den folgenden Befehl ein)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Schritt 3 (Syslog-Dienst neu starten)

# /etc/init.d/rsyslog

Hier ist ein Protokollbeispiel:

7. Dezember 22:13:00 validationdb2 mahasan: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7. Dezember 22:13:09 validationdb2 mahasan: root @ export [13291]: ls -lh [0]
7. Dezember 22:13:27 validationdb2 mahasan: root @ export [13291]: touch test command [0]
Mansur Ali
quelle
freche taktik !!!
Tom H
Hallo Mansur, können Sie mir bitte erklären, was Sie mit diesen Befehlen machen, es ist schwer zu verstehen, zumindest für mich.
Jasser
In Schritt 1 benenne ich einen Dienst für die Befehlsprotokollierung, der vom Prozess zum Senden von Protokollen verwendet wird. "Local6" wäre der Endpunkt für den Dienst für die Protokollierung. In Schritt 2 setze ich Dinge, die ich eigentlich möchte. "PROMPT_COMMAND = 'RETRN_VAL = $? " Dieser Teil zeichnet die Benutzereingaben auf und "logger -p local6.debug" sendet die Protokolldatei an den Dienst, der die Protokolldaten mit Hilfe des Syslog-Prozesses aufzeichnet
Mansur Ali,