web-dev-qa-db-ja.com

すべてのコマンドと出力を保存するように.bashrcを構成します

新しいプロジェクトでは、いくつかのプロセスを実行するLinuxボックスをセットアップしています。構成をより適切にバックトラックまたはロールバックできるようにするために、端末およびsshを介して入力されたすべてのコマンドの永続的な履歴を保持し、保存する必要がありますstdoutへのすべての出力/ログファイルへのエラー。

履歴を永続化すると、次のようなものが得られます。

1  history
2  ls
3  ps
4  ll
5  echo "hi"
6  history

そして、対応する出力を1.log2.logなどの名前のログファイルに保存します。明らかに、出力はログファイルにあるだけでなく、表示される必要があります。

プログラムで視覚化する入力したすべてのコマンドが自動的に次のように動作するようにします。

command > /log/$(len(history)).txt 2&>; echo /log/$(len(history-1)).txt

しかし、何が起こっているのかをライブで確認したり、CLIなどとやり取りしたりできる方法で。

このようなbashを構成する方法、またはSSHセッションとローカルでの作業の両方についてLinuxでこの動作を取得する他の方法はありますか?

3
jaaq

端末に表示されるすべてのTypeScriptを作成する通常の方法は、 スクリプトコマンド を使用することです。ただし、このコマンドはstderrを処理しません。

別の アプローチプロセス置換&リダイレクト および exec で使用することです:

_exec &> >(tee -a "$log_file")
_

_$log_file_には、スクリプトとサブプロセスの出力が含まれ、出力も画面に出力されます。

どこ:

  • >(...)はプロセス_..._を開始し、その標準入力を表すファイルを返します。

  • _exec &> ..._は、スクリプトの残りの部分で、標準出力と標準エラーの両方を_..._にリダイレクトします。 _exec > ..._はstdoutにのみ使用してください。

  • _tee -a_は、標準入力をファイルに追加し、それを画面に出力します。

1
harrymc

おそらく、これを行うために特別に設計されたデーモンであるauditdを調べたいと思うでしょう。

または、見つけたように、bash履歴を使用し、HISTSIZE/HISTFILESIZE変数を増やして、すべてのコマンドを保持するようにすることもできます。

編集: https://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers を参照してください

3
Sirex