別のシェルで実行されたコマンドを確認するにはどうすればよいですか?


9

コマンドが実行されているときに、別のシェルで実行されているコマンドを監視する方法はありますか?どちらのシェルもbashであり、必要に応じてrootアクセス権を持っています。追加のソフトウェアをインストールできません。また、実行画面のような特別なことを他のシェルに行わせたくありません。

状況:Linuxマシンにリモートでログインしているため、同僚もいます。彼女が彼女のシェルで実行しているコマンドを見たいのですが。私はいくつかの組み合わせを使用することができることを知っているwatchし、ps実行に時間が秒以上かかり任意のコマンドを見て、私はそれが非常に短いコマンドで役立つだろうとは思いません。


5
killおよびなどの組み込みコマンドは、cdサブプロセスを生成せず、ps出力に表示されません。
ヨルダン08

@jordanmありがとう、それは良い点です。fork / execを引き起こすコマンドだけでも、おそらくそれで十分でしょう。
トムパンニング

回答:


7

あなたはrootなので、いつでもできますstrace -f -e execve -p her_bash_pid。これ-fは、シェルがの前に新しいプロセスをフォークするために必要ですexecが、これは、子プロセスが実行するものもすべて表示されることを意味します。


おかげで、execのstraceの出力をgreppingすると、かなり読みやすくなります。子供たちの子供たちを追い続けているという事実はいつの日か私を混乱させると確信していますが、今のところ私は安全だと思います。execを呼び出した後、プロセスから自動的にデタッチする方法がないのは残念です。
トムパンニング

オープンソースです。本当に必要な場合は、いつでもその機能を追加できます。:)または、PIDを無視するとstrace出力を解析する、もう少しインテリジェントなスクリプトを追加しexecます。
ジム・パリ

5

同僚がbashシェルのいくつかの履歴設定を変更できる場合は、tail -f /home/user/.bash_historyからこの情報を取得できます。シェルの終了時ではなく、各コマンドの後に.bash_historyを書き込むために必要な設定を次に示します。

export PROMPT_COMMAND="history -a"
shopt -s histappend

スクリーンセッションは "理想的な"解決策だと思います。


5

簡単な調査(およびいくつかの考え)の後、次の可能なオプションのリストを提供できます。

  • 彼女のbash_historyを読んでください。ただし、通常はログアウト時にのみ書き込まれます。askubuntu.comには、その動作の変更に関する投稿があります(編集@jordanmは明らかに同じ考えを持っていて、投稿がより高速でした...)。
  • 彼女が物理端末(/ dev / ttyX)を使用している場合は、プログラムを使用できますconspy
  • 彼女を利用してくださいscreen。彼女をスパイせずに支援したいだけの場合は、画面内でセッションを実行してもかまいません。その後、単に彼女のセッションにアタッチすることができますsudo -u herUsername screen -x
  • コマンドを任意のログファイルに記録するシェルラッパースクリプトを作成できます。彼女のシェルをそのスクリプトに設定する必要があります(これは単なるアイデアであり、機能する場合と機能しない場合があります)。
  • cat /dev/pts/X | tee /dev/pts/X最初に思いついたのは使用することでした。しかし、試した後は実際には機能せず、非常に汚いソリューションです。すべての文字は、接続されている端末の1つにのみ出力されます(これteeも呼び出しの理由です)。それを試すとき、私は一文字おきにスパイすることができました。少し想像力があれば、彼女が今何をしているのか推測できます...

間違った:conspyがttyで機能しない
Zibri

3

GNU screenは、これまでのIMOの最高の表彰です。GNU画面(またはtmux)が使用できない場合は、同僚に実行してもらいますscript -f

そして、あなたは行って、彼女がやっているものを見ることができますtail -fn +0 /path/to/typescript


0

Unix画面ターミナルを共有して、同僚の入力と出力をリアルタイムで確認できるようにするには、Unix screenコマンドを使用します。

  1. あなたと同僚はsshで同じUnixユーザーとしてログインします
  2. コマンドを入力します

    screen -d -m -S myscreenname

    screen -x myscreenname

    (もちろん、myscreennameをスクリーン名にしたいものに置き換えてください)。

  3. 同僚がコマンドを入力します

    screen -x myscreenname

  4. Unix端末の共有を完了するには、どちらのユーザーもコマンドを入力できます

    exit

画面の優れた機能は、Unixターミナルからコマンドを入力でき、同僚が画面に出力を表示できることです。これは、ペア管理と後輩のUnix管理者を行うための優れた方法です。


0

@jordanmの回答を完了するには...両方が同じユーザーアカウントを使用している場合、つまり、

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追加したファイルを読み取り、セッション履歴に戻します

注:パラメータは、実行されるコマンドが含ま前にプロンプトそれぞれの新しいコマンドを。したがって、command1は、command2が実行されたときにのみ履歴に保存されますPROMPT_COMMAND

また、履歴を表示する際に便利なように、各コマンドの横にタイムスタンプを付けることもできます。もう一度、あなた~/.bashrcを編集して追加します

export HISTTIMEFORMAT="%d/%m/%y %T "

また、複数の端末を使用したい場合や、コマンドの履歴を利用できるようにしたい場合にも便利です。

より詳しい情報

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.