コマンドの実行中に他のシェルでどのコマンドが実行されているかを観察する方法はありますか?両方のシェルはbashであり、重要な場合はrootアクセス権があります。追加のソフトウェアをインストールすることはできず、他のシェルで画面を実行するなどの特別なタスクを実行したくありません。
状況:私はLinuxコンピュータにリモートでログインし、同僚もログインします。彼女がシェルで実行したコマンドを見たいです。実行に 1 秒以上かかるコマンドを表示するには とwatch
の組み合わせが使用できることを知っていますが、これが非常に短いコマンドには役に立たないと思います。ps
答え1
あなたはルートだからいつもstrace -f -e execve -p her_bash_pid
。これは-f
シェルが事前に新しいプロセスをフォークするために必要ですexec
が、これはまた、サブプロセスが実行しているすべてを見ることができるという意味でもあります。
答え2
同僚がbashシェルの履歴設定の一部を変更できる場合は、tail -f /home/user/.bash_historyからこの情報を入手できます。シェルの終了時にではなく、各コマンドの後に.bash_historyを作成するために必要な設定は次のとおりです。
export PROMPT_COMMAND="history -a"
shopt -s histappend
しかし、私はスクリーンセッションが「理想的な」解決策だと思います。
答え3
いくつかの簡単な調査と熟考の最後に、次の可能なオプションのリストを提供できます。
- 彼女のbash_historyを読んでください。ただし、通常はログアウト時にのみ作成されます。askubuntu.comこの動作を変更する方法に関する投稿があります(編集する:@ジョーダン明らかに同じ考えを持っていて、より速く投稿されました...)。
- 彼女が物理端末(/dev/ttyX)にいる場合は、このプログラムを使用できます
conspy
。 - 彼女に利点を活用してください
screen
。あなたが彼女を探索するのではなく、ただ助けたい場合は、彼女は画面内でセッションを実行しようとします。その後、単に彼女のセッションに接続することができます。sudo -u herUsername screen -x
- 選択したログファイルにコマンドを書き込むシェルラッパースクリプトを作成できます。彼女のシェルを適切なスクリプトに設定する必要があります(これは単なるアイデアであり、うまくいくかもしれません)。
- 使用が
cat /dev/pts/X | tee /dev/pts/X
最初に浮上します。しかし、試してみた後は、実際には動作しませんし、非常に汚れたソリューションです。各文字は接続されている1つの端末にのみ印刷されます(これがtee
この端末と呼ばれる理由です)。試してみると、すべてのキャラクターを監視できます。少し想像してみると、彼女が何をしているのかを推測できます。
答え4
完了する@ジョーダン答え...両方とも同じユーザーアカウントを使用している場合、つまり出力
echo $HOSTNAME
echo $USER
あなたとあなたの同僚も同じです。それから私たちは楽しく遊ぶことができます。
別の端末ですぐに使用できるように、ある端末から呼び出されたコマンドを表示できます。
history
端末から呼び出すと、前のコマンドが表示されます。デフォルトでは、bashは各セッションの終わりに履歴を作成し、~/.bash_history file
既存のファイルを最新バージョンで上書きします。つまり、複数のbashセッションでログインすると、最後の最後のセッションにのみ履歴が保存されます。
------------------------------------- -----
編集~/.bashrc
して追加
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
どこ
history -a
~/.bash_history
セッションが終了せずにすぐにファイルに追加
history -c
現在のセッション履歴を消去する
history -r
~/.bash_history
添付したファイルをセッション履歴として読み直してください。
メモ: パラメーターには、PROMPT_COMMAND
実行するコマンドが含まれます。今後すべての新しいコマンドプロンプト。だからコマンド1次の場合にのみ履歴に保存されます。コマンド2処刑される
履歴を見やすくするために、各コマンドの横にタイムスタンプを追加することもできます。もう一度編集~/.bashrc
して追加してください。
export HISTTIMEFORMAT="%d/%m/%y %T "
複数の端末を使用し、使用可能なコマンド履歴が必要な場合にも良い方法です。 :)