Linuxでファイルを使用しているプロセスを見つけるにはどうすればよいですか?


92

を使用してLinuxでファイルを削除しようとしましrm -rf file_nameたが、エラーが発生しました。

rm: file_name not removed.  Text file busy

このファイルを使用しているプロセスを確認するにはどうすればよいですか?

回答:


137

fuser次のようなコマンドを使用できます。

fuser file_name

ファイルを使用しているプロセスのリストを受け取ります。

より詳細な出力を受け取るために、さまざまなフラグを使用できます。

詳細については、フューザーのWikipediaの記事またはmanページを参照してください


私はこれを試しました:fuser -i / home / bin / lib。しかし、これを手に入れました:フューザー:違法なオプション-i / home / bin / lib:27674t
khris 2014

1
@khrisは、すべてのfuser実装が同じであるとは限らないか、同じように機能する可能性があります。-iがPOSIXで定義されている場合でも、使用している特定の実装には、必ずしもWikipediaの記事で説明されているものと同じオプションがあるとは限りません。たとえば、私は現在AIXを使用していfuserますが、このシステムで使用可能なものにも-iオプションがありません。
jimm-cl 2014

何らかの理由で、いずれfuserlsofVirtualBoxのゲストに私のために働いていました。この答えは私を救った。
ケール

34

@jimの答えは正しいです-fuserあなたが望むものです。

さらに(または代わりに)、lsofプロセスを強制終了するためのアクセス許可が必要な場合(追加のコマンドを実行する必要がない場合)に、ユーザー名を含む詳細情報を取得するために使用できます。(もちろん、プロセスを強制終了することが必要な場合は、fuserその-kオプションをfuser使用してそれを行うことができます。他のシグナルを使用することもできます。-s詳細については、manページを確認してください。)

たとえばtail -F /etc/passwd、1つのウィンドウで実行している場合:

ghoti@pc:~$ lsof | grep passwd
tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd

lsofどのプロセスが特定のソケットを使用しているかを調べるためにも使用できることに注意してください。あなたの兵器庫にある優れたツール。


PIDはどのフィールドですか?
nmz787 2017

@ nmz787-lsof | head -1すべてのヘッダーを表示します。
ghoti 2017

@ nmz7872番目のフィールドはPIDです。
forthe

lsof | grep -E "PID|<your_process_name>"は、1行目とクエリするプロセスの両方を示しています。
ロビンスー

0
$ lsof | tree MyFold

添付の画像に示すように:

ここに画像の説明を入力してください


1
これはどのように作動しますか?DOESは、tree標準入力から何を読みますか?はいの場合、その入力で何をしますか?
dyp

man lsof –コマンドlsofのマニュアルを表示します。lsof–開いているファイルを一覧表示し、プロセスによって開かれたファイルに関する情報を標準出力ファイルに一覧表示し、結果をツリー構造で確認できます。lsofとは何かを明確に確認する必要があります
Blunt Notion

私の質問は、treeではなく、についてlsofです。私の知る限りtree、標準入力から読み取らないため、を実行するlsofとの出力は破棄されますlsof | tree ...。それlsof | tree MyFoldが正しければ、はと同じtree MyFoldです。これはコンテンツを表示するだけで、どのファイルが何らかのプロセスによって開かれたかは表示しません。
dyp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.