來源:程式設計三分鐘
ID:coding3min
作者:小熊愛程式設計
今天看到一個超級叼的linux命令,可以完整記錄螢幕上的命令與輸出結果。
有人問這有什麼叼的,不就是儲存歷史操作記錄嗎?我看看日誌也能看出來。
不不不,我要說的“完整記錄”包括第幾秒執行什麼命令,就像真的有人在操作一樣!放視屏一樣的播放出來,還可以調整播放速度,放慢、加快、想調幾倍速就調幾倍速!
比開通了會員還爽好嗎!
更爽的是自己的伺服器,誰想登陸操作直接就被監視起來,一舉一動看的清清楚楚,是不是很過癮!!
一般來說,這次用到的script
和 scriptreplay
兩個命令在 Linux 發行版中都有預設安裝。
錄播螢幕操作
錄製
script -t 2>time.file -a scriptfile
執行完這個命令,接下來的任何操作都會被記錄。
其中的time.file
是時序記錄檔案,記錄了幾秒執行的命令;scriptfile
是命令執行記錄檔案,記錄下執行是哪些命令,這兩個檔案名稱都可以自定義。
加上-q, - -quiet
引數可以使script命令以靜默樣式執行,不顯示script啟動和exit的命令,使用者可以完全察覺不到在錄屏。
像這樣:
script -q -t 2>time.file -a scriptfile
要停下來,只用按下按下組合鍵 Ctrl+D
結束錄製,執行exit
命令也行。
$ exit
有錄製就有播放,就像錄影片一樣,執行下麵這個命令即可,時序檔案在前,命令檔案在後
scriptreplay time.file scriptfile
新增這個引數-d, –divisor number
可以調整播放速度的倍數(可以是小數:放慢)。
scriptfile
檔案記錄了我每間隔1秒執行一個date命令的操作,現在加速10倍來播放看看效果(可惜有的版本scriptreplay
命令沒有-d
這個引數):
同步演示
-f, - -flush
每次操作後都立即掃清快取。如果不設定這個選項,則不會實時寫入檔案,這個功能
使用端:
script -f demo
演示端:
scriptreplay -f demo
但是很遺憾,可能因為版本問題,我的scriptreplay
沒有-f
引數。
沒關係,因為實時寫入檔案裡的,我們拿出平時看日誌常用的tail -f
命令,直接在演示端tail -f demo
即可
錄製指令碼執行過程
引數-c, - -command
可以直接執行命令,而非是互動式的shell,可以直接傳入一個指令碼,像這樣:
$ script -qa "file.out" -c "/root/hello.sh"
123
234
345
$ cat file.out
Script started on Fri 28 Jun 2019 07:38:55 PM CST
123
234
345
但是我覺得這個功能有點雞肋,只能記錄下輸出不能記錄執行了哪些命令和鹹魚有什麼區別?
不要謊,那讓我們來感受點牛逼的。
自動觸發監控使用者登陸的操作與實時監控
有時候某個人偷偷遠端訪問了你的系統,或者運維人員遠端操作了一些東西,我們可以設定自動記錄下這個人在系統上做了什麼事情,是誰闖的禍,該誰背的鍋,一目瞭然!
這個時候就只要讓script
命令在登入時自動執行,我們可以把它新增進shell環境配置檔案中。
這樣在出現什麼誤操作之後,就可以在排查的時候查到歷史記錄。
mkdir -p /var/log/user_record
vi /etc/profile
在檔案末尾追加
# 新增登陸時自動記錄
script -t -f -q 2>/var/log/user_record/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /var/log/user_record/$USER-$UID-`date +%Y%m%d%H%M%S`.his
if [ "$SHLVL" = 1 ]; then
exit
fi
在這裡我已經提前新增到腳本里了,後邊是監控端,見演示
暢想幾個場景:
-
透過錄製終端記錄,來製作一個命令列技巧影片
-
直接分享幾十k的記錄檔案給朋友,就可以讓好友體驗到站在你旁邊看你操作的感覺
-
大神來面前幫忙,這時候根本來不及開啟錄屏軟體,還容易遭大神的反感;一頓操作猛如虎,菜鳥什麼都記不住好嗎(哭唧唧)。但有了這個工具,一秒開啟記錄,回去慢慢看唄,還能慢放,多爽。
-
完整記錄指令碼的執行步驟與輸出,沒有什麼比完整輸出的指令碼更能排查操作,特別是不能debug的shell。
-
監控登陸使用者的一舉一動,再也不怕找不到人背鍋了,但是自己的鍋也就甩不出去了,發現自己的鍋千萬別告訴別人!
-
什麼?你還想用這個來監聽輸入的密碼?
朋友會在“發現-看一看”看到你“在看”的內容