Альтернативи для команди "lsof"?


20

У багатьох випадках "lsof" не встановлюється на машинах, з якими я маю працювати, але "функція" lsof була б дуже потрібна (наприклад, на AIX). : \

Чи є такі програми, як "lsof", у світі, що не стосується Windows?

ОНОВЛЕННЯ: для напр .: мені потрібно знати, що в яких процесах використовується каталог "/ home / username"?


1
Чи можете ви бути більш конкретними, будь ласка? Які системи, крім AIX (який, безумовно, підтримується lsof), ви маєте на увазі? Або існує лише один конкретний тип використання lsof, який ви маєте на увазі? Взагалі: чому б не lsof?
rozcietrzewiacz

Я використовую Linux 2.6.18-92.el5 GNU, і у мене немає lsof, а також не маю можливості використовувати lsof :(
SSH Це

Відповіді:


20

Я знаю fuser, дивіться, чи є у вашій системі.


що мені потрібно надати Fuser в якості параметра, щоб перелічити всі відкриті файли в системі? : О ти!
LanceBaynes

2
Команда sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lessможе відображати всі процеси з відкритими файлами у встановленій файловій системі /. Див. Сторінку чоловіка для отримання конкретної допомоги.
enzotib

ТИ! це дає вихід таким чином: pastebin.com/raw.php?i=2z19g6Rk - я гугл за це, але я не можу знайти жодного способу вивести напр .: "gnome-screensaver", а не "gnome-screensav" - так як я можу вивести його з широкими іменами команд? : O
LanceBaynes

він дає такий же вихід для: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes,

Щось подібне:sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

Unix Rosetta Stone є хорошим ресурсом для такого роду питань. Тут згадується кілька альтернатив для lsof (див. Нижче). Зауважте, однак, що lsof є фактичним стандартним додатком для того, що він робить.

Якщо ви хочете лише знайти ідентифікатори процесів, у яких відкритий конкретний файл, ви можете використовувати його fuserв будь-якій системі, сумісній з POSIX.

В операційних системах з /procкаталогом ви можете запитувати файли, відкриті процесом (зворотний з lsofнайбільш поширеного режиму роботи) за допомогою інформації в /proc. Деякі операційні системи мають для цього команди:


8

Якщо у вас трапляється запускати Solaris, альтернативою lsof, яка не встановлена ​​за замовчуванням і може задихнутися на ZFS pfiles.

наприклад:

pfiles /proc/*


2

Моя версія, лише трохи менше працює утиліт:

for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
    ls -l ${proc_pid}/fd 2>/dev/null \
    | grep -q "$search_term" \
    && echo "${proc_pid#/proc/}"; \
done

Правда, він може працювати не з усіма кутовими справами, але працює в моєму випадку використання.


0

Це повинно зробити трюк. Він дасть усі відображення файлу дескриптора, крім тих, які:

  • у вас немає дозволу на перегляд, або
  • призначені для файлів, що містять рядок "Дозвіл відхилено"
( find /proc -mindepth 1 -maxdepth 1 \
  | grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
  | xargs ls -l \
  | grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less

Якщо ви вже знаєте, що вас цікавлять лише відображення для певних програм, замість цього ви можете використовувати щось більше:

exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less

-2

Іноді lsofвстановлюється в/usr/sbin

Якщо /usr/sbinце не ваша частина $PATH, ви можете пропустити навіть встановлену команду.

Перевірте це

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

ОП заявила, що lsof не встановлено, і попросила альтернативи ...
Jeff Schaller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.