如何确定给定进程(linux)正在打开哪些 TCP/UDP 端口?

Ale*_*x G 3 port netstat tcp lsof process

我知道如何使用 lsof 或 netstat 做相反的事情(找出哪个进程打开了给定的端口),但是对 Google 的广泛研究并没有帮助我解决相反的问题。

我知道我可以将“netstat -np”与一些 grep 和 sed 结合使用,但它看起来很笨拙。是否有反向版本的“lsof -i tcp:80”可以显示给定进程打开的所有本地端口?

lar*_*sks 11

查看手册页,您会发现您可以使用该-p选项来指定进程 ID,以及-i将显示限制为 Internet 域套接字的选项(-i4仅适用于 ipv4 和-i6仅适用于 ipv6)。所以如果你把它们串在一起......

lsof -p <pid> -i
Run Code Online (Sandbox Code Playgroud)

...你得到的并不完全是你想要的,因为默认情况下你lsof一起提出你的要求。所以添加-a() 标志......

lsof -p <pid> -a -i
Run Code Online (Sandbox Code Playgroud)

...您将获得指定进程 ID 打开的 IPv4 套接字列表。