を使用してLinuxでファイルを削除しようとしましrm -rf file_name
たが、エラーが発生しました。
rm: file_name not removed. Text file busy
このファイルを使用しているプロセスを確認するにはどうすればよいですか?
回答:
fuser
次のようなコマンドを使用できます。
fuser file_name
ファイルを使用しているプロセスのリストを受け取ります。
より詳細な出力を受け取るために、さまざまなフラグを使用できます。
詳細については、フューザーのWikipediaの記事またはman
ページを参照してください。
fuser
実装が同じであるとは限らないか、同じように機能する可能性があります。-i
がPOSIXで定義されている場合でも、使用している特定の実装には、必ずしもWikipediaの記事で説明されているものと同じオプションがあるとは限りません。たとえば、私は現在AIXを使用していfuser
ますが、このシステムで使用可能なものにも-i
オプションがありません。
@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
どのプロセスが特定のソケットを使用しているかを調べるためにも使用できることに注意してください。あなたの兵器庫にある優れたツール。
lsof | head -1
すべてのヘッダーを表示します。
lsof | grep -E "PID|<your_process_name>"
は、1行目とクエリするプロセスの両方を示しています。
tree
標準入力から何を読みますか?はいの場合、その入力で何をしますか?
tree
ではなく、についてlsof
です。私の知る限りtree
、標準入力から読み取らないため、を実行するlsof
との出力は破棄されますlsof | tree ...
。それlsof | tree MyFold
が正しければ、はと同じtree MyFold
です。これはコンテンツを表示するだけで、どのファイルが何らかのプロセスによって開かれたかは表示しません。