如何查看端口占用(windows,linux,mac)

这篇具有很好参考价值的文章主要介绍了如何查看端口占用(windows,linux,mac)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何查看端口占用,各平台

一、背景

如何查看端口占用?网上很多,但大多直接丢出命令,没有任何解释关于如何查看命令的输出

所谓 “查端口占用”,即查看某个端口是否被某个程序占用,如果有,被哪个进程占用。PS:进程都有进程ID标识。

二、命令概览

适用平台 命令 作用 补充
Linux netstat -tunlp|grep 8080 查看占用8080端口的进程ID MacOS中用不了。看第四列(即本地地址),看完全匹配端口号的那行所对应的PID。这个命令本身就查出LISTEN正在监听的! (Linux显示为LISTEN,Windows显示为LISTENING,一个意思)
Windows netstat -ano|findstr 8080 查看8080端口占用的进程ID findstr也可以用findStr,8080也可以用双引号 “8080”。看第二列(即本地地址),看完全匹配端口号且状态是LISTENING的那行所对应的PID。
MacOS/Linux lsof -i:8080 查看8080端口占用的进程ID MacOS中用,Linux可以用,但Linux可能默认没这个命令得自己装。如果遇到问题可以尝试加上sudo在前面:sudo lsof -i:8080,这个命令是精确匹配8080端口,不会将18080的占用显示出来

注意,Linux的LISTEN状态就是Windows里的LISTENING状态,一个意思用了不同单词

三、命令的输出结果详细解释

3.1、Windows:netstat -ano|findstr 8080

将端口号替换成你想查的的端口号即可

3.1.1、返回的结果类似于

macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

这么多列,从左到右的含义是:协议、本地地址、外部地址、状态、进程ID

记不住使用 netstat -ano 可输出表头(注意表头和值有点没对齐)
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

netstat -ano|findstr 8080 的findstr,或者Linux的grep的含义是对前面的输出的结果,即一行行的结果,过滤出带有8080字符串的每一行,重新组成结果。过滤规则是前后模糊匹配,即%yourKeyword%,无论一行中哪列带有8080字符串都会过滤出来,比如本地地址或外部地址都有可能因为含有8080而被匹配。显然表头因为不包含8080会被过滤掉,这就是为什么过滤后不显示表头的原因,你用 netstat -ano|findstr 本地 就可以过滤出表头。

3.1.2 命令的输出结果解读正式开始

如果什么都没输出,就是没有任何进程占用这个端口
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

如果有占用,至少会输入如下
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

有时候复杂一点,会输出
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

如何查看呢,这么多8080,而且进程ID还不一样

  • 首先要看第二列,看第二列中是8080端口的
  • 最后看 LISTENING 状态的

这样过滤后就会剩下2条,其中一条是IPv4另一条是IPv6,都是一样的,提示被12636进程占用

IPv4的写法:0.0.0.0:8080,IPv6的写法:[::]:8080

有时候会查不到LISTENING状态的,但是又查出了其他的东西,这时候其实是没有端口占用的
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

这种情况的出现是因为,比如8080本身是启动的,被访问后就会留下痕迹,然后8080的进程被杀掉后则LISTENING状态的立即会消失,但是其他状态的还会缓存一段时间,实际测试过一段时间(具体我没数多久)后再查,就什么都没了

