web-dev-qa-db-ja.com

bashシェルの出力履歴ファイルの場所

Bashシェルは実際の端末セッションをどこに保存しますか?以前に使用したコマンドの出力を読みたい。グーグルで見つけることができるのは、コマンドの出力を保存する方法だけです。

出力は画面に表示されるため、とにかくどこかに保存する必要があります。だから私の質問は:どこですか?

12

Bashは、実行したコマンドの履歴のみを保存します(historyと入力することで取得できます)。すでに スクロールバックを設定 が非常に高い数に設定されていない限り、スクロールバックの設定値よりも古い出力を確認する方法はありません。また、この値を非常に高い値に設定すると、行が メモリに格納される であるため、スクロールが遅くなります。

将来のコマンドとその出力を保存するには、いくつかのオプションがあります。

screenの使用

screenを入力して、 screen セッションを開始します。画面内に入ったら、を押します Ctrl-a、その後 :logと入力します。すべてのI/Oは、screenlogコマンドを開始したディレクトリのscreenファイルにキャプチャされます。

scriptの使用

scriptと入力して開始できます。 script セッションが開始され、TypeScriptという名前のファイルへのすべてのI/Oがキャプチャされます。 scriptセッションを終了するには Ctrl-d TypeScriptファイルのログを表示します。

teeの使用

tee は便利なツールです。次のようなことができます:

$ bash | tee log.txt

これにより、既に実行しているシェル内に新しいbashシェルが開きます。このうちexitを使用すると、log.txtというファイルに出力が表示されます。

他の方法

ダスティンカークランドが this 投稿で提案したように、 byob も使用できます。私は一度も使用したことはありませんが、 Shelr などの端末のスクリーンキャストツールもオプションのように聞こえます。

11
Ron

これに関連する質問はたくさんありますが、それらはすべて、出力がログに記録されないという(正しい)仮定から始まります。

だから私の質問は:どこですか?

どこでもない:Bash(および私が知っている他のシェル)の出力はログに記録されません。

出力は画面に表示されるため、とにかくどこかに保存する必要があります。

これは、プレーンテキストではなく、ディスク上でもない可能性があります(ただし、これは実際にはターミナルエミュレータ次第です)。ほとんどの場合、少なくともほとんどの場合、ターミナルエミュレータによって割り当てられたメモリセグメントにあります。

ただし、少なくともシェルによってではなく、ファイルにログが記録されないことは確かであり、デフォルトで出力をファイルに記録する端末エミュレーターは知りません。

実際、これは端末出力をログに記録することが不可能であることを意味しません:まず、Ask Ubuntuでこれについて言及している人を見たことがないので、多くの人が気づいていないと思うものについて言及します:Konsoleは、ファイルへのスクロールバック(おそらく、このような機能を提供する他のターミナルエミュレータがありますが、Konsoleは私が知っている唯一のものです)が、これはKonsoleのスクロールバックサイズの制限によって制限されています。

しかし、これは実際にはあまり役に立たないことが多く、セッション全体の出力をファイルに記録するための「適切な」解決策を検討することになるでしょう( すべての入力と出力を端末セッションに記録するにはどうすればよいですか? および Ronの答え )。

5
kos

Scriptという名前のコマンドがあります。インストールされていない場合、apt-get install scriptが実行します。

次に、ターミナルでスクリプトを入力します。

そして、あなたがしたいことをしてください、あなたが終わった後、ただexitとタイプすれば、すべてのstdoutとstdin情報であなたの現在のディレクトリで作成されたファイルがあるでしょう。

お役に立てば幸いです。

1
rɑːdʒɑ

これはシェル(bash)とは関係ありません。これは、使用しているターミナルエミュレータの機能ではありません。端末の「スクロールバックバッファ」に保存されます。これが正確に保存されている場所の明確な説明を見つけることができませんでしたが、 個人的な経験 は、/tmpのどこかに保存されていることを示しました。

上記にリンクされている質問の答えが示唆するように、それはおそらく名前のないファイルに保存されています。意味を確認するには、テキストエディターで新しいファイルを開きます。

gedit newfile

テキスト行をファイルに書き込んで保存します。今、そのファイルがまだ開いている間に、ターミナルを開いて削除します:

rm newfile

まだgeditでファイルを開いているので、引き続き書き込みを行うことができます。ファイルが削除されているにもかかわらず、数ギガバイトのデータを書き込むことさえできます。これは、ファイルを削除すると、その inode を指すリンクが削除されるだけだからです。 ファイル記述子 が別のプログラムによって開かれている場合、データを書き込むことができ、ファイルシステム上のファイル記述子に対応する実際のリンク(ファイル)がもはや存在しないという事実を説明できます。

これはすべて、/tmp内の削除されたファイルのどこかに、おそらくそのようなトリックを使用して端末の履歴が保存されると言うことです。おそらく実際に必要なのは、単に端末エミュレータのスクロールバックバッファサイズを増やして、上にスクロールして表示できるようにすることです。これを行う方法の詳細は、使用しているターミナルエミュレータによって異なります。ほとんどの場合、コマンドラインスイッチを使用してこれを実行できますが、多くの場合、GUIで設定することもできます。たとえば、gnome-terminal(Ubuntuのデフォルト)では、[編集]-> [設定]-> [プロファイル] ---プロファイルをクリックします->編集->スクロール->スクロールバックをNNNに制限します。

gnome-terminal options screen

1
terdon