泥沼SEの備忘録

やってみたいこと、やってみたことを記録しています

Linux Ubuntu

Ubuntuでターミナル操作を自動的にログ保存する

投稿日:

はじめに

LinuxDesktopを使っていて少し気になったことがあります。それはターミナルのログが保存できていないことです。今までWindowsからTeraTermでsshをしていたため、TeraTermでログを自動保存していました。ターミナルを開いたときにLinuxDesktopでログを保存するようにしましょう。

やってみたこと

いつも使用しているユーザでタームなるを起動した際に、ログを取るようにしましょう。
~/.bashrcにログ取得スクリプトを書き込んでおけば、起動の度に取得してくれます。
おあつらえむきなコマンドがあります。それはscriptコマンドです。
このコマンドはscriptコマンドからexitを入力するまでのターミナル操作内容を記録するコマンドです。
以下のようなコマンドでログは取得できそうです。

script "$HOME/log/history/$(date +%Y%m%d_%H%M%S_%N)_$(whoami).log"

早速、.bashrcにといきたいところですが、このまま追加してしまうと以下の画像のようにループします。
原因は script が新しいシェルを起動し、そのシェルでも .bashrc が読まれて、また script が実行されるためです。なので、すでに script 配下のシェルならscriptを実行しないようにしておくのがよいです。 SCRIPT_LOGGING という自前の環境変数で制御するようにしてみましょう。最初の .bashrc では空なので script を起動し、その際に SCRIPT_LOGGING=1 が子シェルへ引き継がれます。script 内で起動された bash が再び .bashrc を読んでも、今度は条件に入らないため1回で止まります。
次に、起動するシェルの種類も指定しておきましょう。対話シェルの場合のみログを取得するようにしてきます。$- には、現在のシェルで有効になっているオプションが入っています。対話シェルの場合は i が含まれれます。bash script.shのようにスクリプト実行用として起動された非対話シェルでは i が付かないため、ログ取得処理は走りません。
また、scriptコマンドは画面にはリアルタイムで表示する一方、ログファイルへの書き込みはバッファリングされることがあります。-f(flush)オプションを付与して各書き込みのたびにログファイルをflushするようにしましょう。リアルタイム性が向上します。

そうと決まれば早速記載していきましょう。~/.bashrcを編集して以下を追加します。

vi ~/.bashrc
##対話シェルの操作ログを保存
if [[ $- == *i* ]] && [ -z "$SCRIPT_LOGGING" ]; then
    export SCRIPT_LOGGING=1
    mkdir -p "$HOME/log/history"
    exec script -f "$HOME/log/history/$(date +%Y%m%d_%H%M%S_%N)_$(whoami).log"
fi

実際に設定を行い新しいターミナルを起動するとこのような形でメッセージが出ると共にログも出力されます。

script に-fを付与した場合は「bashのコマンド履歴」ではなく、端末に表示された内容そのものを記録する仕組みです。したがって、入力したコマンドだけでなく、その実行結果やプロンプトも含めて保存されます。また、矢印キーやTab補完、画面を書き換えるようなコマンドなどでは制御文字もログに入ることがあるそうです。

まとめ

今回、scriptコマンドと.bashrcを利用して、Ubuntuでターミナルを起動した際に操作ログを自動保存するようにしてみました。
これまではWindowsからTeraTermでSSH接続することが多く、ログの自動保存が当たり前になっていました。Ubuntu Desktopを直接使うようになってからも、同じように「ターミナルを開けば勝手にログが残る」環境にできたので、ログの取り忘れを気にする必要がなくなりました。トラブルが発生したときに「さっき何のコマンドを実行したっけ?」となっても、入力したコマンドだけでなく、そのときの実行結果まで後から確認できます。
設定自体は.bashrcに数行追加するだけなので、Ubuntuを普段使いしている方は設定しておくと、いざというときに役立つかもしれません。

その他

Linux関連の記事はこちら!
「 Linux 」 一覧
https://doronuma-se.com/archives/category/linux

-Linux, Ubuntu
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

自宅サーバのすすめ。自宅ラック立ち上げてみた

はじめに 20014年ごろから自宅サーバを構築していました。 このご時世にオンプレミス(物理環境)かよ。と思われるかもしれませんが、 身近なところにあると、すぐにサーバが立てれて便利なのです。 以下に …

BotFatherでTelegram Botを作成し、Ubuntuから通知を送る方法

はじめに サーバーで動かしているプログラムから、スマートフォンへ通知を送りたいことはありませんか?メールでも通知はできますが、メール通知だと気付きにくいし、LINE Notifyも終了してしまいました …

初代GPD PocketにUbuntu 26.04 LTSをインストールし、日本語入力設定でハマった話。IBus + MozcからFcitx5 + Mozcへ。やったことを振り返ってみる

はじめに GPD Pocketをご存知でしょうか?中国のGPD社が2017年に発売した7インチ液晶搭載の超小型ノートPC(UMPC)です。約480gの軽量アルミボディにWindows 10とフルキーボ …

iPad × Ubuntuで快適リモートデスクトップ!XRDPでつなぐ手順と注意点

はじめに Linuxのデスクトップ環境を使いたい。。。昨年から急にそう思うようになりました。Linuxのデスクトップ環境、デスクトップLinuxを使いたくなることってありますよね。その昔、学生の頃にD …

関東のSIerでSEをやっています。

Linuxやネットワーク、サーバー、ガジェットなど、気になったことを実際に試しています。

過去に調べたことや、やってみたもののうまくいかなかったことも含めて、試行錯誤の記録を残しています。

同じところで困っている方にとって、少しでも解決の手がかりになれば幸いです。