如何确定哪个TCP / UDP端口正在打开一个给定的进程(Linux)?

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

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

看看手册页,你会发现你可以使用-p选项指定一个进程ID,而-i选项限制显示到互联网域套接字( -i4仅用于ipv4和-i6只用于IPv6的)。 所以如果你把它们串起来

 lsof -p <pid> -i 

…你得不到你想要的,因为默认情况下lsof或者一起请求。 所以添加-a )标志…

 lsof -p <pid> -a -i 

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

我知道我可以使用netstat -np结合一些grep和sed,但似乎hacky。

这个怎么样:

 # netstat --inet -nlp | grep <processname> 

是否有反向版本的lsof -i tcp:80会显示给定进程打开的所有本地端口?

 # lsof -c <processname> | grep LISTEN