一线从netstat端口检索路径

时间:2018-11-05 08:42:59

标签: bash awk grep netstat

我正在寻找一个单一的衬垫,给定端口号(2550)使用netstat返回的值,它将允许我针对ps -ef运行结果输出以返回所讨论进程的路径。我有:

ps -ef | grep $(netstat -tonp | grep 2550 | awk '{split($7,a,"/"); print a[1]}')

虽然我知道

netstat -tonp | grep 2550 | awk '{split($7,a,"/"); print a[1]}'

返回预期的结果,随后的grep告诉我没有这样的文件或目录(但是,如果我执行ps -ef | grep **),它就可以正常工作……我显然缺少了一些东西。 ..很好,很明显,但是我看不到什么?

2 个答案:

答案 0 :(得分:1)

尝试类似的方法(它需要对应的第一个PID /端口,不是全部):

Port=2550;ps -f --pid $( netstat -tonp |  awk -F '[ \t/]+' -v Port=$Port '$0 ~ "([0-9]+[.:]){4}" Port { PID= $7;exit}; END { print PID+0 }' ) | sed 's/^\([^ \t]*[ \t]*\)\{7\}//'

最后一个sed假设有ps这样的答复(空格很重要):

usertest  4408  4397  0 09:43 pts/6    00:00:00 ssh -p 22 -X -l usertest 198.198.131.136

对于每个PID且没有结尾sed:

Port=2550; ps -ef | awk -v PIDs="$( netstat -tonp |  awk -F '[ \t/]+' -v Port=${Port} '$0 ~ (":" Port) { print $7}' )" 'BEGIN{ split( PIDs, aTemp, /\n/); for( PID in aTemp) aPID[ aTemp[PID] ] }; $2 in aPID { sub( /^([^ \t]*[ \t]*){7}/, ""); print}'

答案 1 :(得分:1)

这将为您提供pids:

<sudo> netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}'

您可以使用xargs将pid传递给ps

netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p
相关问题