3.1.3 其他可能的疑惑的说明
  • 为什么有2行?

    一行是IPv4的,另一行IPv6。虽然2行但进程ID其实是相同的,没有不一致。其实详细的我也不那么清楚,有知道更多细节的可以留言。

  • 为什么要看第二列(本地地址),为什么是第二列不是第三列(外部地址),为什么要看 LISETNING 状态的?

    • 首先,基础知识是,双方要连接,则双方的进程都得有地址(IP和端口号)才能连,所以有两个地址。

      比如你在浏览器访问某个网站,表面看似乎你本机不需要IP和端口,实际你打开浏览器的开发者工具,可以看到发出的每个请求,都有你本地

    • 一般来说,你要查某个端口被占用,那这个端口肯定是被一直占用着才犯得着你来排查,所以要查 LISTENING 状态的,因为 LISTENING 就是持久占用、正在监听中的。

    • 要查看本地地址而不是远程,是因为本地地址才是某个服务启动之后一直占用端口的,远程地址是远程要连接本机的IP和端口,肯定是不用管远程地址,毕竟远程地址要连接服务器用的一般都是临时的端口号用完即回收的

      我们在使用 jmeter 压测的时候,其实是有个基础知识的,就是你要模拟超过6万多个用户同时访问某个接口,单机是不行的。因为,比如你的 jmeter 安装在A机器,操作系统最多就65536个端口号,要在A机器同时模拟这么用户,就得同时起这么多线程,一个线程代表一个用户,那每个线程要占用一个端口号跟被压测的服务器上的接口通信,一台机器的最多65536个端口号被同时使用,所以一台机器能同时压测的数量自然是受到最大端口数限制的

    • 第二列中的 0.0.0.0:8080 中,0.0.0.0 是指不限制远程的端口号

      熟悉 Redis 配置的都知道有个 bind 配置,0.0.0.0就是表示谁都可以连上来,而127.0.0.1就是只有本地可连,这样子可以限制远程连上来的IP,更安全。这里是同样的意思
      macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

3.2、Linux (有些原理的东西跟Windows一样,建议有不清楚的可以翻看Windows的)

使用 netstat -tunlp|grep 8080,该命令记忆tunlp,tun+lp,囤老婆。。。最后输出的列的顺序跟这些字母没关系,例如netstat -tunpl|grep 8080 输出的并不会调换列的位置

由于该命令的 l 参数只查出 LISTEN 状态(即监听中)的了,所以不需要人工过滤监听中的状态了,只需要看第4列的地址,即本地地址,只要看这列能完整匹配你要查的端口号即可,匹配后的那行的PID就是你要找的。

同样的,你若不知道表头,可以让命令去掉grep的部分查一下,即 netstat -tunlp 查下,可以发现依次是:Proto,Recv-Q,Send-Q,Local Address,Foreign Address,State,PID/Program name

(TODO:补充截图)

3.3、MacOS
3.3.1、使用 lsof -i:8080

可以查占用8080端口的程序,如果需要可以加sudo,如sudo lsof -i:8080

结果解读

  • 输出的结果如下图,有多个,但是要看LISTEN状态的。

  • 这个命令的端口参数是精确匹配的,即精确匹配8080,不会匹配到18080的端口的占用,我已经做过了实验,验证过。

如下图,如果某个端口没有占用,则什么都没
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

如下图,如果虽然有输出结果,但是没有LISTEN状态的(看箭头括号里的),也是没有任何程序占用

(为什么会没有LISTEN状态的?这个可能是因为之前的缓存,如果刚刚8080端口的程序被访问过,然后8080端口程序立即被杀掉,就立即没有LISTEN状态的,但是因为访问过8080端口的程序就会有点缓存,过一段时间再查就会发现以下的信息都没了)
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

如下图,如果有一条是LISTEN状态的,这样查看PID就找到了占用程序
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

怎么证明我上述 lsof -i:8080 查出来的8080而不是18080的?我同时启动了8080和18080两个web程序,可以看到lsof -i:8080的结果没有掺杂18080端口的结果,而且使用 lsof -i:18080是能正确找到真正的占用程序的
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

3.3.2 使用 netstat 命令(明确这个命令似乎行不通)

MacOS也是可以使用 netstat 命令,只是参数跟 Linux的不太一样,这是因为macOS 使用的是基于 BSD 的网络工具,因此 netstat 命令的参数和输出格式可能会与 Linux 中的稍有不同。

使用的命令是 netstat -an|grep 8080,但是非常不幸的是这个命令不能输出PID列, netstat --help查看了帮助文档似乎也没什么参数可以支持,所以暂时无解,无法使用netstat在MacOS中查看端口占用。评论区知道的可以补充一下。

四、补充:

关于netstat的用法,在Linux/Windows中可以使用 netstat --help 列出后面的选项的字母代表的意思,Windows默认输出中文,还可以先 chcp 437命令之后切换成英文之后再查命令的帮助。

  • Windows 中文版和英文版
    macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

中文版如下
macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

  • Linux

