GNU/Linux >> Linux の 問題 >  >> Linux

Linux ですべてのシェル コマンドをログに記録する方法

質問 :シェル コマンド履歴を Syslog にリダイレクトする方法は?

これを行うにはいくつかの方法があります。以下の 3 つの方法のいずれかを試すことができます:

方法 1 – rsyslog サービス経由

rsyslog を使用してすべてのシェル コマンドをログに記録するには、次の手順に従ってください:

1. 新しい rsyslog 構成ファイルを作成し、ログ ファイルのパスを定義します。例:/var/log/commands.log .

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

2. ユーザーの ~/bashrc を編集します .注:このようなログが必要なすべてのユーザーの ~/bashrc を編集する必要があります。

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

例:

[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. rsyslog サービスを再起動します

# systemctl restart rsyslog

すべて完了。以下のログ形式の例を参照してください:

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

方法 2 – bash シェル オプション経由

1.「shopt -s syslog_history」を追加します ‘ システム全体のスタートアップ /etc/profile または個人の初期化ファイル ~/.bash_profile に。例:

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

2. ログアウトしてから再度ログインして、このオプションを反映してください。

3. ログの例:

[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

方法 3 – スクリプト コマンド経由

さらに、単一の端末セッションのみをログに記録したい場合は、以下のように「スクリプト」コマンドを試してみてください。これも使いやすく、非常に役立ちます。

1. ロギングを開始するには、以下を実行してください:

# script /tmp/screen.log

2. これで、bash コマンドを開始できます。終了したら、終了できます:

# exit

次に、すべてのセッションをファイル /tmp/screen.log に保存します

3. 出力を確認します:

# cat /tmp/screen.log

例:

[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. 入力したすべてのコマンドをログに記録するにはどうすればよいですか?

  2. Linuxでシェルを変更する方法

  3. Linux で制限付き Bash シェルを構成する方法

  1. LinuxでSuコマンドを使用する方法

  2. Linuxでアプリケーションによるメモリ使用量を制限するには?

  3. ユーザーが実行したすべてのコマンドをログに記録するにはどうすればよいですか?

  1. X秒ごとにLinuxコマンドを実行または繰り返す方法

  2. Linux でシェル エイリアスを使用する方法

  3. Linux でコマンド ライン シェル関数を使用する方法