LINUX用户登录后精确命令记录(history 按时间、用户显示命令记录)

2016年9月27日

精确的记录 每个用户的操作记录

# 设置保存历史命令的文件大小
export HISTFILESIZE=10000000

# 保存历史命令条数
export HISTSIZE=1000000

# 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。
export PROMPT_COMMAND="history -a"

# 记录每条历史命令的执行时间
export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
备:%Y:4位数的年份;%m:2位数的月份数;%d:2位数的一个月中的日期数;%H:2位数的小时数(24小时制);%M:2位数的分钟数;%S:2位数的秒数

如果仅仅是在原来的基础上加上时间 那么那上述几个变量加到 /root/.bash_history 重载便可以了。

下面是我从网上找的一个脚本修改成我想要的方式 按照不同的用户 再已 年月日 划分

主要功能:
可以记录哪个ip和时间(精确到秒)作了哪些命令
通过用户登录时候,重新定义HISTFILE
HISTFILE文件名包含登录用户名,ip,登录时间(精确到秒)等
这样即使相同的用户从不同ip、在不同的时间登录都会被记录
可以记录每条命令的开始执行时间
把下面的代码直接粘贴到/etc/profile后面就可以了

可以将下面的脚本直接写到 /etc/profile , 也可以另已一个文件的形式在 /etc/profile 中加载。

vim /etc/profile 在/etc/profile 最后加上下面的几行
  1. #### hist
  2. if [ -f /etc/bash.hist ]; then
  3. . /etc/bash.hist
  4. fi
  5. ## 由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式:
  6. shopt -s histappend
cat /etc/bash.hist
  1. export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] [`whoami`] "
  2. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
  3. if [ "$USER_IP" = "" ]
  4. then
  5. USER_IP=`hostname`
  6. fi
  7. #目录名称 确立
  8. #年
  9. YEAR=`date +%Y`
  10. #月
  11. MONTH=`date +%m`
  12. #日
  13. DAY=`date +%d`
  14. #history 存放目录 自定义
  15. TMP_HISTORY_DIR=/tmp/history
  16. #年月日 组合
  17. TMP_HISTORY_DIR_DATE=$YEAR/$MONTH/$DAY
  18. #history 按照 不同用户并已年月日为目录的路径
  19. TMP_HISTORY_DIR_URL=$TMP_HISTORY_DIR/${LOGNAME}/$TMP_HISTORY_DIR_DATE
  20. #检查 history 存放目录 是否存在 不存在则创建
  21. if [ ! -d $TMP_HISTORY_DIR ]
  22. then
  23. mkdir $TMP_HISTORY_DIR
  24. chmod 777 $TMP_HISTORY_DIR
  25. fi
  26. #检查最终存储的路径是否则在 不存在则创建 这里是多级目录
  27. if [ ! -d $TMP_HISTORY_DIR_URL ]
  28. then
  29. mkdir -p $TMP_HISTORY_DIR_URL
  30. chmod -R 300 $TMP_HISTORY_DIR/${LOGNAME}/
  31. fi
  32. # 设置保存历史命令的文件大小
  33. export HISTFILESIZE=10240
  34. # 保存历史命令条数
  35. export HISTSIZE=1000000
  36. # 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。
  37. export PROMPT_COMMAND="history -a"
  38. #export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP}-history.$DT"
  39. #定义 history 日志的位置
  40. export HISTFILE="$TMP_HISTORY_DIR_URL/${USER_IP}-history"
  41. #更改 权限
  42. chmod 600 $TMP_HISTORY_DIR_URL/*history* 2>/dev/null
  43. #导出非时间戳的格式 另存为 , history 记录时间是已时间戳来记录的 看起来比较麻烦
  44. #此处有一个严重缺点 他不会自动执行 , 只有自己手动完成 在退出 ssh 之前 , source /etc/profile
  45. #history >> $TMP_HISTORY_DIR_URL/${USER_IP}-history-detail

没有评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注