新しいプロジェクトでは、いくつかのプロセスを実行するLinuxボックスをセットアップしています。構成をより適切にバックトラックまたはロールバックできるようにするために、端末およびsshを介して入力されたすべてのコマンドの永続的な履歴を保持し、保存する必要がありますstdoutへのすべての出力/ログファイルへのエラー。
履歴を永続化すると、次のようなものが得られます。
1 history
2 ls
3 ps
4 ll
5 echo "hi"
6 history
そして、対応する出力を1.log
、2.log
などの名前のログファイルに保存します。明らかに、出力はログファイルにあるだけでなく、表示される必要があります。
プログラムで視覚化する入力したすべてのコマンドが自動的に次のように動作するようにします。
command > /log/$(len(history)).txt 2&>; echo /log/$(len(history-1)).txt
しかし、何が起こっているのかをライブで確認したり、CLIなどとやり取りしたりできる方法で。
このようなbashを構成する方法、またはSSHセッションとローカルでの作業の両方についてLinuxでこの動作を取得する他の方法はありますか?
端末に表示されるすべてのTypeScriptを作成する通常の方法は、 スクリプトコマンド を使用することです。ただし、このコマンドはstderrを処理しません。
別の アプローチ は プロセス置換 を &リダイレクト および exec で使用することです:
_exec &> >(tee -a "$log_file")
_
_$log_file
_には、スクリプトとサブプロセスの出力が含まれ、出力も画面に出力されます。
どこ:
>(...)
はプロセス_...
_を開始し、その標準入力を表すファイルを返します。
_exec &> ...
_は、スクリプトの残りの部分で、標準出力と標準エラーの両方を_...
_にリダイレクトします。 _exec > ...
_はstdoutにのみ使用してください。
_tee -a
_は、標準入力をファイルに追加し、それを画面に出力します。
おそらく、これを行うために特別に設計されたデーモンであるauditd
を調べたいと思うでしょう。
または、見つけたように、bash履歴を使用し、HISTSIZE
/HISTFILESIZE
変数を増やして、すべてのコマンドを保持するようにすることもできます。
編集: https://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers を参照してください