ちょっと前にscriptコマンドで取得したターミナルログにタイムスタンプを付与する方法について記述したが、今回はその状態でさらにscriptreplayを行えるようにしてみる。 ここで厄介なのが、scriptreplayで用いるタイミングが記録されたファイルの書き方が、そのタイムスタンプ+表示されていた文字数になっている事。 行数とかとくに気にされてないので、各行にタイムスタンプが差し込まれている現状だとその文字数が一体何行になるのかを知る必要がある。
1. ログ再生時にタイムスタンプを除外する場合
こっちは簡単。単純にcutコマンドを使ってファイルからタイムスタンプの部分を除外してやれば良い。
ログ取得時
LANG=C script -fqt 2> log.time >(awk '{print strftime("%F %T ") $0}{fflush() }'>> log.session)
ログ再生時
scriptreplay -t log.time <(cut -c 21- log.session)
2. ログ再生時にタイムスタンプが付与された状態にする場合
こっちが、冒頭で書いた点について気にしないといけないのでちょっと難しい。 少々長くなるのだが、ここでは以下のようにawkでタイミングごとの文字数を取得し、tailとheadでログファイルを指定された文字数の範囲を抽出して行数を計算することで対応している。 ログ取得時のコマンドは同じなので割愛。
ログ再生時
scriptreplay -t <(awk 'BEGIN{i=0}{cmd="cat log.session|cut -c 21-|tail -c +"i" |head -c "$2"|wc -l";cmd|getline c;i+=$2;print $1,$2+c*20}' log.time) log.session
とりあえずこんな感じだろうか。 これで、何時頃にどのようなコマンドを実行したのかを確認しつつ、操作時の挙動についても再生ができるはずだ。(vimとかの操作はちょっと厳しいかもしれない…)
なお、ターミナルログ自体はちゃんとタイムスタンプ付きで読める状態(vimとか使ったらわからないが…)になっている。
[root@BS-PUB-CENT7-01 ~]# cat log.session
2017-05-20 21:09:17 Script started on 2017年05月20日 21時09分17秒
2017-05-20 21:09:17 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:17 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]# ls -la
2017-05-20 21:09:19 total 120
2017-05-20 21:09:19 dr-xr-x---. 8 root root 4096 5月 20 21:09 .
2017-05-20 21:09:19 dr-xr-xr-x. 17 root root 4096 1月 20 00:01 ..
2017-05-20 21:09:19 -rw-------. 1 root root 18862 5月 20 21:09 .bash_history
2017-05-20 21:09:19 -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
2017-05-20 21:09:19 -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
2017-05-20 21:09:19 -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
2017-05-20 21:09:19 drwxr-xr-x. 4 root root 31 5月 16 10:03 .config
2017-05-20 21:09:19 drwxr-xr-x. 6 root root 89 5月 20 11:29 .cpan
2017-05-20 21:09:19 -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
2017-05-20 21:09:19 -rw-------. 1 root root 47 5月 20 16:26 .lesshst
2017-05-20 21:09:19 drwxr-xr-x. 3 root root 18 5月 16 09:59 .local
2017-05-20 21:09:19 drwxr-----. 3 root root 18 5月 16 09:58 .pki
2017-05-20 21:09:19 -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
2017-05-20 21:09:19 -rw-------. 1 root root 3602 5月 20 19:27 .viminfo
2017-05-20 21:09:19 -rw-r--r--. 1 root root 618 5月 20 17:08 20170520_170807.log
2017-05-20 21:09:19 -rw-r--r--. 1 root root 295 5月 20 18:50 =time
2017-05-20 21:09:19 drwxr-xr-x. 15 root root 4096 5月 16 10:09 DevAudit
2017-05-20 21:09:19 -rw-r--r--. 1 root root 224 5月 20 17:06 aa
2017-05-20 21:09:19 -rw-------. 1 root root 986 1月 1 2016 anaconda-ks.cfg
2017-05-20 21:09:19 -rw-r--r--. 1 root root 311 5月 20 21:09 log.session
2017-05-20 21:09:19 -rw-r--r--. 1 root root 0 5月 20 21:09 log.time
2017-05-20 21:09:19 -rw-r--r--. 1 root root 258 5月 20 18:45 ls.log
2017-05-20 21:09:19 drwxr-xr-x. 5 root root 36 5月 20 11:29 perl5
2017-05-20 21:09:19 -rw-r--r--. 1 root root 496 5月 20 20:55 q
2017-05-20 21:09:19 -rw-r--r--. 1 root root 99 5月 20 11:26 test.pl
2017-05-20 21:09:19 -rw-r--r--. 1 root root 764 5月 20 18:56 test.session
2017-05-20 21:09:19 -rw-r--r--. 1 root root 91 5月 20 18:56 test.time
2017-05-20 21:09:19 -rw-r--r--. 1 root root 28 5月 18 08:50 test1.txt
2017-05-20 21:09:19 -rw-r--r--. 1 root root 86 5月 18 08:40 test2.txt
2017-05-20 21:09:19 -rw-r--r--. 1 root root 47 5月 20 20:33 test3.txt
2017-05-20 21:09:19 -rw-r--r--. 1 root root 554 5月 20 18:51 time
2017-05-20 21:09:19 -rw-r--r--. 1 root root 2081 5月 20 18:50 typescript
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:20 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:21 [root@BS-PUB-CENT7-01 ~]# pwd
2017-05-20 21:09:21 /root
2017-05-20 21:09:21 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:25 [root@BS-PUB-CENT7-01 ~]# exit
2017-05-20 21:09:25 exit