在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?
当前回答
这是macOS High Sierra的一个好方法:
netstat -an |grep -i listen
其他回答
我是一个Linux人。在Linux中,使用netstat-ltpn或这些字母的任何组合都非常容易。但在Mac OS X netstat中,grep LISTEN是最人性化的。其他的非常难看,在排除故障时很难记住。
在最新的macOS版本上,可以使用以下命令:
lsof -nP -i4TCP:$PORT | grep LISTEN
如果你觉得很难记住,那么也许你应该创建一个bash函数,并用一个更友好的名称来导出它
vi ~/.bash_profile
然后将以下行添加到该文件并保存。
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
现在,您可以在终端中键入listening_on 80,并查看哪个进程正在侦听端口80。
在macOS Big Sur和更高版本上,使用以下命令:
sudo lsof -i -P | grep LISTEN | grep :$PORT
或者只看到IPv4:
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
对于旧版本,请使用以下表单之一:
sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN
用端口号或逗号分隔的端口号列表替换$PORT。
如果需要有关#1024以下端口的信息,请在sudo前面加上空格。
-n标志用于显示IP地址而不是主机名。这使得命令执行得更快,因为获取主机名的DNS查找可能会很慢(对于许多主机来说几秒钟或一分钟)。
-P标志用于显示原始端口号,而不是解析名称(如http、ftp)或更深奥的服务名称(如dpserve、socalia)。
有关更多选项,请参见注释。
为了完整,因为经常一起使用:
要终止PID:
sudo kill -9 <PID>
# kill -9 60401
对于已列出的、已建立的和已关闭的端口
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
对MichałKalinowski的回答稍有改进(我没有足够的声誉在那里留下评论):如果您试图发现进程正在监听一个编号为255及以下的端口,grep命令可能会打印与IP地址相关的行,而这些行与期望的结果不符。对于任何编号的端口,grep命令也可能错误地匹配设备的MAC地址或PID。为了改进这一点,我建议将命令更改为grep--color“:$1”
推荐文章
- 如何在交互式Python中查看整个命令历史?
- 为什么SCTP不常用/不为人所知
- 在OSX中永久设置PATH环境变量
- 如何停止mysqld
- 如何从远程SSH会话发送数据到本地剪贴板
- SSH端口转发~/。ssh /配置文件?
- 如何复制文件跨计算机使用SSH和MAC OS X终端
- Mac SQLite编辑器
- 在MacOS X上推荐用什么方式安装Node.js、nvm和npm ?
- 如何在Swift中删除视图的所有子视图?
- 如何在Mac OS Lion上从命令行启动MySQL服务器?
- 警告用户/local/mysql/data目录不属于mysql用户
- UDP和TCP比起来快多少?
- 在Mac OS X上使用鼠标聚焦(加上自动提升)
- 我在哪里可以找到Mac OS X Lion的“make”程序?