当前位置:

首页 > 系统应用 > Linux查看端口占用情况 常用命令lsof和netstat【教程】

Linux查看端口占用情况 常用命令lsof和netstat【教程】

排查Linux端口占用时,首选`lsof-i:端口号`,它能完整显示进程、用户及协议信息。若系统未安装lsof,可使用`ss-tulnp`作为现代替代方案。传统命令`netstat`已逐渐被弃用,在新环境中不建议依赖。查到占用进程的PID后,应先确认其身份,尝试用`killPID`正常终止,无响应时再考虑`kill-9`强制结束,操作后需验证端口是否释放。

排查端口占用,是Linux系统管理和开发调试中的高频操作。面对lsof、netstat、ss这几个命令,新手往往一头雾水。其实,选择很简单:首选lsof -i :端口号,如果系统没装,就用ss -tulnp;至于netstat,它已经逐步被弃用,新环境不建议依赖。

Linux查看端口占用情况 常用命令lsof和netstat【教程】

为什么 lsof -i :8000 是首选

这个命令的优势在于信息完整且“一镜到底”。它不仅能告诉你端口被谁占了,还能一次性展示进程名、PID、所属用户、协议类型以及监听地址,对UDP或IPv6这类容易遗漏的监听项也识别得很准。

举个例子,查询8000端口:

lsof -i :8000
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nodejs  26993 root   10u  IPv4 37999514      0t0  TCP *:http-alt (LISTEN)

解读这个结果,有几个细节值得注意:

  • 权限是关键:lsof -i通常需要sudo提权,否则你只能看到自己用户启动的进程,系统服务或其他用户的进程会“隐身”。
  • 非默认安装:在CentOS或RHEL等系统上,lsof并非预装,得先执行yum install -y lsof。
  • 输出字段:FD列里的u表示该socket可读写;TYPE列明确区分了IPv4或IPv6。
  • 精准过滤:如果只想看TCP的监听状态,可以用更精确的命令:lsof -nP -iTCP -sTCP:LISTEN | grep :8000。这里的-n和-P参数能跳过DNS解析、直接显示端口号,让结果更清晰。

netstat -tunlp 还能用吗

当然能用,尤其在老系统上。但心里得有数:它正被ss命令取代。像Ubuntu 22.04或AlmaLinux 9这些较新的发行版,默认已经不装netstat了,想用得自己安装net-tools包。

它的典型用法是配合grep:

netstat -tunlp | grep :8000
tcp        0      0 *:8000               *:*                   LISTEN      26993/nodejs

不过,用netstat时下面这几个“坑”很容易踩到:

  • -p参数离不开sudo:不加sudo,PID和进程名那列就只显示一个孤零零的-,等于白查。
  • 参数顺序有讲究:netstat -tunlp没问题,但换成netstat -p -tunl在某些版本可能就会报错。
  • UDP监听可能漏报:在识别UDP端口监听状态时,netstat的表现不如lsof稳定,有时会查不到。

更现代的替代方案:ss -tulnp

如果说netstat是老兵,那ss(socket statistics)就是全面接班的现代装备。它直接从内核获取信息,速度更快,输出也更简洁明了,几乎已是现代Linux发行版的标配。

同样查8000端口:

ss -tulnp | grep :8000
LISTEN 0   128   *:8000   *:*   users:(("nodejs",pid=26993,fd=10))

和netstat对比一下:

  • 参数一脉相承:-t(TCP)、-u(UDP)、-l(监听)、-n(不解析)、-p(显示进程),学习成本很低。
  • 输出更直观:进程信息直接整合在users:(...)括号里,比netstat那种需要对齐多列来看的方式更友好。
  • 专注网络:ss专注于socket统计,不像lsof能查文件路径,但用于端口排查完全够用。
  • 同样需要权限:如果看到“Permission denied”,记得加上sudo,特别是用了-p选项时。

查到 PID 后怎么安全终止进程

找到“罪魁祸首”只是第一步,安全地“清理现场”更重要。切忌一上来就祭出kill -9这个大杀器。正确的流程应该是:

  • 先确认身份:用ps -p PID -o pid,user,comm,args(例如ps -p 26993 -o pid,user,comm,args)看清楚进程的详细信息,确认是不是可以结束的测试进程,而不是正在运行的数据库或关键服务。
  • 先礼后兵:对于普通的开发进程(比如本地npm start),先用kill PID发送默认的TERM信号,允许程序做退出前的清理工作。
  • 强制手段备用:如果进程无响应,再使用kill -9 PID(SIGKILL信号)强制结束。
  • 一键清场(慎用):fuser 8000/tcp -k命令能直接结束所有占用该端口的进程,非常干脆,但范围不可控,需谨慎。
  • 最后验证:操作完成后,务必再次执行lsof -i :8000或ss -tuln | grep :8000,确认端口确实已经释放。

这里最常出问题的地方是权限和误杀。不加sudo可能查不到也杀不掉;但滥用sudo kill -9,又可能误杀关键服务(比如SSH守护进程),导致服务器失联。所以,动手前多看一眼,总是没错的。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
系统应用 Linux
相关文章 更多
Linux如何开启端口号?开放端口命令详解
Linux如何开启端口号?开放端口命令详解

详细讲解Linux如何开启端口号以及常用的开放端口命令。

crossover卸载软件下载及重新安装教程
crossover卸载软件下载及重新安装教程

遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
PixPix 网页版
PixPix 网页版
Windows

PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。