Linux命令 script - 記錄終端會(huì)話的所有操作

2022-03-18 17:54 更新

script

記錄終端會(huì)話的所有操作

補(bǔ)充說明

script 用于在終端會(huì)話中,記錄用戶的所有操作和命令的輸出信息。簡(jiǎn)而言之,記錄終端會(huì)話發(fā)生的一切信息,如同一臺(tái)終端錄像機(jī)。例如,用戶在輸入某條命令時(shí),字符的鍵入和刪除也都會(huì)被記錄。用戶在終端的所有操作、終端的回顯等信息會(huì)被以 raw 格式存儲(chǔ)在日志文件,稱為終端數(shù)據(jù)文件。命令的時(shí)間信息會(huì)被單獨(dú)以另一種結(jié)構(gòu)儲(chǔ)存為日志文件,稱為時(shí)間日志文件。使用命令exit或者快捷鍵Ctrl + D停止記錄。

語法

script(選項(xiàng))(參數(shù))

選項(xiàng)

-a, --append              # 對(duì)終端會(huì)話的操作信息,以追加方式寫入文件(保留原文件內(nèi)容)
-c, --command command     # 只運(yùn)行 command 命令而不打開交互終端。相當(dāng)于開啟 script ,執(zhí)行 command ,再退出 script
                          # command 可以是任意能夠在終端會(huì)話執(zhí)行的命令
-e, --return              # 返回子進(jìn)程的退出狀態(tài)碼
-f, --flush               # 每次終端的內(nèi)容發(fā)生變動(dòng),立馬寫入日志文件
--force                   # 允許默認(rèn)輸出終端數(shù)據(jù)文件為符號(hào)鏈接
-o, --output-limit size   # 限制終端數(shù)據(jù)文件和時(shí)間日志文件的大小,當(dāng)文件大小達(dá)到此限制就會(huì)退出子進(jìn)程
                          # size 的單位可以設(shè)置為:KiB(=1024)、KB(=1000)、MiB(1024*1024)、MB(=1000*1000)
                          # 同理還支持 GiB TiB PiB EiB ZiB YiB GB TB PB EB ZB YB
-q, --quiet               # 安靜模式。啟動(dòng)和退出script命令不顯示任何提示
-t[file], --timing[=file] # 輸出時(shí)間日志信息到標(biāo)準(zhǔn)錯(cuò)誤(stderr)或者文件
-V, --version             # 顯示版本信息并退出
-h, --help                # 顯示幫助文本并退出

參數(shù)

  • 終端數(shù)據(jù)文件:設(shè)置存儲(chǔ)終端數(shù)據(jù)信息的文件名稱

實(shí)例

script                             # 開啟記錄,默認(rèn)會(huì)在當(dāng)前目錄創(chuàng)建名稱為 typescript 的文件來保存終端數(shù)據(jù)文件
script command.log                 # 開啟記錄,在當(dāng)前目錄創(chuàng)建名稱為 command.log 的文件來保存終端數(shù)據(jù)文件
script -t 2>time.file command.log  # 開啟記錄,在當(dāng)前目錄創(chuàng)建名稱為 command.log 的文件來保存終端數(shù)據(jù)文件
                                   # 在當(dāng)前目錄創(chuàng)建名稱為 time.file 的文件來保存時(shí)間日志文件

以追加模式記錄終端信息

zfb@localhost:~$ script -t 2>time.file -a -f command.log
Script started, file is command.log
zfb@localhost:~$ echo "hello, world"
hello, world
zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@localhost:~$ echo "Bye"
Bye
zfb@localhost:~$ ls -al
total 20
drwxr-xr-x  2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r--  1 zfb zfb    0 Dec 23 19:03 a.txt
-rw-r--r--  1 zfb zfb   12 Dec 23 19:04 b.txt
-rw-r--r--  1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r--  1 zfb zfb  790 Dec 23 20:49 time.file
zfb@localhost:~$ exit
Script done, file is command.log
zfb@localhost:~$

然后,用戶可以查看終端數(shù)據(jù)文件,使用方法如下

zfb@localhost:~$ cat command.log
Script started on 2020-12-23 20:48:25+08:00 [TERM="xterm-256color" TTY="/dev/pts/0" COLUMNS="75" LINES="30"]
zfb@localhost:~$ echo "hello, world"
hello, world
zfb@localhost:~$ echo $(date "+%Y-%m-%d %H:%M:%S")
2020-12-23 20:48:46
zfb@localhost:~$ echo "Bye"
Bye
zfb@localhost:~$ ls -al
total 20
drwxr-xr-x  2 zfb zfb 4096 Dec 23 20:48 .
drwxr-xr-x 37 zfb zfb 4096 Dec 23 20:49 ..
-rw-r--r--  1 zfb zfb    0 Dec 23 19:03 a.txt
-rw-r--r--  1 zfb zfb   12 Dec 23 19:04 b.txt
-rw-r--r--  1 zfb zfb 2744 Dec 23 20:49 command.log
-rw-r--r--  1 zfb zfb  790 Dec 23 20:49 time.file
zfb@localhost:~$ exit

Script done on 2020-12-23 20:49:04+08:00 [COMMAND_EXIT_CODE="0"]
zfb@localhost:~$

其中,只有命令cat command.log是用戶輸入,其他均為自動(dòng)呈現(xiàn)。通過查看上面輸出的時(shí)間2020-12-23 20:48:46,可以證明,這是重現(xiàn)的記錄,而非重新執(zhí)行一遍命令。也就是說,可以把time.file和command.log文件移動(dòng)到任意一臺(tái)機(jī)器上,都可以重現(xiàn)命令輸入與終端回顯。

記錄服務(wù)器用戶會(huì)話操作

以root身份編輯文件/etc/profile,在文件末尾追加以下內(nèi)容

if [ $UID -ge 0 ]
then
    exec /usr/bin/script -t 2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log
fi

然后再以root身份創(chuàng)建文件夾用于存儲(chǔ)服務(wù)器上的各個(gè)用戶在終端的所有操作信息

sudo mkdir -p /var/log/script-records/
sudo chmod 733 /var/log/script-records/

最后,執(zhí)行命令source /etc/profile即可。任意用戶(UID ≥ 0)在終端執(zhí)行的所有操作都會(huì)被安靜地記錄下來,以天為單位存儲(chǔ)。

添加命令 

|

 命令列表 

|

 Chrome 插


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)