一 操作环境
操作环境为centos 8.1 或着其他linux 发行版;
二 具体步骤
在/etc/profile 中添加如下内容
export PROMPT_COMMAND=__set_prompt
readonly PROMPT_COMMAND
__set_prompt () {
local EXIT=$?
if [ ! -d /var/log/cmd ]
then
mkdir /var/log/cmd
if [ `id -u` -eq 0 ]
then
chattr +a /var/log/cmd
fi
fi
log_file=/var/log/cmd/`date '+%y-%m-%d'`.log
if [ ! -f $log_file ]
then
touch $log_file
chmod 777 $log_file
chattr +a $log_file
fi
echo "$(date '+%y-%m-%d %T') == $(who am i | awk "{print \$1\" \"\$2\" \"\$5}") == $(pwd) == $(history 1 | sed 's/^[ \t]*//g' | cut -d " " -f2-) == [$EXIT]" >>$log_file
return $EXIT
}
然后执行 source /etc/profile
如果以前设置过 PROMPT_COMMAND 最好重启下系统;
效果如下:
20-03-14 20:43:01 == root pts/1 (192.168.199.219) == /root == source /etc/profile == [0]
20-03-14 20:43:06 == root pts/1 (192.168.199.219) == /root == nihao == [127]
20-03-14 20:43:08 == root pts/1 (192.168.199.219) == /root == df == [0]
20-03-14 20:43:09 == root pts/1 (192.168.199.219) == /root == ttt == [127]
[root@localhost ~]# date
Sat Mar 14 20:43:40 EDT 2020
PROMPT_COMMAND 解释参考 man bash
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.