(TODO待补充)

  • MacOS

    • lsof命令
      macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos

    • netstat 命令

      下面的命令提示了使用方式,似乎提示了 illegal option,也许 netstat --help 对于 macOS 来说并不是查看命令的方法,只是因为用错了命令才提示正确的Usage?

      不管怎么样,都提示了使用方式,如果不嫌长篇大论,可以使用 man nestat 查看命令的使用方式
      macbook 查看端口占用,Linux/Shell/硬件/操作系统,windows,linux,macos文章来源地址https://www.toymoban.com/news/detail-767085.html

到了这里,关于如何查看端口占用(windows,linux,mac)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows系统如何查看占用的端口

      在有些时候,我们需要知道Windows系统占用了那些端口。比如,需要在服务器上部署一个应用程序时,需要给这个应用程序提供空闲端口用来通信。除了一些约定俗成的端口外,例如,HTTP服务占用80端口,FTP服务占用221端口等。其它的端口如何确定是否被占用哪。 可以通

    2024年02月16日
    浏览(39)
  • Windows如何查看某个端口被占用的情况?

    在工作中,有时会发现端口被占用的情况,导致软件报错或者服务无法启动等问题。在不知道具体哪个进程占用该端口号的情况下,我们可以用下面方法来查找。 举例:我现在发现8090端口被占用了,我现在需要找到并杀掉该进程。 1、打开命令窗口(以管理员身份运行) 开始

    2024年02月06日
    浏览(43)
  • linux 查看端口占用

    使用lsof 可以使用lsof -i:端口号 来查看端口占用情况 使用netstat 可以使用netstat -tunlp | grep 端口号 来查看指定的端口号的进程情况 https://zhhll.icu/2021/linux/日常管理/查看端口占用/ 本文由 mdnice 多平台发布

    2024年02月10日
    浏览(43)
  • Linux 查看端口占用情况

    Linux 查看端口占用情况可以使用 lsof 、ss和 netstat 命令。 lsof(list open files)是一个列出当前系统打开文件的工具。lsof 查看端口占用语法格式: lsof -i:端口号 如查看服务器 2379端口的占用情况: 可以看到 2379 端口已经被轻 etcd 服务占用。 lsof -i 需要 root 用户的权限来执行,如下

    2024年02月11日
    浏览(58)
  • linux查看服务端口占用情况

    1、netstat命令 查看所有使用的端口 netstat -tunlp 参数说明: 参数 作用 -t 指明显示TCP端口 -u 指明显示UDP端口 -l 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序) -p 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

    2024年02月16日
    浏览(48)
  • Windows下如何查看某个端口被谁占用

    1、打开命令窗口(以管理员身份运行) 开始—-运行—-cmd,或者是 window+R 组合键,调出命令窗口。 2、查找所有运行的端口 输入命令:   该命令列出所有端口的使用情况。 在列表中我们观察被占用的端口,比如是 3306,首先找到它。 3、查看被占用端口对应的 PID 输入命令:

    2024年02月09日
    浏览(47)
  • linux下常用命令查看端口占用

    在linux使用过程中,有时候需要了解当前系统开放了哪些端口,并且还需要查看开放这些端口的具体进程和用户,可以使用netstat命令, netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息 语法 netstat [选项

    2024年02月04日
    浏览(45)
  • Linux 查看端口占用情况(超详细)

    欢迎大家关注公众号【小白技术圈】,发送 B02  or  b02  领取Linux学习资料大礼包! netstat  是一个用于显示网络状态信息的命令。要查看特定端口是否被占用,可以使用以下命令: -t : 显示 TCP 连接信息 -u : 显示 UDP 连接信息 -l : 仅显示监听状态的端口 -n : 使用数字格式显示

    2024年01月18日
    浏览(48)
  • (Linux)查看端口占用并关闭进程

    更多请参考:Linux netstat命令 kill 命令将信号发送到指定的进程或进程组,使它们根据该信号进行操作。未指定信号时,默认为 -15 参考:Linux中的Kill命令

    2024年02月17日
    浏览(40)
  • linux中查看占用端口的进程方法

    其中:95115是进程号,mysqld是进程名称 注意:-tlnp和-ltnp 其中:mysqld是进程名称,95115是进程id 其中:mysqld是进程,95115是进程id

    2024年04月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包