Я могу выполнить netstat -atulpn | grep java
чтобы найти все процессы Java с сопутствующими им портами, что замечательно, однако я хотел бы также показать аргументы полного выполнения процессов. Я не верю, что это возможно с netstat
из всего, что я исследовал до сих пор, и поэтому я подумал, что мне придется написать скрипт для обработки вывода netstat
а затем передайте pid в ps
а затем преобразите вывод, чтобы показать порт ip + и полную командную строку.
Есть ли лучший способ сделать это или это единственный вариант?
ss -lnptu передается в awk с вызовом ps -p. Я использую мобильное устройство, поэтому сейчас немного сложно напечатать полный пример.
Слушающие розетки:
ss -lnptu | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'
Все сокеты (вероятно, потребуется дополнительная фильтрация из-за сокетов без информации о процессе в TIME_WAIT и т. Д.):
ss -anptu state listening state established state connected state unconnected | grep -v TIME_WAIT | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'
Я получал ошибки от ps
на Ubuntu 16.04 при использовании ответа Марка Стерджилла как есть. Потребовалась небольшая модификация, чтобы заставить его работать: в основном добавлен дополнительный split
для дальнейшей изоляции числового PID от объединенного формата, который ss
возвращает (например, pid=1306 -> 1306
). Я также добавил -ww
флаг, чтобы ps выводил полные аргументы:
ss -lnptu | awk 'NR>1 { split($7,p,","); split(p[2],pid,"="); printf "Listen: "$5 " Command: "; system("ps --no-headers -ww -o args p "pid[2]); }'
@ylluminate, для CentOS измените его на ss -lnptu | awk 'NR>1 { split($6,p,","); printf "Listen: "$4 " Command: "; system("ps --no-headers -o args p "p[2]); }'