说明
本文总结在 Linux 服务器上进行操作时,获取操作日志的方法。
主要利用的命令有以下两种:
history
script
history
显示当前用户在命令行上的操作履历
1 2 3 4 5 6 7 8 9 10 11 12
| $ history 1 ls 2 env 3 history 4 ls -la 5 ls -la 6 vim .bashrc 7 zsh 8 exit 9 lsblk 10 hostname …
|
增加参数的话,可以查看最新的履历
1 2 3 4 5 6
| $ history 5 349 cat hoge.log 350 ls 351 hostname 352 history 353 history 5
|
保存的最大履历数量可以通过设置 .bash_profile 或 .bashrc 内的变量来进行调整
使用 HISTTIMEFORMAT 设置输出的时间显示格式
1
| HISTTIMEFORMAT=%Y/%m/%d %H:%M:%S
|
显示结果:
1 2 3 4 5 6 7 8 9 10 11 12
| $ history 1 2015/06/24 09:45:26 ls 2 2015/06/24 09:45:26 env 3 2015/06/24 09:45:26 history 4 2015/06/24 09:45:26 ls -la 5 2015/06/24 09:45:26 ls -la 6 2015/06/24 09:45:26 vim .bashrc 7 2015/06/24 09:45:26 zsh 8 2015/06/24 09:45:26 exit 9 2015/06/24 09:45:26 lsblk 10 2015/06/24 09:45:26 hostname …
|
忽略特定命令:
1 2
| #hostname,ls命令将不会保留在履历中 HISTIGNORE=hostname:ls
|
script
由于history
只是单纯的显示命令履历,并不能够对输出的结果进行确认。
当需要对输出的命令结果进行确认时,可以使用script
命令。
script
命令的参数为输出对象的路径。
script
命令执行之后命令及输出结果将会写入输出对象文件直至exit
命令被执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ script /tmp/test.log # script 命令开始,输出对象为/tmp/test.log $ hostname server01 $ pwd /home/user01 $ history | grep hostname 309 2015/06/24 11:51:52 hostname 415 2015/06/24 11:23:52 hostname 428 2015/06/24 11:52:05 history | grep hostname $ date 2015年 6月 24日 水曜日 11:52:13 JST $ exit exit # 输出命令结束
|
确认输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ cat /tmp/test.log
$ hostname server01 $ pwd /home/user01 $ history | grep hostname 309 2015/06/24 11:51:52 hostname 415 2015/06/24 11:23:52 hostname 428 2015/06/24 11:52:05 history | grep hostname $ date 2015年 6月 24日 水曜日 11:52:13 JST $ exit exit
|
当需要对同一文件进行追加输入时,可以附带 -a
选项
自动取得操作日
对 .bash_profile
进行编辑,使用户登录时自动执行 script
命令
1 2 3 4 5
| # 用户登录时对指定文件夹输出日志 # ${log_archive_directory}为任意指定文件夹 # 日志按用户登录时间和用户名进行分类
script ${log_archive_directory}/$(date +%Y%m%d_%H%M%S)_$(whoami).log
|
有一点需要注意的是,script
命令默认情况下并非同步输出文件,因此在需要进行同步输出的情况下,可以追加 -f
选项
1
| script -f ${log_archive_directory}/$(date +%Y%m%d_%H%M%S)_$(whoami).log
|