LINUX用户登录后精确命令记录(history 按时间、用户显示命令记录)
# 设置保存历史命令的文件大小
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后面就可以了
vim /etc/profile
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
没有评论