tmux
またはscreen
を使用せずに、リモートコンピューターからopenターミナルにアクセスします。これにはいくつかの理由がありますが、最も簡単なのは、前もって計画していなかった状況で着陸し続け、職場でPCで何か大きなものを実行し、家に帰ってからsshで確認したいということです。
本質的に、私はすでにコンピュータで実行されている端末に接続してその出力を表示する方法を探しています。
今、私はあなたがこれを行うことができないと言ういくつかのスレッドがあることを知っています( this one など)、および単にscreen
とtmux
を推奨する他のスレッド( this one) 、 this one または this one )。私が探しているのは、実行中の端末プロセスに直接アクセスする方法、または少なくともその端末のキャッシュされた出力を見る方法です。その端末でコマンドを入力できる必要は必ずしもありません。
これを行う方法はありますか?そうでなければ、ハックに関するアイデアはありますか?私はおそらく、stdout、stderr、およびコマンドを自動的にファイルに記録する方法を見つけることができると考えていました(おそらく、すべてを記録するbash履歴の巧妙な調整?)
単にターミナルの構築方法が原因で、everythingにアクセスすることはできません。つまり、実行中のターミナルを表示することはできません andscreen
またはtmux
セッションなど、上記の端末内で実行中の取り外し可能なセッションがない場合、または開始していない場合は、対話しますscript
コマンドを介してロギングするコマンド。
できることは、部分的にviewSudo cat /dev/vcs1
コマンドを介してTTYです。 /dev/vcs[1-6]
は、それぞれのTTYコンソールに対応しています。これは、それぞれのTTYのスクロールバックバッファーサイズによって制限されます。つまり、特定の行数までメモリに保持されているもののみを表示できます。もちろん、これは muruの答え に示すように行数を増やすように調整できます。または、おそらく試してみてください
setterm -file log.txt -dump [ttynumbers]
this ssh question で言及されました。
結局のところ、bodhi.zazenは comment で適切に注意し、screen
またはtmux
の使用を拒否することが最大の問題であると述べました。私は完全に理解しています。長時間実行するプログラムを自分で追跡することを忘れることがよくありますが、いくつかのコマンドを使用して先に考え始める必要があります。
これに gnome-terminal のタグを付けているため、バージョンによっては、出力の一部を表示できる場合があります。 このブログ投稿 から、著者はGNOMEターミナルが「無制限」スクロールバックに対して何をするかを見たいと思っていました。
gnome-terminal
が開いているファイルを見ることができたので、lsof
が助けになりました。その後、私はそれが卑劣であることを発見し、/tmp/vteXYZ1tv
と呼ばれるいくつかのファイルを開いていましたが、すでにそれらを削除していました。したがって、ブラウジング時にそれらを見ることができず、プログラムを閉じると削除されます。 [...]しかし、私の方法(おそらく他にもあります)は、ls -l /proc/<gnome-terminal pid>/fd
を実行して、それらが指しているものを確認することでした。次に、cat
これらを使用して、新しいファイルを作成できます。これらは、ターミナル出力のそのままのコピーです。圧縮なし。いいえ、別に。
しかし、新しいバージョンでは、ファイルは暗号化されることになっています。 この回答 から:
vte-0.40(Ubuntu 15.10 W.W.に表示される可能性が高い)は、これらのファイルを圧縮および暗号化します。これにより、必要なストレージがそのサイズの約3〜4倍に縮小されます(アプリがX量のデータをプレーンテキストとして生成する場合、X/4〜.X/3は必要なストレージの合理的な見積もりです) 、また誰かがハードドライブへの生のアクセスを取得した場合のプライバシー/セキュリティの問題も取り除きます。
今後の出力のみが必要な場合は、プロセスを reptyrを使用する新しいTTY にドラッグしてみてください。
端末内で実行されているプロセスによっては、端末に表示されているものではなく、状態とそのプロセスによって行われたアクションを覗き込むで成功する場合があります。
特定のプロセスのPID(プロセスID)を何らかの方法で把握したと仮定した場合のいくつかの例(たとえば、pidof
またはps
を使用):
指定されたツールがサブコマンドを1つずつ起動する場合、ps
を使用して実行中のサブコマンドを確認します。
指定されたツールが作業ディレクトリを変更することがある場合は、/proc/<PID>/cwd
で確認してください。
与えられたツールが連続して多くのファイルを操作する場合、/proc/<PID>/fd
の下で開いているファイルを確認してください。現時点で何も表示されない場合は、プロセスが閉じたばかりで、次のプロセスを開こうとしている可能性があります。そのディレクトリの内容をもう一度確認してください。
コマンドが標準のread
/write
syscallsを使用して1つの巨大なファイルで動作する場合、/proc/<PID>/fd
でファイル記述子番号を見つけ、/proc/<PID>/fdinfo
で対応するファイルの現在のオフセットを確認できます。コマンドがpread
/pwrite
を代わりに使用する場合、次の箇条書きを参照してください。
strace
を使用してプロセスに接続すると、その処理を確認できます:strace -p <PID>
。その後すぐに終了します Ctrl+C (strace
のみを終了し、トレースしているアプリケーションは終了しません)。出力を調べて、アイデアを与える可能性のある関連するものを探します。たとえば、-e trace
オプションを使用して、この出力をファイル操作のみに制限します。表示されますアプリケーションによって開かれているファイル名、およびpread
/pwrite
操作が発生するオフセット。
コメントから、いくつかの潜在的な解決策がありますが、グラフィカル端末でコマンドを実行する前にそれらをすべて実装する必要があります。
たとえば、 https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/13564 を参照してください
そのため、同じXセッション内のユーザーは閉じたタブに再接続できません。
Muruの提案どおりにreptyrを試すことができます。これはクールなソリューションですが、最初からsshセッションを計画する方が良いでしょう。
より良い作業戦略を開発する必要があります。
個人的に私はスクリーンを使い慣れているのでスクリーンを使用し、あなたが述べる理由のために、私は常にsshを介してスクリーンセッションを使用します。多くの場合、ホスト上のVMごとに1つ以上のスクリーンセッションがあります。
VNC over ssh- https://www.cyberciti.biz/tips/tunneling-vnc-connections-over-ssh-howto.html
FreeNX- https://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/
https://help.ubuntu.com/community/Xpra
Xpraを使用すると、グラフィカルターミナルを起動して再接続できますが、ターミナルを起動する前に再度xpraを実行する必要があります。