3

linux 实时记录用户执行的命令

 2 years ago
source link: https://blog.51cto.com/u_13236892/5702054
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

linux 实时记录用户执行的命令

精选 原创

Linux是一种支持多用户操作的OS, 经常OS文件做出了一些更改,但是无从查起是谁,是什么时候做的修改。其实Linux下可以借助​​PROMPT_COMMAND​​这个环境变量实现这一功能,环境变量​​PROMPT_COMMAND​​记录了用户操作终端命令提示符出现前执行的命令。

在/etc/profile中添加如下内容
export HISTFILE="/var/log/$(date '+%F').his" #定义保存的命令日志文件
export HISTTIMEFORMAT='%F %T ' #定义命令日志格式
export PROMPT_COMMAND='user=$(who am i | sed "s/[ ][ ]*/ /g"); history 1 | { read x date time cmd; echo "${date} \
${time} ${user} ${cmd}"; } >> $HISTFILE' #主要的功能实现

HISTFILE定义了要保存的命令日志文件名格式,这里是按照当天的日期命名,同一天会记录在一个文件中。
HISTTIMEFORMAT这个是系统环境变量,主要是记录命令执行的时间格式,支持的格式可以参考date命令的日期时间格式。
PROMPT_COMMAND中,user=$(who am i | sed "s/[ ][ ]*/ /g")用于获取当前登陆的用户名,这里不用whoami是有原因的,一直返回空;
history 1用于获取上一条终端执行命令;read x date time cmd; echo "${date} ${time} ${user} ${cmd}";获取前一个的输出作为标
准输入,通过read块处理功能,分割为date、time、cmd, 分别对应日期,时间,和执行的命令。剩下的就是输出附加到日志记录文件。
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK