SCRIPT(1) | User Commands | SCRIPT(1) |
script - 端末セッションの忠実な記録を作成する
script [options] [file]
このマニュアルは、util-linux 2.36 所収の script コマンドのマニュアルである。script コマンドは util-linux 2.35 でかなり大幅な改訂が行われた。そのため、バージョン 2.34 以前の script では、このマニュアルで述べている機能やオプションに使えないものがあると思う。 バージョン 2.34 やそれ以前の script の動作やオプションについては、 付属の英語マニュアルをご覧いただきたい。
script は、端末セッションで行われるすべてについて忠実な記録 (タイプスクリプト、typescript) を作成する。端末上のデータは、未加工のまま (in raw form) ログファイルに記録され、 タイミングに関する情報は、(作成する、しないが任意の) 構造化された別のログファイルに記録される。このタイミングのログファイルは、後で scriptreplay(1) を使用して、セッションを再生するためにも、 またセッションに関する補足情報を記録するためにも必要である。
バージョン 2.35 以降の script は、複数ストリームをサポートし、 入力と出力を別々のファイルに記録することも、 両者を一つのファイルに記録することも可能になっている。 またそうしたバージョンでは、補足情報を記録する新型のタイミングファイルも使用できる。 scriptreplay --summary というコマンドを使えば、そうした補足情報のすべてを見ることができる。
引き数の file やオプションの --log-out file を指定すると、script はセッションのやり取りを file という名前のファイルに記録する。ファイル名を指定しない場合は、セッションのやり取りを typescript というファイルに記録することになる。
--log-in や --log-io を使って入力のログを取ると、セキュリティ的に危険な情報まで記録されることになるかもしれない。 端末のエコーフラグ (echo flag) の設定がどうなっていようと、 ログファイルに端末セッションにおけるすべての入力が書き込まれるからである (たとえば、パスワードまでも)。
以下で使用する引き数 size の後ろには、KiB (=1024), MiB (=1024*1024) のような乗数を表す接尾辞を付けることができる。GiB, TiB, PiB, EiB, ZiB, YiB も同様に使える ("iB" を続けるのは任意であり、たとえば、"K" は "KiB" と同じ意味である)。また、KB (=1000), MB (=1000*1000) のような接尾辞を付けてもよい。GB, TB, PB, EB, ZB, YB も同様に使える。
このログ機能を使うときは、気を付けていただきたい。 端末でエコーフラグを「抑止」にしているときの入力も含めて、すべての入力を記録するからである (たとえば、パスワードの入力も記録する)。
ログは、スペースで区切られた二つのフィールドからなる。 最初のフィールドは、前回の出力から経過した時間を示し、2 番目のフィールドは、今回、何文字 (characters) 出力したかを示している。
advanced (multi-stream) フォーマット
最初のフィールドは、記載事項のタイプ識別子である ('I'nput, 'O'utput, 'H'eader, 'S'ignal)。2 番目のフィールドは、前回の記録から経過した時間。 そして、記載事項の残りの部分は、タイプ特有のデータである。
SIGUSR1 を受け取ると、script は直ちにバッファの内容を出力ファイルにフラッシュする。
次の環境変数を script は利用する。
script コマンドが記録を終えるのは、フォークしたシェルが終了するときである (Bourne シェル (sh(1p)) では、control-D で終了する。C シェル (csh(1)) では、exit, logout、あるいは (ignoreeof が設定されていない場合は) control-D で終了する)。
vi のような対話的なコマンドには、タイプスクリプトファイルにゴミを作るものがある。 script は、複雑な画面処理をしないコマンドを使ったとき、一番うまく行く。 作成される記録は、ハードコピー端末 (訳注: スクリーンではなく、紙に出力する端末。テレタイプがその一例) をエミュレートするようになっているのである。
script を非対話的シェルで動かすのは、お勧めできない。script の内側のシェルは、常に対話的であり、そのため予期せぬ結果をもたらすかもしれないからだ。 もし、script をシェルの初期化ファイルで使用するのなら、 無限ループに陥らないように気を付けなければならない。たとえば、以下のような .profile ファイルを使うことができるが、これなら読み込むのは、ログインシェルだけになる。
if test -t 0 ; then script exit fi
また、パイプを使ったコマンドで script を使うのも避けたほうがよい。 script が、ユーザの思っている以上に入力を読み込むかもしれないからである。
script コマンドは 3.0BSD で登場した。
script は、ラインフィードやバックスペースも含めて、すべてをログファイルに書き込む。 これは、初心ユーザの予想する動作ではないだろう。
script は、そもそも対話的な端末セッションを対象に設計されている。 そのため、標準入力が端末でないときは (たとえば、echo foo | script)、 セッションがハングするかもしれない。何故なら、script セッション内の対話的シェルが EOF を受け取りそこなうと、script としては、いつセッションを閉じればよいのか、手がかりをつかめないからである。 詳しくは、「注意」セクションをご覧になっていただきたい。
csh(1) (history のメカニズムについて), scriptreplay(1), scriptlive(1)
この script コマンドは、util-linux パッケージの一部であり、Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/> から入手できる。
October 2019 | util-linux |