bashシェルは実際の端末セッションをどこに保存しますか?以前に使用したコマンドの出力を読みたい。グーグルで見つけることができるのは、コマンドの出力を保存する方法だけです。
出力は画面に表示されるため、とにかくどこかに保存する必要があります。だから私の質問は:どこですか?
bashシェルは実際の端末セッションをどこに保存しますか?以前に使用したコマンドの出力を読みたい。グーグルで見つけることができるのは、コマンドの出力を保存する方法だけです。
出力は画面に表示されるため、とにかくどこかに保存する必要があります。だから私の質問は:どこですか?
回答:
Bashは、実行したコマンドの履歴のみを保存します(入力すると取得できますhistory
)。既にスクロールバックを非常に高い値に設定していない限り、スクロールバックの設定値よりも古い出力を確認する方法はありません。また、この値を非常に高い値に設定すると、行がメモリに保存されるため、スクロールが遅くなります。
将来のコマンドとその出力を保存するには、いくつかのオプションがあります。
を使用して screen
と入力して、スクリーンセッションを開始しますscreen
。あなたは、画面、プレス内になったらCtrl- a、そして:、その後、入力しますlog
。すべてのI / Oはscreenlog
、screen
コマンドを開始したディレクトリ内のファイルにキャプチャされます。
を使用して script
を入力して開始できますscript
。という名前のファイルへのすべてのI / Oをキャプチャするスクリプトセッションが開始されますtypescript
。- でscript
セッションを終了し、ファイル内のログを表示できます。Ctrldtypescript
を使用して tee
teeは便利なツールです。次のようなことができます:
$ bash | tee log.txt
これにより、すでに実行しているシェル内に新しいbashシェルが開きます。これをexit
終了すると、次のファイルに出力が表示されますlog.txt
他の方法
この投稿でダスティンカークランドが提案したように、byobuも使用できます。私は一度も使用したことがありませんが、Shelrなどの端末のスクリーンキャストツールもオプションのように聞こえます。
これに関連する質問はたくさんありますが、それらはすべて、出力がログに記録されないという(右の)仮定から始まります。
だから私の質問は:どこですか?
どこでもない:Bash(および私が知っている他のシェル)の出力はログに記録されません。
出力は画面に表示されるため、とにかくどこかに保存する必要があります。
プレーンテキストではなく、ディスク上でもない可能性が最も高い(ただし、これは実際にはターミナルエミュレータ次第です):おそらく、そしてほとんどの場合、ターミナルエミュレータによって割り当てられたメモリセグメントにあります。
ただし、少なくともシェルによってではなく、ファイルにログが記録されないことは確かであり、デフォルトで出力をファイルに記録する端末エミュレーターは知りません。
実際、これは端末の出力をログに記録することが不可能であることを意味しません:まず、Ask Ubuntuでこれについて言及している人を見たことがないので、多くの人が気づいていないと思うものについて言及します:Konsoleは、ファイルへのスクロールバック(おそらく、このような機能を提供する他のターミナルエミュレーターがあり、Konsoleは私が知っている唯一のものです)が、これはKonsoleのスクロールバックサイズの制限によって制限されています。
ただし、これは実際にはあまり役に立たない場合が多く、セッション全体の出力をファイルに記録するための「適切な」解決策を検討する必要があります(ターミナルセッションですべての入力と出力を記録するにはどうすればよいですか?およびRonの回答)。
これはシェル(bash
)とは関係ありません。使用しているターミナルエミュレータの機能ではありません。端末の「スクロールバッファ」に保存されます。これが正確に保存されている場所の明確な説明を見つけることができませんでしたが、個人的な経験から、それがのどこかに保存されていることがわかりました/tmp
。
上記にリンクされた質問の答えが示唆するように、それはほとんどの場合、名前のないファイルに保存されます。意味を確認するには、テキストエディターで新しいファイルを開きます。
gedit newfile
テキスト行をファイルに書き込んで保存します。今、そのファイルがまだ開いている間に、ターミナルを開いて削除します:
rm newfile
でファイルを開いたままにしているため、gedit
書き込みを続けることができます。ファイルが削除されているにもかかわらず、数ギガバイトのデータを書き込むことさえできます。ファイルを削除すると、そのinodeを指すリンクが削除されるだけだからです。そのファイル記述子が別のプログラムによって開かれたままになっている場合、データを書き込むことができ、ファイルシステム上のファイル記述子に対応する実際のリンク(ファイル)がもはや存在しないという事実を説明します。
これはすべて、端末の履歴が、おそらくそのようなトリックを使用して保存されていると言うことです/tmp
。おそらく実際に必要なのは、単に端末エミュレータのスクロールバックバッファサイズを増やして、上にスクロールして表示できるようにすることです。これを行う方法の詳細は、使用しているターミナルエミュレータによって異なります。ほとんどの場合、コマンドラインスイッチを使用してこれを実行できます。また、多くの場合、GUIで設定する方法もあります。たとえば、gnome-terminal
(Ubuntuのデフォルト)編集->設定->プロファイル---プロファイルをクリック->編集->スクロール->スクロールバックをNNNに制限:
script
受け入れられた答えで説明されているようにしたいでしょう。
端末セッションは.bash_history
ファイルに保存されます。これをターミナルに入力すると、ファイルecho $HISTFILE
のパスが.bash_history
表示されます。