精确的记录 每个用户的操作记录
# 设置保存历史命令的文件大小
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 最后加上下面的几行
- #### hist
- if [ -f /etc/bash.hist ]; then
- . /etc/bash.hist
- fi
- ## 由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式:
- shopt -s histappend
cat /etc/bash.hist
- export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] [`whoami`] "
- USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
- if [ "$USER_IP" = "" ]
- then
- USER_IP=`hostname`
- fi
- #目录名称 确立
- #年
- YEAR=`date +%Y`
- #月
- MONTH=`date +%m`
- #日
- DAY=`date +%d`
- #history 存放目录 自定义
- TMP_HISTORY_DIR=/tmp/history
- #年月日 组合
- TMP_HISTORY_DIR_DATE=$YEAR/$MONTH/$DAY
- #history 按照 不同用户并已年月日为目录的路径
- TMP_HISTORY_DIR_URL=$TMP_HISTORY_DIR/${LOGNAME}/$TMP_HISTORY_DIR_DATE
- #检查 history 存放目录 是否存在 不存在则创建
- if [ ! -d $TMP_HISTORY_DIR ]
- then
- mkdir $TMP_HISTORY_DIR
- chmod 777 $TMP_HISTORY_DIR
- fi
- #检查最终存储的路径是否则在 不存在则创建 这里是多级目录
- if [ ! -d $TMP_HISTORY_DIR_URL ]
- then
- mkdir -p $TMP_HISTORY_DIR_URL
- chmod -R 300 $TMP_HISTORY_DIR/${LOGNAME}/
- fi
- # 设置保存历史命令的文件大小
- export HISTFILESIZE=10240
- # 保存历史命令条数
- export HISTSIZE=1000000
- # 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。
- export PROMPT_COMMAND="history -a"
- #export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP}-history.$DT"
- #定义 history 日志的位置
- export HISTFILE="$TMP_HISTORY_DIR_URL/${USER_IP}-history"
- #更改 权限
- chmod 600 $TMP_HISTORY_DIR_URL/*history* 2>/dev/null
- #导出非时间戳的格式 另存为 , history 记录时间是已时间戳来记录的 看起来比较麻烦
- #此处有一个严重缺点 他不会自动执行 , 只有自己手动完成 在退出 ssh 之前 , source /etc/profile
- #history >> $TMP_HISTORY_DIR_URL/${USER_IP}-history-detail
没有评论