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


13

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

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

回答:


11

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

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

を使用して screen

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

を使用して script

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

を使用して tee

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

$ bash | tee log.txt

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

他の方法

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


6

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

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

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

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

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

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

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

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


1

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

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

そして、あなたがしたいことをやったら、exitと入力するだけで、現在のディレクトリにすべてのstdoutとstdin情報を含むファイルが作成されます。

お役に立てば幸いです。


パッケージはubuntu 18.04ではNAです
markroxor

1

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

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

gedit newfile

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

rm newfile

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

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

gnome-terminalオプション画面


興味深い洞察。私はEG PYTHONそこから書き込まれたことをすべて、すなわち、端末にはcoutへのアクセスがしたい:ターミナルで長い歴史を検査する私も欲しいものではありません
ダニエルBöckenhoff

@DanielBöckenhoffあなたはおそらくscript受け入れられた答えで説明されているようにしたいでしょう。
18年

承知しました。私はそれを受け入れました:)
ダニエル・ボッケンホフ

-2

端末セッションは.bash_historyファイルに保存されます。これをターミナルに入力すると、ファイルecho $HISTFILEのパスが.bash_history表示されます。


2
これにより、以前に実行されたコマンドのみが提供され、コマンド出力は提供されません。
ロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.