一个从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**(,它可以正常工作。。。我显然错过了什么。。。很明显,但我看不出是什么?

尝试类似的操作(它需要对应的第一个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}'

这将为您提供pid:

<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

最新更新