GNU/Linux >> Tutoriels Linux >  >> Linux

Comment enregistrer chaque commande shell sous Linux

Question :Comment rediriger l'historique des commandes shell vers Syslog ?

Il existe plusieurs méthodes pour le faire. Vous pouvez essayer l'une des 3 méthodes ci-dessous :

Méthode 1 - via le service rsyslog

Pour utiliser rsyslog pour enregistrer chaque commande shell, suivez simplement les étapes ci-dessous :

1. Créez un nouveau fichier de configuration rsyslog et définissez le chemin du fichier journal. Par exemple :/var/log/commands.log .

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

2. Modifiez le ~/bashrc de l'utilisateur . Remarque :vous devez modifier le ~/bashrc de chaque utilisateur qui a besoin de ces journaux.

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

Par exemple :

[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. Redémarrez le service rsyslog

# systemctl restart rsyslog

Terminé. Voir l'exemple de format de journal ci-dessous :

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

Méthode 2 - via l'option shell bash

1. Ajoutez ‘shopt -s syslog_history ' dans le fichier de démarrage /etc/profile à l'échelle du système ou dans le fichier d'initialisation personnel ~/.bash_profile. Par exemple :

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

2. Déconnectez-vous et reconnectez-vous pour appliquer cette option.

3. Exemple de journal :

[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

Méthode 3 - via la commande de script

De plus, si vous ne souhaitez enregistrer qu'une seule session de terminal, essayez simplement la commande "script" comme ci-dessous, elle est également facile à utiliser et très utile.

1. Pour commencer la journalisation, exécutez simplement :

# script /tmp/screen.log

2. Vous pouvez maintenant lancer vos commandes bash. Une fois terminé, vous pouvez quitter :

# exit

Il enregistrera alors toute la session dans un fichier /tmp/screen.log

3. Vérifiez les sorties :

# cat /tmp/screen.log

Par exemple :

[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. Comment exécuter ou répéter une commande Linux toutes les X secondes pour toujours

  2. Comment configurer le shell bash restreint sous Linux

  3. Comment utiliser les fonctions du shell de ligne de commande sous Linux

  4. Comment imprimer la sortie de la commande Linux dans un fichier ?

  5. Comment enregistrer chaque commande exécutée par un utilisateur ?

Comment supprimer un répertoire sous Linux

Comment exécuter une commande / un script Linux Shell en arrière-plan

Commande source sous Linux

Comment exécuter une commande Linux toutes les X secondes pour toujours

Comment stocker une commande Linux en tant que variable dans un script shell

Comment utiliser la commande Declare dans Linux Bash Shell