Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从netstat端口检索路径的一个线性程序_Bash_Awk_Grep_Netstat - Fatal编程技术网

Bash 从netstat端口检索路径的一个线性程序

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告诉

我希望创建一个单行程序,在给定端口号(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/端口对应,而不是全部):

最后一个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,这可以在single
awk
中完成,如果您可以发布我们的命令
netstat
one的输出,那么您也可以得到这种解决方案。我想知道是否有人对返回的所有进程都有一个方法?添加了多进程列表,最后没有sed。现在,使用正确的netstat选项行而不是这个循环嵌套的awk肯定会更快。这是我发现的第一个实际可行的答案——谢谢你!这是我发现的第一个真正有效的答案——谢谢你!
netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p