を実行すると、w
ユーザーがviで特定のファイルを編集していることを確認できます。
ただし、異なるディレクトリに同じ名前の複数のファイルがあります。
これらのファイルのうち、ユーザーが編集しているファイルが何であるかをどうやって知ることができますか?
ベストアンサー1
次のようにlsof
ユーザーを選択してプロセスを検索できます。vim
sudo lsof -u user -a -c vim | grep swp
@Foxが指摘したように、古典的なアプローチは一時ファイルをvi
生成するため、/var/tmp
これを表示するには選択(テストしない)が必要です。
sudo lsof -u user -a -c vi | grep '/var/tmp/'
しかし、@Foxが指摘したように、クラシックファイルと実際のファイルを関連付けることはできず、答えで次にvi
議論するツールが必要です(クラシックのvi
場合はvim
それで十分ですlsof
)。通常vim
今日のLinuxではvi
。
バラより15 Linux lsofコマンドの例(オープンファイルの識別)
vim
例に戻ると、使用しているスワップファイルが次のようにfile
開かれていることがわかります。.file.swp
ユーザーがuser1
以下を行う場合vi file
:
$ sudo lsof -c vi -a -u user1 | grep swp
vi 3615 user1 3u REG 8,1 12288 265061 /home/user1/.file.swp
~からman lsof
-a はリスト選択オプションを AND に連結します。
-ccこのオプションは、c文字で始まるコマンドを実行するプロセスのファイルのリストを選択します。複数の -c オプションを使用して複数のコマンドを指定できます。 ANDオプションの選択に参加する前に、単一のORセットに追加されます。
-usこのオプションは、ログインまたはユーザーID番号がカンマで区切られたグループ内のユーザーのファイルのリストを選択します。
lsof
ルートとして使用できる他にも、sysdig
強力なデバッグフレームワークがあります。
これにより、システムで開いているすべてのファイルがリアルタイムで表示され、ファイルが開くとすぐにユーザー、PID、およびプロセスが一覧表示されます。
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open"
sysdig:システムレベルのナビゲーションとトラブルシューティングツール
SysdigはLinuxカーネルにインストールし、システムコールやその他のオペレーティングシステムイベントをキャプチャし、オペレーティングシステムレベルで物理マシンと仮想マシンを検出します。その後、sysdigのコマンドラインインターフェイスを使用してこれらのイベントをフィルタリングしてデコードして、有用な情報と統計を抽出できます。
Sysdigを使用すると、リアルタイムシステムをリアルタイムで確認したり、後で分析したりできるトレースファイルを作成できます。
snoopy
システム管理者にとって便利なツールとして、プロセスで行われたすべての呼び出しをsyslogに記録するツールをインストールすることもできます。ユーザーがコマンドラインから呼び出すと、vi file
システムログに表示されます。
インストールされたら、snoopy
削除するまでexecve()を介してすべてのプロセス呼び出しを記録することに注意してください。
snoopy: execve() ラッパーとロガー
snoopyは、syslog(authpriv)へのすべての呼び出しを記録するためにlibcによって提供されるexecve()関数の周りのラッパーとして機能する共有ライブラリです。システム管理者は、スヌーピーが軽量/重いシステムの監視、他の管理者のタスクの追跡、システムで何が起こっているのかについての良い「感覚」の取得(Apache実行cgiスクリプトなど)などのタスクに役立ちます。
インストールするには、次のようにしsnoopy
ますsysdig
。
$sudo apt-get install snoopy sysdig
関連質問も参照してください。Linuxバイナリが実行するタスクの理解