优化history历史命令记录并加上执行时间


加入新公司以后,我发现很多的开发与测试服务器的权限放得很开,很多人都有账号,而且不少人还有root权限,因此常常出现一些误操作问题,每次在出现问题的时候他们都会来找我查一下哪个用户在什么时间执行了什么操作导致的问题。
由于Linux默认的history记录仅保存了命令的内容,没有具体的时间,我只能通过查出用户的登录与退出的时间,来给他们一个时间范围。

因此,我们非常有必要对history历史命令的记录功能进行优化,我推荐的参数如下:

编辑/etc/bashrc,添加以下配置信息:

# 文件中的历史命令条数
export HISTFILESIZE=10000000
# 内存中的历史命令条数
export HISTSIZE=10000
# 实时记录历史命令,默认只有在用户退出之后才会统一记录,容易造成多个用户间的相互覆盖。
export PROMPT_COMMAND="history -a"
# 记录每条历史命令的执行时间
export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
# 忽略部分常用的历史命令
export HISTIGNORE="history*:pwd:ls:ll"
# 忽略重复的历史命令
export HISTCONTROL="ignoredups"

使更改立即生效:
# source /etc/bashrc

查看历史命令记录:
# history

即可看到如下图所示的带有执行时间的新格式:

另外,加上一些其它的别名,也能起到一些优化作用。

# User specific aliases and functions
alias rm='rm -i' #删除时确认
alias cp='cp -i' #复制覆盖时确认
alias mv='mv -i' #移动覆盖时确认
alias grep='grep --color=auto' #为grep增加颜色
alias ll='ls -l' #详细信息列表
alias la='ls -A' #带有隐藏文件输出的详细信息列表

如果想暂时取消别名的附加参数功能,比如不经过确认直接删除文件,可以用“\”将命令转义一次再执行,如下所示:

[root@localhost ~]# echo "I am new" > newfile.txt
[root@localhost ~]# echo "I am old" > oldfile.txt
[root@localhost ~]# cp newfile.txt oldfile.txt 
cp: overwrite `oldfile.txt'? no
[root@localhost ~]# cat oldfile.txt 
I am old
[root@localhost ~]# \cp newfile.txt oldfile.txt 
[root@localhost ~]# cat oldfile.txt 
I am new

  1. #1 by 瑞安seo on 2011/09/01 - 10:59

    忍不住留言了,当然也算是灌水感谢一下。版主加油!支持你!最近逛了一些博客,很多都很有创意,不过也有些看来看去好多都是相互转载的文章,没有多少是原创的,看多了也眼睛疲劳了,但是版主你这个博客还可以,终于有点新鲜感。

  2. #2 by it手记 on 2011/09/02 - 23:47

    这个小技巧不错。

  3. #3 by it手记 on 2011/09/12 - 20:26

    无论你已经收到多少问候,我依然献上最诚挚的祝福:祝你和你的家人,中秋节快乐!

  4. #5 by scomd on 2011/09/14 - 16:07

    想增加ip和用户,这个怎么操作呢?

    • #6 by mcsrainbow on 2011/09/15 - 12:46

      history记录的就是当前用户的操作记录,只要按照上面修改了配置文件,那么在每个用户环境下输入history命令就可以看到当前用户所有的操作历史,你所说的IP,这个用last来看所有用户的登陆历史就OK了,在history中记录也没有意义。

(will not be published)
*