【Linux】获取 Unix 操作日志

说明

本文总结在 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 内的变量来进行调整

1
HISTSIZE=1000

使用 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
2015624日 水曜日 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
2015624日 水曜日 11:52:13 JST
$ exit
exit

当需要对同一文件进行追加输入时,可以附带 -a 选项

1
script -a /tmp/test.log

自动取得操作日

.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
Yunjie Zhang wechat
扫一扫上面的二维码加我微信