Linux中查看端口占用的方法对比:netstat、ss、lsof谁更好用?

 更新时间:2026年06月05日 09:33:45   作者:小猫咪01  
本文介绍了Linux中查看端口占用的三种常用工具的使用,其中ss、netstat和lsof,ss是推荐首选工具,命令简洁高效,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

1. 前言

在 Linux 部署服务时,经常会遇到端口相关问题:

  • 启动服务时报 Address already in use
  • 想知道 80 端口被谁占用;
  • 想查看当前系统开放了哪些端口;
  • 想确认服务到底有没有监听;
  • 想结束占用端口的进程。

常用工具有三个:

netstat
ss
lsof

本文从端口排查角度讲清楚它们怎么用、有什么区别,以及实际项目中应该优先用哪个。

2. 端口占用是什么意思

当程序监听某个端口时,其他程序通常不能再监听同一个 IP 和端口组合。

例如 Nginx 已经监听 80 端口:

0.0.0.0:80

此时另一个程序再绑定 80 端口,就可能报错:

Address already in use

端口排查的核心就是找到:

哪个进程占用了哪个端口

3. ss:推荐优先使用

ss 是 socket statistics 的缩写。它是现在 Linux 中更推荐使用的网络查看工具。

查看所有 TCP 监听端口:

ss -lntp

参数说明:

参数含义
-l只看监听状态
-n数字显示,不解析服务名
-tTCP
-uUDP
-p显示进程信息

查看 80 端口:

ss -lntp | grep ':80'

示例输出:

LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))

可以看到:

端口:80
进程:nginx
PID:1234

4. ss 查看 UDP 端口

查看 UDP 监听端口:

ss -lnup

查看 TCP 和 UDP:

ss -lntup

如果没有 -p 权限,普通用户可能看不到进程名。

可以使用 sudo:

sudo ss -lntp

5. netstat:传统工具

netstat 是老牌网络工具。很多教程中都会看到它。

查看监听端口:

netstat -lntp

参数含义和 ss 类似:

参数含义
-llistening
-n数字显示
-tTCP
-uUDP
-p显示进程

查看所有 TCP/UDP 监听端口:

netstat -lntup

查看 3306 端口:

netstat -lntp | grep ':3306'

6. netstat 可能没有安装

很多新系统默认不再安装 netstat。

如果提示:

netstat: command not found

可以安装 net-tools。

Ubuntu / Debian:

sudo apt install net-tools

CentOS / RHEL:

sudo yum install net-tools

不过新环境中更推荐直接使用 ss

7. lsof:从文件角度看端口

Linux 中“一切皆文件”。

网络 socket 也可以看成进程打开的文件。

lsof 用于查看进程打开了哪些文件,也能查端口。

查看 80 端口:

sudo lsof -i :80

输出示例:

COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234 root   6u   IPv4  12345      0t0  TCP *:http (LISTEN)

查看 TCP 端口:

sudo lsof -iTCP:80 -sTCP:LISTEN

查看某个进程打开的网络连接:

sudo lsof -i -p 1234

8. 三者区别

工具特点推荐场景
ss新、快、系统常见日常端口查看优先用
netstat老牌、资料多老系统或旧教程场景
lsof能关联进程打开文件精确查某端口被谁占用

简单建议:

  • 看监听端口:ss -lntp
  • 查端口进程:lsof -i :端口
  • 兼容旧教程:netstat -lntp

9. 查看端口是否监听

例如检查 8080:

ss -lntp | grep ':8080'

如果有输出,说明有服务监听。

如果没有输出,说明本机没有服务监听该端口。

也可以:

sudo lsof -i :8080

10. 查看所有开放端口

sudo ss -lntup

输出中重点看 Local Address:Port。

示例:

0.0.0.0:22
127.0.0.1:3306
0.0.0.0:80

含义:

地址含义
0.0.0.0:80所有网卡都监听 80
127.0.0.1:3306只允许本机访问 3306
[::]:22IPv6 所有地址监听 22

11. 127.0.0.1 和 0.0.0.0

这是端口排查中非常关键的点。

如果服务监听:

127.0.0.1:8080

只能本机访问。

如果监听:

0.0.0.0:8080

外部机器可以通过服务器 IP 访问。

例如:

curl http://127.0.0.1:8080

本机成功,但外部访问失败。这时要检查服务是否只绑定了 127.0.0.1

12. 根据 PID 查看进程

如果查到 PID 为 1234:

ps -fp 1234

查看进程启动命令:

cat /proc/1234/cmdline

格式可能没有换行,可以用:

