Linux下使用script命令記錄終端操作顯示

akiya發表於2019-09-29

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

相關文章