在 Linux 上,我可以使用netstat -pntl | grep $PORT或fuser -n tcp $PORT找出哪个进程(PID)正在侦听指定的 TCP 端口。如何在 Mac OS X 上获得相同的信息?
在 macOS High Sierra 上,使用以下命令:
lsof -nP -i4TCP:$PORT | grep LISTEN在旧版本上,使用以下形式之一:
lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN用端口号或逗号分隔的端口号列表替换$PORT 。
如果您需要有关#1024 以下端口的信息,请预先添加sudo (后跟空格)。
-n标志用于显示 IP 地址而不是主机名。这使得命令执行速度更快,因为获取主机名的 DNS 查找可能很慢(许多主机需要几秒或一分钟)。
-P标志用于显示原始端口号,而不是像http , ftp或更多深奥的服务名称(如dpserve , socalia等dpserve解析的名称。
有关更多选项,请参阅注释。
您还可以使用:
sudo lsof -i -n -P | grep TCP这适用于小牛队。
从 Snow Leopard(10.6) 到 Mojave(10.14) ,每个版本的 macOS 都支持这个:
sudo lsof -iTCP -sTCP:LISTEN -n -P
就个人而言,我最终在~/.bash_profile使用了这个简单的函数:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}然后listening命令给你的监听某个端口上的进程的列表,并listening smth里 grep 这对于一些模式。
有了这个,就可以很容易地询问特定的过程,例如listening dropbox或端口,例如listening 22 。
lsof命令有一些专门的选项来询问端口,协议,进程等,但我个人发现上面的功能更方便,因为我不需要记住所有这些低级选项。 lsof是非常强大的工具,但不幸的是使用起来不那么舒服。