GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie protokolliere ich jeden in Bash eingegebenen Befehl und jede Dateioperation?

Ich möchte jeden in Bash eingegebenen Befehl (entweder von Root oder Benutzer) sowie jede Dateioperation protokollieren.

Die Idee ist, dass ich Tools schreiben könnte, die diese Protokolldatei abfragen und sehr nützliche Informationen liefern könnten.

Zum Beispiel wäre es großartig, alle jemals eingegebenen Befehle aufzulisten, einen pro Zeile, mit „- – -“ für 8-24-Stunden-Zeitlücke und „===“, z. 24. Juni 2014 ===” für>24-Stunden-Lücke. Wenn es auch Duplikate innerhalb einer „===…“-Sitzung eliminiert, noch besser!

Das würde bedeuten, dass jedes Mal, wenn ich eine Aufgabe erledige, wie z. B. „Upgrade von Kolben/mod_wsgi/Apache auf Python 3.x“, ein Datensatz zurückbleibt, eine Spur, die ich aufgreifen kann, wenn ich sechs Monate später dasselbe tun muss.

Zum gleichen Zweck wäre es sehr schön zu sehen, welche Dateisystemänderungen nach der Installation eines bestimmten Pakets aufgetreten sind. Das würde mich wissen lassen, wo die Konfigurationsdateien abgelegt wurden.

PS:Ich verwende Ubuntu 14.04

Akzeptierte Antwort:

Dies ist nicht so umfassend wie eine echte Buchhaltung und kann von einem Benutzer leicht rückgängig gemacht werden, aber unter der Annahme, dass es sich nicht um ein echtes Buchhaltungssystem handeln muss und sowohl BASH als auch rsyslog verwendet werden, bearbeiten Sie die systemweite BASH-RC-Datei :

sudo -e /etc/bash.bashrc

An das Ende dieser Datei anhängen:

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'

Oben, logger zeichnet Zeit, Benutzer, Befehl und Befehlsrückgabewert auf. Protokollierung für „local6“ mit einer neuen Datei einrichten:

sudo -e /etc/rsyslog.d/bash.conf

Und der Inhalt…

local6.*    /var/log/bash_commands.log

Starten Sie rsyslog neu:

sudo service rsyslog restart

Ausloggen. Anmelden. Protokollrotation:

sudo -e /etc/logrotate.d/rsyslog

Es gibt eine Liste von Protokolldateien, die auf die gleiche Weise rotiert werden müssen …

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Fügen Sie die neue Protokolldatei für bash-Befehle zu dieser Liste hinzu:

/var/log/bash_commands.log

rsyslog speichern und neu starten/laden. (Die Rotation wird schließlich Protokolldateien überschreiben, daher ist möglicherweise mehr Nachdenken oder Konfiguration erforderlich.)

Um alle Dateien zu sehen, die ein Paket installiert hat:

dpkg-query -L [package_name]

Sie könnten also so etwas ausführen, wenn Sie Software installieren.

dpkg-query -L abc-package > /var/log/files_abc-package.log

Linux
  1. Importieren Sie Funktionen und Variablen mit dem Quellbefehl in Bash

  2. So ändern Sie Berechtigungen und Eigentümer über die Befehlszeile

  3. Wie man den Alias-Befehl in einem Bash-Skript oder einer Bashrc-Datei zum Laufen bringt

  4. Wie sortiere ich Dateien in Ordnern nach Dateityp auf Bash (mit dem Befehl ‚file‘)?

  5. Wie protokolliere ich jeden von einem Benutzer ausgeführten Befehl?

So verwenden Sie Sudo und die Sudoers-Datei

So lesen Sie eine Datei Zeile für Zeile in Bash

So verschieben Sie Dateien und Verzeichnisse in Linux (mv-Befehl)

Bash-Quellbefehl

Bash Exit-Befehl und Exit-Codes

Wie Echo in Datei