Linux下使用script命令记录终端操作显示

1,695 阅读3分钟

script命令在大部分Linux发行版中都是默认安装的,script能够将终端会话过程中用户所有操作和已输出到屏幕的内容全部录制下来,然后使用scriptreplay可以将其录制的结果播放给人观看。

录播屏幕

录制屏幕内容

在终端输入如下命令,其中time.filescriptfile两个文件名均可自定义。

# script -t 2>time.file -a scriptfile
Script started, file is scriptfile

执行完此命令后,script将会记录接来下的所有操作及终端显示。

  • time.file为时序记录文件,记录的是在第几秒执行的命令。
# head -n 10 time.file
0.042361 61
0.011081 1
2.512045 1
0.130340 1
0.149805 1
0.377275 1
0.321984 2
0.421013 118
0.001619 53
0.000159 1
  • scriptfile为命令执行记录文件,记录执行的是哪些命令。
# head -n 10 scriptfile
脚本启动于 2019年09月28日 星期六 16时38分20秒
[root@ha-node01 script]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 9月  28 16:38 scriptfile
-rw-r--r--. 1 root root 0 9月  28 16:38 time.file
[root@ha-node01 script]# top
top - 16:38:29 up  4:15,  3 users,  load average: 0.08, 0.03, 0.05
Tasks: 174 total,   1 running, 173 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.0 us,  3.0 sy,  0.0 ni, 93.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1882256 total,  1365724 free,   191032 used,   325500 buff/cache

静默录制屏幕

使用scrpit命令录制与退出均有相应的提醒,如果我们需要在用户完全不察觉的情况下运行,我们可以使用-q, --quiet参数来使script命令以静默模式运行。

# script -q -t 2>time.file -a scriptfile
#

要停下来只需要按下组合键Ctrl+D或者输入exit命令即可。

# exit

回放屏幕内容

当然,有录制就有播放,回放录制的屏幕时可以使用scriptreplay命令,执行命令时需要跟上对应的时序文件(在前)与命令文件(在后)。

# scriptreplay time.file scriptfile

如果需要调整播放速度(倍数)可以添加-d, -divisor number参数。该参数可以是小数(放慢)。

自动监控用户登陆操作

通过上述命令我们可以手动启动一个script来记录当前终端的一切输入输出显示内容,但是需要我们每次都去手动启动显然不是我们最终想要得到的。

我们可以把相关的操作以脚本的形式写入到/etc/profile中,这样如果有人偷偷登陆了系统,或者有相关人员在远程服务器操作了什么东西都可以自动记录下来,相关的记录日志也可用作平时的操作审计使用。

/etc/profile中添加如下

if [ ! -d /var/log/user-records/ ]
then
mkdir -p /var/log/user-records/
chmod  0777 /var/log/user-records/
chmod +t /var/log/user-records/
fi

if [ ! -d /var/log/user-records/${LOGNAME} ]
then
mkdir -p /var/log/user-records/${LOGNAME}
chmod 0300 /var/log/user-records/${LOGNAME}
fi

script -t -f -q 2>/var/log/user-records/${LOGNAME}/${LOGNAME}-${UID}-`date +%Y%m%d%H%M%S`.time -a /var/log/user-records/${LOGNAME}/${LOGNAME}-${UID}-`date +%Y%m%d%H%M%S`.his
if [ "$SHLVL" = 1 ]; then
   exit
fi

附上视频演示:

IMAGE ALT TEXT