从 netstat 端口检索路径的单行程序
One-liner to retrieve path from netstat port
我正在寻找创建一个单一的班轮,给定一个端口号 (2550) 使用来自 netstat 的 returned 值将允许我然后 运行 结果输出反对 ps -ef 到 return 相关进程的路径。我有:
ps -ef | grep $(netstat -tonp | grep 2550 | awk '{split(,a,"/"); print a[1]}')
虽然我知道
netstat -tonp | grep 2550 | awk '{split(,a,"/"); print a[1]}'
returns 预期的结果,随后的 grep 告诉我没有这样的文件或目录(但是,如果我执行 ps -ef | grep **),它就可以正常工作很好...我显然遗漏了一些东西...好吧,很明显,但我看不到什么?
尝试类似的东西(需要第一个 PID/port 对应,而不是全部):
Port=2550;ps -f --pid $( netstat -tonp | awk -F '[ \t/]+' -v Port=$Port '[=10=] ~ "([0-9]+[.:]){4}" Port { PID= ;exit}; END { print PID+0 }' ) | sed 's/^\([^ \t]*[ \t]*\)\{7\}//'
最后一个 sed 假设 ps 回复是这样的(space 很重要):
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} '[=12=] ~ (":" Port) { print }' )" 'BEGIN{ split( PIDs, aTemp, /\n/); for( PID in aTemp) aPID[ aTemp[PID] ] }; in aPID { sub( /^([^ \t]*[ \t]*){7}/, ""); print}'
这将为您提供 pids:
<sudo> netstat -tulpen | awk ' ~ /:2550$/{sub("/.*","",$NF);print $NF}'
您可以使用 xargs
将 pid 传递给 ps
:
netstat -tulpen | awk ' ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p
我正在寻找创建一个单一的班轮,给定一个端口号 (2550) 使用来自 netstat 的 returned 值将允许我然后 运行 结果输出反对 ps -ef 到 return 相关进程的路径。我有:
ps -ef | grep $(netstat -tonp | grep 2550 | awk '{split(,a,"/"); print a[1]}')
虽然我知道
netstat -tonp | grep 2550 | awk '{split(,a,"/"); print a[1]}'
returns 预期的结果,随后的 grep 告诉我没有这样的文件或目录(但是,如果我执行 ps -ef | grep **),它就可以正常工作很好...我显然遗漏了一些东西...好吧,很明显,但我看不到什么?
尝试类似的东西(需要第一个 PID/port 对应,而不是全部):
Port=2550;ps -f --pid $( netstat -tonp | awk -F '[ \t/]+' -v Port=$Port '[=10=] ~ "([0-9]+[.:]){4}" Port { PID= ;exit}; END { print PID+0 }' ) | sed 's/^\([^ \t]*[ \t]*\)\{7\}//'
最后一个 sed 假设 ps 回复是这样的(space 很重要):
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} '[=12=] ~ (":" Port) { print }' )" 'BEGIN{ split( PIDs, aTemp, /\n/); for( PID in aTemp) aPID[ aTemp[PID] ] }; in aPID { sub( /^([^ \t]*[ \t]*){7}/, ""); print}'
这将为您提供 pids:
<sudo> netstat -tulpen | awk ' ~ /:2550$/{sub("/.*","",$NF);print $NF}'
您可以使用 xargs
将 pid 传递给 ps
:
netstat -tulpen | awk ' ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p