コマンドの実行ログの取得方法(historyコマンド)

〇historyコマンド

ユーザが過去に実行したコマンドを古いものから順番に表示する。

 

$history

1 cat file2
2 cat file1
3 cat file1 file2 > file4

同じコマンドを連続で実行した場合、そのコマンドは1回しか記録されないのでシェル変数を変更する必要がある。

$unset HISTCONTROL

また、記録をしないコマンドを指定する場合以下のようにシェル変数を設定する。

例)historyコマンド,scriptコマンドを指定する

$HISTIGNORE=histroy:script *

時間の記録も可能である。しかし、時間の記録を開始する前に実行したコマンドはユーザがログインした時間が記録される。以下の%Fは年月日、%T時分秒を示す。

$HISTTIMEFORMAT=' %F %T '

$history

1 2016-09-22 22:35:30 script s.txt
2 2016-09-22 22:35:42 history
3 2016-09-22 22:36:08 HISTIGNORE='script *'
4 2016-09-22 22:36:25 history
5 2016-09-22 22:39:30 HISTTIMEFORMAT='%F %T '
6 2016-09-22 22:39:32 history

記録できる履歴数は以下のようにHISTSIZEで変更できる。例えば履歴数は1000件とする場合は、

$HISTSIZE=1000

しかし、このように設定しても一度ログアウトして再度ログインした時は設定した内容が元に戻ってしまう。そこで~/.bashrcに以下の赤文字の内容を追記する。

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
unset HISTCONTROL
HISTTIMEFORMAT=' %F %T '
# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=10000
HISTFILESIZE=2000

すると、再度ログインし直ししても設定の内容は保持されている。

 

<参考>

[技術ブログvol.1] historyコマンドでお手軽操作ログを取る | 技術情報ブログ | マネージドホスティングのディーネット

[備忘録] Linuxでコマンド履歴やコマンドの出力をログとして保存する。 - Qiita