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

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

一、背景

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

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

二、命令概览

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

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

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

3.1、Windows:netstat -ano|findstr 8080

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

3.1.1、返回的结果类似于

在这里插入图片描述

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

记不住使用 netstat -ano 可输出表头(注意表头和值有点没对齐)
在这里插入图片描述

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

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

如果什么都没输出,就是没有任何进程占用这个端口
在这里插入图片描述

如果有占用,至少会输入如下
在这里插入图片描述

有时候复杂一点,会输出
在这里插入图片描述

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

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

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

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

有时候会查不到LISTENING状态的,但是又查出了其他的东西,这时候其实是没有端口占用的
在这里插入图片描述

这种情况的出现是因为,比如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,更安全。这里是同样的意思
      在这里插入图片描述

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的端口的占用,我已经做过了实验,验证过。

如下图,如果某个端口没有占用,则什么都没
在这里插入图片描述

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

(为什么会没有LISTEN状态的?这个可能是因为之前的缓存,如果刚刚8080端口的程序被访问过,然后8080端口程序立即被杀掉,就立即没有LISTEN状态的,但是因为访问过8080端口的程序就会有点缓存,过一段时间再查就会发现以下的信息都没了)
在这里插入图片描述

如下图,如果有一条是LISTEN状态的,这样查看PID就找到了占用程序
在这里插入图片描述

怎么证明我上述 lsof -i:8080 查出来的8080而不是18080的?我同时启动了8080和18080两个web程序,可以看到lsof -i:8080的结果没有掺杂18080端口的结果,而且使用 lsof -i:18080是能正确找到真正的占用程序的
在这里插入图片描述

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 中文版和英文版
    在这里插入图片描述

中文版如下
在这里插入图片描述

  • Linux

(TODO待补充)

  • MacOS

    • lsof命令
      在这里插入图片描述

    • netstat 命令

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

      不管怎么样,都提示了使用方式,如果不嫌长篇大论,可以使用 man nestat 查看命令的使用方式
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vuex的使用,详细易懂

目录 一.前言 二.Vuex的简介 三.vuex的使用 3.1 安装Vuex 3.2 使用Vuex的步骤: 四.vuex的存值取值(改变值) 五.vuex的异步请求 好啦,今天的分享就到这啦!!! 一.前言 今天我们继续前面的E…

导引服务机器人 通用技术条件

声明 本文是学习GB-T 42831-2023 导引服务机器人 通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 检验规则 6.1 检验项目 检验分为型式检验和出厂检验。检验项目见表2。 表 2 检验项目 序号 检验项目 技术要求 检验方法 出厂检验 型…

天锐绿盾加密软件——企业数据防泄密-CAD图纸、文档、源代码加密管理系统@德人合科技

天锐绿盾是一款专门为企业提供数据防泄密和文档加密管理的软件。该软件通过加密技术保护企业的核心数据,防止数据泄露和侵权行为,同时提供了全方位的文档加密管理系统,实现了对企业数据的安全保障和有效管理。 PC访问地址: isite…

睿趣科技:抖音店铺怎么取名受欢迎

抖音作为国内最大的短视频平台,其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺,而一个富有创意和吸引力的店铺名字,往往能带来更多的客流量。那么,如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…

【MATLAB源码-第44期】基于matlab的2*2MIMO-LDPC系统的误码率仿真。

操作环境: MATLAB 2022a 1、算法描述 2x2 MIMO(多输入多输出)和LDPC(低密度奇偶校验码)编码是在通信系统中常用的技术,它们通常用于提高无线通信系统的性能和可靠性。 1. 2x2 MIMO: 2x2 MIMO…

【RabbitMQ 实战】09 客户端连接集群生产和消费消息

一、部署一个三节点集群 下面的链接是最快最简单的一种集群部署方法 3分钟部署一个RabbitMQ集群 上的的例子中,没有映射端口,所以没法从宿主机外部连接容器,下面的yml文件中,暴露了端口。 每个容器应用都映射了宿主机的端口&…

Vscode进行远程开发

之前用的是pycharm,但是同事说pycharm太重了,连接远程服务器的时候给远程服务器的压力比较大,有时候远程服务器可能都扛不住,所以换成了vscode。 参考博客 手把手教你配置VS Code远程开发工具,工作效率提升N倍 - 知…

词云图大揭秘:如何从文本中挖掘热点词汇?

