在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?


当前回答

在最新的macOS版本上,可以使用以下命令:

lsof -nP -i4TCP:$PORT | grep LISTEN

如果你觉得很难记住,那么也许你应该创建一个bash函数,并用一个更友好的名称来导出它

vi ~/.bash_profile

然后将以下行添加到该文件并保存。

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

现在,您可以在终端中键入listening_on 80,并查看哪个进程正在侦听端口80。

其他回答

我是一个Linux人。在Linux中,使用netstat-ltpn或这些字母的任何组合都非常容易。但在Mac OS X netstat中,grep LISTEN是最人性化的。其他的非常难看,在排除故障时很难记住。

签出此项目/工具:procs

在MacOs上安装:brew安装过程

这允许您控制使用proc显示的内容。

要查看TCP/UDP端口,请在安装工具后将以下内容添加到~/.procs.toml。

[[columns]]
kind = "TcpPort"
style = "BrightYellow|Yellow"
numeric_search = true
nonnumeric_search = false
align = "Left"

[[columns]]
kind = "UdpPort"
style = "BrightGreen|Green"
numeric_search = false
nonnumeric_search = true
align = "Left"

以下是示例输出:

对于已列出的、已建立的和已关闭的端口

sudo lsof -n -i -P | grep TCP

仅适用于LISTEN端口

sudo lsof -n -i -P | grep LISTEN

对于特定的LISTEN端口,例如:端口80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

或者,如果你只是想要一个简洁的摘要(没有描述服务/应用程序),请使用NETSTAT。好的一面是,不需要sudo

netstat -a -n | grep 'LISTEN '

解释使用的项目:

-n禁止显示主机名

-i表示IPv4和IPv6协议

-P省略端口名

-所有套接字的[over netstat]

-n[over netstat]不解析名称,将网络地址显示为数字

在High Sierra 10.13.3和Mojave 10.14.3上测试最后一个语法netstat也适用于linux

在OS X上,可以使用netstat的-v选项来提供相关的pid。

类型:

netstat -anv | grep [.]PORT

输出将如下所示:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

PID是最后一列之前的数字,在本例中为3105

lsof -n -i | awk '{ print $1,$9; }' | sort -u

这显示了谁在做什么。删除-n以查看主机名(速度稍慢)。