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

So protokollieren Sie jeden Shell-Befehl in Linux

Frage :Wie kann ich den Verlauf der Shell-Befehle auf Syslog umleiten?

Dazu gibt es mehrere Methoden. Sie können es mit einer der drei folgenden Methoden versuchen:

Methode 1 – über den rsyslog-Dienst

Um rsyslog zum Protokollieren aller Shell-Befehle zu verwenden, befolgen Sie einfach die folgenden Schritte:

1. Erstellen Sie eine neue rsyslog-Konfigurationsdatei und definieren Sie den Protokolldateipfad. Beispiel:/var/log/commands.log .

# vi /etc/rsyslog.d/bash.conf
local6.* /var/log/commands.log

2. Bearbeiten Sie ~/bashrc des Benutzers . Hinweis:Sie müssen das ~/bashrc jedes einzelnen Benutzers bearbeiten, der solche Protokolle benötigt.

# vi ~/.bashrc
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]"'

Zum Beispiel:

[root@hostname ~]# cat ~/.bashrc | tail -n2
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]"'
[root@hostname ~]#

3. Starten Sie den rsyslog-Dienst neu

# systemctl restart rsyslog

Alles erledigt. Siehe das Beispiel für das Protokollformat unten:

[root@hostname ~]# date
Thu Apr 9 00:26:11 EDT 2020
[root@hostname ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@hostname ~]# tail -2 /var/log/commands.log
Apr 9 00:26:11 hostname root: [email protected] [1643]: date [0]
Apr 9 00:26:18 hostname root: [email protected] [1643]: cat /etc/redhat-release [0]
[root@hostname ~]# 

Methode 2 – über Bash-Shell-Option

1. Fügen Sie „shopt -s syslog_history“ hinzu ‘ in die systemweite Startdatei /etc/profile oder die persönliche Initialisierungsdatei ~/.bash_profile. Zum Beispiel:

[root@hostname ~]# cat /etc/profile | grep shopt
shopt -s syslog_history

2. Melden Sie sich ab und wieder an, um diese Option wiederzugeben.

3. Protokollbeispiel:

[root@hostname ~]# pwd
/root
[root@hostname ~]# date
Thu Apr 9 01:26:46 EDT 2020
[root@hostname ~]# tail -2 /var/log/messages
Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date
Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages
[bob@hostname ~]$ tail -f /var/log/messages
Apr 9 01:26:45 hostname -bash: HISTORY: PID=1345 UID=0 pwd
Apr 9 01:26:46 hostname -bash: HISTORY: PID=1345 UID=0 date
Apr 9 01:26:52 hostname -bash: HISTORY: PID=1345 UID=0 tail -2 /var/log/messages

Methode 3 – per Skriptbefehl

Wenn Sie nur eine einzelne Terminalsitzung protokollieren möchten, versuchen Sie es einfach mit dem Befehl „script“ wie unten, er ist ebenfalls einfach zu verwenden und sehr hilfreich.

1. Um mit der Protokollierung zu beginnen, führen Sie einfach Folgendes aus:

# script /tmp/screen.log

2. Jetzt können Sie Ihre Bash-Befehle starten. Sobald Sie fertig sind, können Sie beenden:

# exit

Es speichert dann die gesamte Sitzung in einer Datei /tmp/screen.log

3. Überprüfen Sie die Ausgaben:

# cat /tmp/screen.log

Zum Beispiel:

[root@hostname ~]# script /tmp/screen.log
Script started, file is /tmp/screen.log
[root@hostname ~]# date
Thu Apr 9 00:28:26 EDT 2020
[root@hostname ~]# whoami
root
[root@hostname ~]# exit
exit
Script done, file is /tmp/screen.log
[root@hostname ~]# cat /tmp/screen.log
Script started on Thu 09 Apr 2020 12:28:23 AM EDT
[root@hostname ~]# date
Thu Apr 9 00:28:26 EDT 2020
[root@hostname ~]# whoami
root
[root@hostname ~]# exit
exit
Script done on Thu 09 Apr 2020 12:28:42 AM EDT
[root@hostname ~]#


Linux
  1. So führen Sie einen Linux-Befehl für immer alle X Sekunden aus oder wiederholen ihn

  2. So konfigurieren Sie eine eingeschränkte Bash-Shell unter Linux

  3. So verwenden Sie Shell-Aliase unter Linux

  4. So verwenden Sie Befehlszeilen-Shell-Funktionen in Linux

  5. Wie kann die Speichernutzung nach Anwendung in Linux begrenzt werden?

So entfernen Sie ein Verzeichnis in Linux

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

Quellbefehl unter Linux

So führen Sie für immer alle X Sekunden einen Linux-Befehl aus

So speichern Sie einen Linux-Befehl als Variable im Shell-Skript

So verwenden Sie den Declare-Befehl in der Linux Bash Shell