こんにちは、テクマトリックスの村上です。
Linuxでの操作を記録する「script」コマンドを利用する機会があったのでご紹介します。
目次
「script」コマンドを利用するきっかけ
お客様の環境構築のサービスで、Linuxでの操作(コマンドの実行)を記録してほしいと要望があり、「script」コマンドを利用しました。
「script」コマンドの使い方
基本的な使い方は以下の通りです。
記録の開始
$ script 記録するファイル名
記録の停止
exitコマンドを実行するか、または「Ctrl + d」キーを押して停止します。
$ exit
記録の追記
$ script -a 記録するファイル名
オプションは以下の通りです。
オプション
オプション | 動作 |
-I, –log-in <file> | 入力を指定したファイルに記録する。 |
-O, –log-out <file> | 出力を指定したファイルに記録する。 |
-B, –log-io <file> | 入力と出力を指定したファイルに記録する。 |
-T, –log-timing<file> | タイミング情報をファイルに記録する。 |
-t[<file>], –timing[=<file>] | タイミング情報をファイルに記録する。 非推奨で、–log-timingの利用が推奨。 |
-m, –logging-format <name> | ログのフォーマットを指定する。classicとadvancedがあり、デフォルトはclassicである。 |
-a, –append | ログファイルに追記する。 |
-c, –command <command> | 対話シェルを利用せずコマンドを実行する。 |
-e, –return | 子プロセスの終了ステータスを返す。 |
-f, –flush | 書き込みがあった際にリアルタイムで反映する。 |
–force | 出力先のファイルがシンボリックリンクでも実行可能とする。 |
-E, –echo <when> | セッションでの入力をエコーする。指定できるパターンはauto、always 、neverのいずれかで、autoがデフォルトである。 autoは、コマンドやプログラムがユーザーからの入力を必要とする場合にのみ、入力内容を表示する。 |
-o, –output-limit <size> | 出力ファイルが指定したサイズを超えた場合に終了する。 |
-q, –quiet | 開始時、終了時のメッセージを出力しない。 |
-h, –help | ヘルプを表示する。 |
-V, –version | バージョンを表示する。 |
「script」コマンドの実行例
記録の開始
root@ip-10-0-255-167:~# script 202409_script.log
Script started, output log file is '202409_script.log'.
記録の追記
root@ip-10-0-255-167:~# script -a 202409_script.log
Script started, output log file is '202409_script.log'.
操作ログの確認方法
「script」は端末のセッション上の操作すべてをそのままの形式で記録するため、制御コードやエスケープシーケンスも合わせて記録します。コマンドによっては制御コードやエスケープシーケンスも表示されてしまい、上手く表示や閲覧を行わないと見づらいです。
以下は、「less」コマンドと「cat」コマンドで操作ログを表示した結果です。
操作ログには、test.txtにnanoコマンドで「Hello」と記載した操作が記録されています。
■「less」コマンド
■「less -R」コマンド
-Rオプションを付けることで、エスケープシーケンス(ESC…)の表示をなくせます。
■「cat」コマンド
■「cat -vn」コマンド
オプションでvnを指定することで、test.txtを「nano」で操作したログを出力してます。
vは非印字文字を可視文字として表示、nは行番号を表示します。
「cat」コマンドはシンプルで見やすいですが、test.txtの変更後の情報が確認できないです。つまり、正しくファイルが変更されているかをログから確認できません。その他のコマンドは制御文字などによって見づらいです。
「cat」コマンドの形式で、test.txtの変更後の情報が確認できる方法を探しました。
採用した方法
今回は、「script」コマンドで操作を記録中に、ファイル操作を行った場合は「cat」コマンドでファイルの内容を出力し、操作ログ自体は「cat」コマンドで確認するようにしました。
制御文字が表示されず、変更したファイルの中身が確認できます。
以下は、「script」コマンドでtest_cat.txtに「nano」コマンドで「Hello」と記載する操作を記録したログを、「cat」コマンドで表示したものです。test_cat.txtの変更後の内容は、赤枠内で確認できます。
まとめ
「script」コマンドはファイル操作した内容も記録してくれる便利なコマンドです。ただし、取得したログは、制御文字も記録される仕様のため、扱いに工夫が必要です。
今回は、操作ログを以下の方法で見やすくしています。
- ファイル操作をした場合は、「cat」コマンドでファイルの内容を出力します。
- 操作ログ自体は「cat」コマンドで確認します。