Як з’ясувати, який процес використовує файл у Linux?


92

Я намагався видалити файл у Linux за допомогою rm -rf file_name, але отримав помилку:

rm: file_name not removed.  Text file busy

Як я можу дізнатись, який процес використовує цей файл?

Відповіді:


137

Ви можете використовувати fuserкоманду, наприклад:

fuser file_name

Ви отримаєте список процесів, що використовують файл.

Ви можете використовувати різні прапори з ним, щоб отримати більш детальний результат.

Більше інформації ви можете знайти в статті Вікепедії термофіксатора або на manсторінках.


Я спробував це: fuser -i / home / bin / lib. Але отримав це: fuser: незаконний варіант - i / home / bin / lib: 27674t
khris

1
@khris, можливо, не всі fuserреалізації однакові або працюють однаково. Навіть якщо -iце визначено в POSIX, конкретна реалізація, яку ви використовуєте, не обов'язково має ті самі параметри, що й описані в статті Вікіпедії. Наприклад, я зараз використовую AIX, і fuserдоступний у цій системі також не має -iопції.
jimm-cl

З якихось причин ні я, fuserні lsofпрацював у мене над гостем віртуального ящика. Ця відповідь мене врятувала.
kael

34

Відповідь @ jim правильна - fuserце те, що ви хочете.

Додатково (або по черзі) ви можете використовувати, lsofщоб отримати більше інформації, включаючи ім’я користувача, на випадок, якщо вам потрібен дозвіл (без необхідності запускати додаткову команду), щоб убити процес. (Хоча, звичайно, якщо процес вбивства - це те, що ви хочете, fuserможете зробити це за допомогою його -kопції. Ви можете fuserвикористовувати інші сигнали з -sопцією - перевірте сторінку довідки для деталей.)

Наприклад, при tail -F /etc/passwdзапуску в одному вікні:

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

Зверніть увагу, що ви також можете використовувати, lsofщоб дізнатись, які процеси використовують конкретні сокети. Чудовий інструмент, який можна мати у своєму арсеналі.


яке поле є ПІД?
nmz787

@ nmz787 - lsof | head -1щоб побачити всі заголовки.
ghoti

@ nmz787 Друге поле - PID.
Forthe

lsof | grep -E "PID|<your_process_name>"показує як 1-й рядок, так і процес, який ви хочете зробити.
Робін Хсу,

-1
$ lsof | tree MyFold

Як показано на доданому зображенні:

введіть тут опис зображення


1
Як це працює? Чи treeчитає щось із stdin? Якщо так, що це робить із цим входом?
dyp

man lsof - відображає посібник для команди lsof, lsof - список відкритих файлів, у своєму стандартному вихідному файлі перелічує інформацію про файли, що відкриваються процесами, і результат, який можна побачити в деревній структурі. слід чітко перевірити, що таке lso
Blunt Notion

Моє питання стосується tree, ні lsof. Наскільки я розумію, treeне читає зі стандартного вводу, тому висновок lsofбуде відкинутий при запуску lsof | tree .... Якщо це правильно, тоді lsof | tree MyFoldце те саме tree MyFold, що просто відображає вміст, але не те, які файли відкриваються якимось процесом.
dyp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.