Bash 从netstat端口检索路径的一个线性程序
我希望创建一个单行程序,在给定端口号(2550)的情况下,它使用netstat返回的值,然后允许我针对ps-ef运行结果输出,以返回有问题的进程的路径。我有:Bash 从netstat端口检索路径的一个线性程序,bash,awk,grep,netstat,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 $(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/端口对应,而不是全部):
最后一个sed假设ps回复如下(空格很重要):
对于每个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/端口对应,而不是全部):
最后一个sed假设ps回复如下(空格很重要):
对于每个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}'
这将为您提供pids:
<sudo> netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}'
这将为您提供pids:
<sudo> netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}'
我必须学会不要避免使用sed!这是一个简洁的解决方案,具有良好的引导可读性。谢谢@AskJarv,这可以在single
awk
中完成,如果您可以发布我们的命令netstat
one的输出,那么您也可以得到这种解决方案。我想知道是否有人对返回的所有进程都有一个方法?添加了多进程列表,最后没有sed。现在使用正确的netstat选项行而不是这个循环嵌套的选项行肯定更快了。awkI必须学会不要避免使用sed!这是一个简洁的解决方案,具有良好的引导可读性。谢谢@AskJarv,这可以在singleawk
中完成,如果您可以发布我们的命令netstat
one的输出,那么您也可以得到这种解决方案。我想知道是否有人对返回的所有进程都有一个方法?添加了多进程列表,最后没有sed。现在,使用正确的netstat选项行而不是这个循环嵌套的awk肯定会更快。这是我发现的第一个实际可行的答案——谢谢你!这是我发现的第一个真正有效的答案——谢谢你!
netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p