如何解析netstat命令以从中获取进程名称和PID?

yar*_*art 23 linux bash parsing

我正在尝试确定哪些应用程序正在使用某个端口并获取netstat -tlnp | grep <port> for Linux.

此命令返回以下输出:

(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)  
tcp  0  0 0.0.0.0:<port>  0.0.0.0:*  LISTEN  3591/java
Run Code Online (Sandbox Code Playgroud)

我需要获得结果只有进程和PID的名称,即java 3591.

什么是最好的方法呢?

谢谢.

Pau*_*ce. 30

尝试

ps -p $(lsof -ti tcp:80) o comm=,pid=
Run Code Online (Sandbox Code Playgroud)

要么

netstat -tlnp | awk '/:80 */ {split($NF,a,"/"); print a[2],a[1]}'
Run Code Online (Sandbox Code Playgroud)


Sha*_*hin 15

(略微偏离原始问题),找出哪个进程侦听某个端口号,我通常使用该lsof命令.例如:

lsof -i tcp:80
Run Code Online (Sandbox Code Playgroud)

要仅显示进程名称和PID,请使用以下命令解析输出:

lsof | tail -n +2 | awk '{print $1 " " $2}'
Run Code Online (Sandbox Code Playgroud)

tail命令会跳过输出标题,同时awk打印出所需的列.

为什么 lsof

尝试grep输出netstat可能会很麻烦,因为您需要确保匹配正确的列.一个强大的解决方案可能相当漫长而且很难(无论如何)按需生产.

lsof为您节省匹配正确端口的麻烦,并且还有许多其他用途,例如我们现在正在做的事情的反转(找出进程正在使用哪些端口),或者确定哪个进程正在使用文件/安装点(或反向).有关更多示例,请参见lsof联机帮助页.