簡體   English   中英

結合Netstat和PS的輸出-Linux

[英]Combine output of Netstat and PS - linux

我想結合以下命令的輸出:

-netstat

    [root]# netstat -nltp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:32552 0.0.0.0:*               LISTEN     
 151634/java

-PS

[root]# ps -eo pid,cmd | grep 151634
130485 grep --color=auto 151634
151634 java -classpath

我想結合以下2條命令,並具有以下輸出(txt文件):

PORT PID CMD
123  333 java/etc
234  444 java/etcetc
345  555 java/etcetcetc

我做了以下事情:

netstat -nltp | awk '{print $4}' | sed -e 's/.*://' 

這將從netstat -nltp輸出打印PORT

for i in `netstat -nltp | awk {'print $7}' | awk -F '/' {'print $1'} | uniq` ; do ps -eo pid,cmd | grep $(echo $i | sed "s/^\(.\)/[\1]/g") ; done 

這將從netstat -nltp命令獲取PID,然后從PS命令顯示PID和CMD(並且不包括顯示grep --color = auto結果

非常感謝你!

LE:我已經刪除了輸出html以避免混淆。 這只是有關其外觀的一個示例。

非常感謝JUSHJUSH,

我在這里寫了我的回復,因為評論回復的時間太長了。

我還使用該FOR更新了腳本,並且該腳本可以正常工作,但是,該腳本似乎無法獲得正確的輸出。

我會在下面解釋

如果我有以下netstat -nltp輸出

tcp 0 0 127.0.0.1:32552 0.0.0.0:* LISTEN 151634/java tcp 0 0 10.77.66.33:8081 0.0.0.0:* LISTEN 151634/java tcp 0 0 0.0.0.0:7070 0.0.0.0:* LISTEN 151634/java tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 151634/java tcp 0 0 0.0.0.0:20100 0.0.0.0:* LISTEN 151634/java tcp 0 0 0.0.0.0:20101 0.0.0.0:* LISTEN 151634/java tcp 0 0 0.0.0.0:20102 0.0.0.0:* LISTEN 151634/java

並且PID = 151634的CMD為java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar:

該腳本給出以下輸出: PORT PID CMD 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar: 32552 151634 java -classpath /opt/application/nifi-1.6.0/./conf:/opt/application/nifi-1.6.0/./lib/jetty-schemas-3.1.jar:

輸出應為PORT PID CMD 32552 151634 CMD from above 8081 151634 CMD from above 7070 151634 CMD from above 9090 151634 CMD from above 20100 151634 CMD from above 20101 151634 CMD from above 20102 151634 CMD from above

或者,另一個例子:

如果我有以下netstat -nltp輸出

tcp 0 0 127.0.0.1:3030 0.0.0.0:* LISTEN 88284/ruby tcp 0 0 127.0.0.1:3031 0.0.0.0:* LISTEN 88284/ruby

並且PID = 88284的CMD為/opt/sensu/embedded/bin/ruby /opt/sensu/bin/sensu-client -c /etc/sensu/config.json -d /etc/sensu/conf.d -e /etc/sensu/extensions -p /var/run/sensu/sensu-client.pid -l /var/log/sensu/sensu-client.log -L warn

該腳本提供以下輸出: PORT PID CMD 3030 88284 /opt/sensu/embedded/bin/ruby /opt/sensu/bin/sensu-client -c /etc/sensu/config.json -d /etc/sensu/conf.d -e /etc/sensu/extensions -p /var/run/sensu/sensu-client.pid -l /var/log/sensu/sensu-client.log -L warn 3030 88284 /opt/sensu/embedded/bin/ruby /opt/sensu/bin/sensu-client -c /etc/sensu/config.json -d /etc/sensu/conf.d -e /etc/sensu/extensions -p /var/run/sensu/sensu-client.pid -l /var/log/sensu/sensu-client.log -L warn

輸出應該是PORT PID CMD 3030 88284 CMD from above 3031 88284 CMD from above

非常感謝您的幫助和耐心!

好的,因此,我設法使腳本解決了所有重復出現的問題,等等。在其他人需要的情況下,您可以在下面找到更新的腳本。 謝謝! :)

netstat -ntlp | sed 1,2d > /tmp/output_netstat.txt

echo PORT$'\t'PID$'\t'NAME
for port in $(cat /tmp/output_netstat.txt | awk '{print $4 " " $7}' | sed -e 's/.*://' | awk '{print $1}' | uniq)
do
    pid=$(cat /tmp/output_netstat.txt | grep -w "$port" | awk '{print $7}' | cut -d ' ' -f 7 | cut -d '/' -f 1 | uniq )
    ps_name=$(cat /tmp/output_netstat.txt | awk '{print $4 " " $7}' | sed -e 's/.*://' | sed 's/\// /g' | awk '{print $3}')
    ps_name_outputed=$(ps -ef | grep "$pid" | grep "$ps_name" | grep -v grep |tr -s ' '| sed 's/^[^0-9]*//g' | head -1 | cut -f2- -d/)
    echo  "$port"" ""$pid"" ""$ps_name_outputed"
done

rm -rf /tmp/output_netstat.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM