ターミナルセッションですべての入力と出力を記録するにはどうすればよいですか?


46

ターミナルを介して行われたすべての作業のログを保存するにはどうすればよいですか?たとえば、ターミナルを介してデータベースで行われたすべての作業の記録が必要です。


これもsudoに組み込まれています。
ウィルヘルムエラスムス

確認できる回答を追加しました
マンスールアリ

回答:


66

ログファイルの記録を開始する準備ができたら、次のように入力します。

script screen.log

これで、スクリプトを停止するまで、ターミナルでのすべての入力と出力はscreen.logに保存されます。完了したら、次のように入力します。

exit

screen.logファイルはローカルディレクトリに保存されます。リダイレクトする場合は、などの絶対パス名を使用し~/screen.logます。これはまさにあなたが探しているものです。

ソース: Ubuntuガイド-ターミナルコマンドのログ方法


こんにちは、返信ありがとうございます。ただし、次のシーケンスを使用してシェルからmysqlデータベースにログインした場合、これは機能します。ファイルscreen.logは作成されていますが、データベースのログは含まれていません。ファイルをできるだけ早く共有します。ありがとう
Ankt-アンキット

2
コンソールで実行されているすべてが「標準入力」(通常はキーボード)から読み取り、標準出力(通常は端末ウィンドウ)に書き込む必要があります。したがって、mysqlコマンドラインクライアントを含める必要があります。マニュアルページ(man script)にもvi(エディター)と記載されています
...-Izzy

10

Asciinemaを試してみてください。録音を作成するだけでなく、それを共有して、ブログ、記事、または会議のトークにプレーヤーを埋め込むことができます。


6

syslogを使用してすべてのシェルコマンドを記録するより良い方法があります。これはLinuxディストリビューションによって異なる場合がありますが、方法は変わりません。

いくつかの手順に従う必要があります。

ステップ#1(Syslogサービスの作成)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

ステップ#2(bashrcを開き、以下のコマンドを入力します)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste#3(Syslogサービスの再起動)

# /etc/init.d/rsyslog

ログのサンプルは次のとおりです。

12月7日22:13:00 validationdb2 mahasan:root @ export [13291]:tail -f /var/log/mysql/mysql.log [0]
12月7日22:13:09 validationdb2 mahasan:root @ export [13291]:ls -lh [0]
12月7日22:13:27 validationdb2 mahasan:root @ export [13291]:タッチテストコマンド[0]

生意気な戦術!!!
トムH

こんにちは、マンスール、これらのコマンドで何をしているのかを説明してください。
ジャッサー

ステップ1で、プロセスがログを送信するために使用するコマンドロギング用のサービスに名前を付けています。「local6」は、ロギング用のサービスのエンドポイントになります。ステップ2では、 = $? " この部分は、このレコードが助けsyslogプロセスとデータをログに記録したサービスにログファイルを送信します「ロガー-p local6.debug」ユーザーの入力を記録します
マンスール・アリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.