GNU/Linux >> Znalost Linux >  >> Linux

Jak zaznamenat každý příkaz shellu v Linuxu

Otázka :Jak přesměrovat historii příkazů shellu na Syslog?

Existuje několik metod, jak to udělat. Můžete zkusit kteroukoli ze 3 níže uvedených metod:

Metoda 1 – prostřednictvím služby rsyslog

Chcete-li použít rsyslog pro protokolování každého příkazu shellu, postupujte podle následujících kroků:

1. Vytvořte nový konfigurační soubor rsyslog a definujte cestu k souboru protokolu. Například:/var/log/commands.log .

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

2. Upravte ~/bashrc uživatele . Poznámka:Musíte upravit ~/bashrc každého uživatele, kdo takové protokoly potřebuje.

# 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]"'

Například:

[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. Restartujte službu rsyslog

# systemctl restart rsyslog

Vše hotovo. Viz příklad formátu protokolu níže:

[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 ~]# 

Metoda 2 – prostřednictvím možnosti bash shell

1. Přidejte „shopt -s syslog_history do celého systému /etc/profile nebo osobního inicializačního souboru ~/.bash_profile. Například:

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

2. Odhlaste se a znovu se přihlaste, abyste tuto možnost viděli.

3. Příklad protokolu:

[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

Metoda 3 – pomocí příkazu skriptu

Kromě toho, pokud chcete zaznamenat pouze jednu relaci terminálu, vyzkoušejte příkaz „script“, jak je uvedeno níže, je také snadno použitelný a velmi užitečný.

1. Chcete-li zahájit protokolování, stačí spustit:

# script /tmp/screen.log

2. Nyní můžete spustit příkazy bash. Po dokončení můžete opustit:

# exit

Poté uloží celou relaci do souboru /tmp/screen.log

3. Ověřte výstupy:

# cat /tmp/screen.log

Například:

[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. Jak spustit nebo opakovat příkaz Linuxu každých X sekund navždy

  2. Jak změnit Shell v Linuxu

  3. Jak používat aliasy shellu v Linuxu

  1. Jak používat Su Command v Linuxu

  2. Jak používat funkce shellu příkazového řádku v Linuxu

  3. Jak vytisknout výstup příkazu Linuxu do souboru?

  1. Jak zaznamenáte každý zadaný příkaz?

  2. Jak nakonfigurovat omezený Bash Shell v Linuxu

  3. Jak najdu svou verzi shellu pomocí příkazu Linux?