在服务器运维的时候,通常一个很重要的步骤的是需要记录history,因为一旦服务器发生异常的时候,可以通过history查看是不是误操作,或者其他原因。
history记录了在一段时间内终端输入的命令,该命令是linux默认安装的程序,形如:
tangs@ubuntu:~$ history
1 ls -all
2 history
3 vim ~/.bash_logout
4 ls
5 history
tangs@ubuntu:~$
history会在用户退出时才将操作历史写入 ~/.bash_history
,所以原数据可以在文件中查看,如果需要立马写入可以执行
history -w
保存历史记录文件是可以通过HISTFILE指定的,可以在 ~/.bashrc
中指定,执行如下命令可以指定文件保存路径
echo HISTFILE=/path/your_path >> ~/.bashrc && source ~/.bashrc
同时,history提供一个HISTSIZE的变量,用于history历史记录长度的指定,ubuntu 16.4TLS默认长度为1000,其他linux like版本可能也是1000吧,可以利用如下查看:
tangs@ubuntu:~$ echo $HISTSIZE
1000
tangs@ubuntu:~$
同理,也可以修改HISTSIZE的大小来改变历史记录的长度。
history还提供了一个HISTTIMEFORMAT的变量,该变量指定了一个时间格式,也可以认为每条命令记录了执行的时间,同时还可以利用这个这边添加前缀信息,比如执行该条命令的用户名,比如可以在~/.bashrc
中添加:
HISTTIMEFORMAT="$USER %F %T : "
结果就形如
1 tangs 2019-02-11 03:39:21 : ls -all
2 tangs 2019-02-11 03:39:21 : history
3 tangs 2019-02-11 03:39:21 : vim ~/.bash_logout
4 tangs 2019-02-11 03:39:21 : ls
5 tangs 2019-02-11 03:39:21 : history
6 tangs 2019-02-11 03:39:21 : vim ~/.bashrc
7 tangs 2019-02-11 03:39:21 : source ~/.bashrc
8 tangs 2019-02-11 03:39:21 : history
9 tangs 2019-02-11 03:39:24 : ls
这样就记录了每条命令的时间,同时也利用时间格式,添加了$USER 获得用户名当着前缀。这样做的目的是,当我们要查看所有用户操作历史时,可以遍历每个用户下的操作记录,合并写入一个文件,这时候通过前缀,时间,就可以很清晰的还原操作历史。如果有必要还可以通过时间,对所有用户的操作记录排序,还原一段时间内的真实操作记录。
如果服务器有多个用户,每个用户都配置一遍时间,长度等很麻烦,可以直接在/etc/profile
中配置,这样每个用户登录到bash时,都可以得到以上的配置。