コマンドの実行履歴

作業記録のために調べたけど,ぐぐると侵入検知関連で色々引っかかる.

lastcomm

BSD Process Accounting という機能らしい.Gentoo では sys-process/acct というパッケージだった.

# emerge -av acct
# lastcomm
couldn't open file '/var/account/pacct': No such file or directory
# /etc/init.d/acct start
 * Caching service dependencies ...                                       [ ok ]
 * Starting accounting ...
accton: Function not implemented                                          [ !! ]
# vi /usr/src/linux/.config
 # CONFIG_BSD_PROCESS_ACCT is not set

カーネルで当該機能が有効になっている必要があるらしい.

# cd /usr/src/linux
# make menuconfig
 General setup -> BSD Process Accounting
 General setup -> BSD Process Accounting version 3 file format
# mount /boot
# make && make install
# shutdown -r now
# /etc/init.d/acct start
 * Starting accounting ...                                                [ ok ]
# rc-update add acct default
 * acct added to runlevel default

シェルから起動したコマンドだけでなく,コマンドから連鎖的に起動されたコマンドも記録されるため,作業記録という意味では冗長な情報が多い.

HISTTIMEFORMAT

Bash 3 系列だと

export HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S : "

などとすると .bash_history にコマンドの実行時間が記録されるらしい.加えて

export HISTSIZE=1000000
export HISTFILESIZE=1000000

などとして保存行数を増やしておけば当面は大丈夫.Gentoo はデフォルトで Bash 3 だったので問題ない.

script

作業記録という意味では,実行したコマンドだけでなく画面の出力も記録される script の方がよさそう.ただ,手動では実行し忘れてしまうので,/etc/profile や ~/.bash_profile の末尾に

script ~/.script/typescript-`date +%Y%m%d%H%M%S`; exit

と書いておくとよい.後で vi などで開いて制御文字がうざいときは less -R などで.