tr '\0' ' ' < /proc/1234/cmdline

查看进程工作目录:

ls -l /proc/1234/cwd

13. 结束占用端口的进程

先查端口:

sudo lsof -i :8080

假设 PID 是 1234,正常结束:

kill 1234

如果无法退出:

kill -9 1234

更推荐先优雅停止服务:

systemctl stop 服务名

不要一上来就 kill -9,否则可能导致数据未写完或资源没有清理。

14. 实战:8080 端口被占用

启动服务时报错:

Address already in use: 8080

排查:

sudo ss -lntp | grep ':8080'

或:

sudo lsof -i :8080

找到进程后:

ps -fp PID

如果是旧服务,可以停止:

kill PID

如果是 systemd 服务:

systemctl status 服务名
systemctl stop 服务名

15. 实战:服务启动了但外部访问不了

本机查看:

ss -lntp | grep ':8080'

如果看到:

127.0.0.1:8080

说明只监听本机。需要修改应用配置,把监听地址改成:

0.0.0.0

如果看到:

0.0.0.0:8080

但外部仍访问不了,继续排查:

firewall-cmd --list-ports
iptables -L -n

还要检查云服务器安全组。

16. 小结

查看端口占用推荐这样用:

ss -lntp
sudo ss -lntup
sudo lsof -i :8080
netstat -lntp

三者选择:

  • ss:日常首选
  • netstat:旧系统兼容
  • lsof:精确查端口对应进程

端口排查核心流程:

看端口是否监听

看监听地址是 127.0.0.1 还是 0.0.0.0

看对应进程和 PID

看服务状态

看防火墙和安全组

掌握这些命令后,大多数“端口被占用”和“服务访问不了”的问题都能快速定位。

到此这篇关于Linux中查看端口占用的方法对比:netstat、ss、lsof谁更好用?的文章就介绍到这了,更多相关Linux查看端口占用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux之vim&gvim使用及说明

    linux之vim&gvim使用及说明

    文章介绍了在虚拟机中安装和使用vim(终端编辑器)和gvim(图形界面编辑器)的方法,包括安装命令和使用文件名打开文件的具体操作
    2025-10-10
  • linux vps服务器进程kswapd0与events/0消耗大量CPU的问题

    linux vps服务器进程kswapd0与events/0消耗大量CPU的问题

    使用了阿里云的vps服务器网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了,这也是vps的弊端,内容给的相对小
    2014-03-03
  • Linux下重启oracle服务及监听器和实例详解

    Linux下重启oracle服务及监听器和实例详解

    在Linux下重启Oracle数据库及监听器和实例,本文通过三种方法给大家实例详解的,介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • Linux下如何查杀stopped进程详解

    Linux下如何查杀stopped进程详解

    这篇文章主要给大家介绍了关于Linux下如何查杀stopped进程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用linux系统具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Linux系统下移植busybox中mkfs.vfat命令

    Linux系统下移植busybox中mkfs.vfat命令

    为了延长磁盘寿命来存储音视频文件,打发在格式化磁盘过程中将簇的大小设置大点。这接下来通过本文给大家介绍移植busybox中mkfs.vfat命令,需要的朋友可以参考下
    2019-07-07
  • Linux 逻辑卷管理(LVM)使用方法总结

    Linux 逻辑卷管理(LVM)使用方法总结

    这篇文章主要介绍了Linux 逻辑卷管理(LVM)的使用方法,文中命令十分详细,帮助大家更好的学习,感兴趣的小伙伴快来参考下
    2020-06-06
  • ab网站压力测试命令

    ab网站压力测试命令

    这篇文章主要介绍了ab网站压力测试命令,需要的朋友可以参考下
    2016-05-05
  • ubuntu 系统上为php加上redis 扩展的实现方法

    ubuntu 系统上为php加上redis 扩展的实现方法

    这篇文章主要介绍了ubuntu 系统上为php加上redis 扩展的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • Linux服务器配置SSH服务登录失败的解决方案

    Linux服务器配置SSH服务登录失败的解决方案

    文章介绍了配置Linux服务器SSH远程登录失败处理机制的步骤,包括备份原配置文件、安装pam_tally2统计登录失败次数、使用Sed命令编辑配置、重启使配置生效以及封禁登录失败五次的账号
    2026-03-03
  • linux中$符号的基础用法总结

    linux中$符号的基础用法总结

    这篇文章主要给大家介绍了关于linux中$符号的基础用法,文中通过示例代码介绍的非常详细,对大家学习或者使用linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11

最新评论