netstat з повним іменем команди (як у htop)


0

Я запускаю кілька різних послуг через моно, кожен на там власний порт, але коли я використовую netstat, щоб перевірити, які призначені порту і які не мають, все, що я отримую, це 2 процеси, які називаються "моно", немає способу сказати що є, крім того, що дивиться на порт, який іноді може змінитися.

Чи можна отримати netstat, щоб показати "команду" для кожного порту, як htop робить для процесів?

Таким чином я можу сказати, який процес є який.

Відповіді:


1

Це зробило, але мені вдалося створити фільтр для додавання списку параметрів програми:

netstat -p | while l="$(line)";\
  do p="$(sed -En 's/^.*( [0-9]+)\/[^ ]*.*/\1/gp'<<<"$l")";\
     [ "$p" == "" ] || p=" ## $(ps -p $p -o cmd=)";\
     echo "$l"$p;\
  done

Примітки:

  • Очевидно, що ви не будете вводити цей код кожного разу: помістіть код фільтра у функцію або сценарій (у цьому випадку трейлінг ;\ рядки не потрібні).
  • Через буферизацію, коли netstat записує до труби, є затримка, перш ніж фільтр почне обробку ліній.
  • З тієї ж причини існує ймовірність того, що програма припиниться або exec інше між часом netstat виводить лінію і ps витягує аргументи для PID.
  • Шлях програми не відображатиметься, якщо він не був вказаний під час запуску програми ps шоу arg0 з рядка виконання програми.
  • Не всі системи мають line команда: якщо ви заміните while l=($line) з більш звичним while read -r lце призведе до урізання провідних і кінцевих пробілів; коли потрібно зберегти їх, можна скористатися while read -r, с $REPLY заміни $l (або while read -r; do l="$REPLY"; ... для точного еквівалента, с $l без змін).
  • Фільтр працює, читаючи рядок з netstat, використовуючи sed для вилучення PID з будь-якого номер / рядок послідовності, потім з використанням ps -p на цьому PID знайти параметри команди.
  • У фіналі echo "$l"$p, $p знаходиться за межами лапок: це видалення кінцевих пробілів (також проблема з wine програми), але він матиме побічний ефект стиснення декількох пробілів в параметрах до одного простору.

1
read -r зчитує зворотні риски. Для перевірки використання порт Ви, мабуть, тільки хочете TCP, можливо, хочете LISTEN, а також або замість ESTABLISHED, і, можливо, не потрібні імена -tanp або -tlnp. Оскільки PID / Prog поле останній ви могли б read -ra a потім використовуйте ${a[${#a[@]}-1]} але я б скористався awk like netstat...| awk '{p=$NF} sub(/\/.*/,"",p) {x=$0; "ps -p"p" -ocmd=" |getline; $1=$1; print x,$0}' де $1=$1 стискає та обрізає пробіли; тільки обрізати з кінця sub(/ *$/,"").
dave_thompson_085

@ dave_thompson_085 - Дякуємо за вдумливий коментар і, зокрема, за вказівку read -r: Я оновлю відповідь. Я припустив, що інші netstat будуть використані варіанти, але я зосередився на фільтрі, і використовував netstat -p щоб перевірити мій фільтр на всіх різних форматах записів, які виводяться, які включають записи, де послідовність PID / ім'я не в кінці рядка. Я припускаю, що це питання знайомства, але я більш звик до використання розширення bash або sed для типу фільтрування, з якою ви працюєте awk.
AFH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.