一.命令说明
二.使用说明history命令为bash自带的命令,用户可以通过此命令来查看和管理此用户执行过的命令。每个会话登陆的时候会将HISTFILE中的命令历史记录加载到内存中,每个会话退出时会将内存中的历史记录刷入HISTFILE使用方式后续依次进行说明:
history [n]
数字n表示查看 最新的n条历史命令(总共行数为HISTSIZE变量控制,10000000都可以的)。如果不指定行数则显示当前会话缓存的所有
history -c
history -d N将加载在当前shell内存中命令历史记录清理,同样会等到登出的时候才会写到HISTFILE中。
history -anrw [filename]将内存中数字N指定的行数的命令记录删除。
history -ps arg [arg...][filename]:修改默认的HISTFILE,默认为环境变量HISTFILE所对应的名字;-a:将内存中的命令append到HISTFILE对应的文件;-r:将HISTFILE中的历史记录加载到当前shell会话并作为历史记录;-w:将当前会话中的命令历史记录重写到HISTFILE( 覆盖原有记录);-n:将当前会话启动后HISTFILE中新生成的记录加载到当前会话内存中;
-p:将多个arg分行打印出来,但是不会写入到history内存记录;-s:将多个arg分行写入到history 内存记录
三.相关环境变量
可以将以下环境变量设置到/etc/bashrc中,每个会话登陆的时候都会自动加载。(bashrc中设置这些变量时直接写Var=Content就行,无需写export)
HISTIGNORE(hist-ignore):忽略掉常用的命令(alias),不将他们记录到日志中,冒号为分隔符。
HISTIGNORE="ls *:ll:ls:l:ll *:freq*:cd *:*.log:dl:dc:des:bi:pic:sublime:brackets:open*"
HISTSIZE:表示最多可以存多少条命令(先进先出),可以在/etc/bashrc和~/.bash_profile里面设置(1000000不会报错)。
HISTFILESIZE:表示文件的最大大小,默认也是1000,可以自行设置;
HISTTIMEFORMAT(hist-time-format):记录命令执行的时间格式(存到HISTFILE的为%s的格式),如果不设置此变量HISTFILE文件中将不会记录命令执行的时间戳;
HISTTIMEFORMAT="%F_%T"
HISTFILE:设置历史文件名,默认为~/.bash_history,如果想要另外指定地方可以手工设置;
四.使用技巧HISTFILE="/home/$USER/test_2015
1.每次条命令执行完后立即写入HISTFILE,无需等待退出会话。可以在bashrc中加入以下内容(PROMPT_COMMAND即命令行提示符):
2.为防止会话退出时覆盖其他会话写到HISTFILE的内容,可以在/etc/bashrc中加入以下内容:PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
3.执行历史命令:shopt -s histappend
!N:查看并运行第N条命令;!!:查看并运行上一条命令;!STR:查看以STR打头的命令
五.使用案例
1.在/etc/bashrc中加入以下内容,每年将用户的命令历史保存到/ security/bash_history/$USER下:
##for security log其实,我的初衷是想记录每个会话:执行时间 登陆IP及登录名 所执行的命令。如果哪位大神有好的建议请不吝提出,谢谢!
UIP=`who am i|awk '{print $5}'`
SYEAR=`date +%Y`
shopt -s histappend
if [ -d /security/bash_history/$USER ] ; then
:
else
mkdir -p / security/bash_history/$USER
fi
if [ -e / security/bash_history/$USER/$USER_$SYEAR ] ; then
:
else
touch / security/bash_history/$USER/bashhistory_$SYEAR
fi
HISTFILE="/ security/bash_history/$USER/bashhistory_$SYEAR"
HISTSIZE=100000000
HISTFILESIZE=100000000
HISTTIMEFORMAT="%F_%T "
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"