随着互联网的普及,大量的文本信息在网络上被产生和传播。如何从这些海量的文本中提取出有价值的信息,成为了人们关注的焦点。在这个信息爆炸的时代,词云图作为一种直观、形象的数据可视化手段,越来越受到人们的喜爱。本文手把手教…

设计模式 - 七大软件设计原则

目录 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 1.2.2、单一职责原则 1.2.3、里氏替换原则 1.2.4、迪米特原则 1.2.5、接口隔离原则 1.2.6、依赖倒转原则 1.2.7、合成/聚合复用原则 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 开闭原则:对扩…

双周赛114(模拟、枚举 + 哈希、DFS)

文章目录 双周赛114[2869. 收集元素的最少操作次数](https://leetcode.cn/problems/minimum-operations-to-collect-elements/)模拟 [2870. 使数组为空的最少操作次数](https://leetcode.cn/problems/minimum-number-of-operations-to-make-array-empty/)哈希 枚举 [2871. 将数…

Docker--harbor私有仓库部署与管理

目录 一、Harbor简介 1、什么是Harbor 2、Harbor的特性 3、Haebor的构成 二、搭建本地私有仓库 1、本地私有仓库创建 2、将镜像上传至本地私有仓库 三、搭建Harbor仓库 1. 部署 Docker-Compose 服务 2、部署 Harbor 服务 3、启动Harbor 4、创建一个新项目 5、在其他…

并发、并行、同步、异步、阻塞、非阻塞

一、多核、多cpu (一)多核 Multicore 核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。 多核就是指单个CPU中有多个核。 (二)多cpu Multiprocessor 多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核…

北京股票开户的佣金手续费是多少?北京股票开户选择哪家券商?

北京股票开户的佣金手续费是多少?北京股票开户选择哪家券商? 股票注册开户是非常简单的,在2015年前也就是互联网还不发达的时候,投资者只能去券商的营业部柜台办理,而自从各大券商都可以网上开户后,更多的投资者会选择网上开户…

【运维】一些团队开发相关的软件安装。

gitlab 安装步骤 (1) 下载镜像,并且上传到服务器 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.2.8-ce.0.el7.x86_64.rpm (2)rpm -i gitlab-ce-16.2.8-ce.0.el7.x86_64.rpm (3)安装成功后…

vue elementui <el-date-picker>日期选择框限制只能选择90天内的日期(包括今天)

之前也写过其他限制日期的语句,感觉用dayjs()的subtract()和add()也挺方便易懂的,以此记录 安装dayjs npm install dayjs --save dayjs().add(value : Number, unit : String); dayjs().add(7, day); //在当前的基础上加7天dayjs().subtract(value : N…

在硅云上主机搭建wordpress并使用Astra主题和avada主题

目录 前言 准备 操作 DNS解析域名 云主机绑定域名 安装wordpress网站程序 网站内Astra主题设计操作 安装主题 网站内avada主题安装 上传插件 上传主题 选择网站主题 前言 一开始以为云虚拟主机和云服务器是一个东西,只不过前者是虚拟的后者是不是虚拟的…

练[GYCTF2020]EasyThinking

[GYCTF2020]EasyThinking 文章目录 [GYCTF2020]EasyThinking掌握知识解题思路还得靠大佬正式开始 关键paylaod 掌握知识 ​ thinkphpV6任意文件操作漏洞,代码分析写入session文件的参数,源码泄露,使用蚁剑插件disable_functions绕过终端无回…

尚硅谷CSS学习笔记

什么是css css&#xff08;层叠样式表&#xff09; 它是一种标记语言&#xff0c;用于给HTML结构设置样式。简单理解css可以美化html&#xff0c;实现结构与样式的分离。 <link rel"shortcut icon" href"favicon.ico" type"image/x-icon"&g…

encoding/json vs json-iterator

encoding/json vs json-iterator 100% Compatibility 默认情况下&#xff0c;jsoniter 不会像标准库那样对映射键进行排序。如果你想要 100% 的兼容性&#xff0c;就这样使用 m : map[string]interface{}{"3": 3,"1": 1,"2": 2, } json : json…

线性代数 --- 矩阵的QR分解,A=QR

矩阵的QR分解&#xff0c;格拉姆施密特过程的矩阵表示 首先先简单的回顾一下Gram-Schmidt正交化过程的核心思想&#xff0c;如何把一组线性无关的向量构造成一组标准正交向量&#xff0c;即&#xff0c;如何把矩阵A变成矩阵Q的过程。 给定一组线性无关的向量a,b,c&#xff0c;我…