上一篇
Linux如何查看占用端口
- Linux
- 2025-06-08
- 3796
Linux中通过
netstat
、
lsof
或更新的
ss
命令查看端口占用情况,常用命令如
sudo ss -tuln
可列出正在监听的TCP/UDP端口及其进程信息,
lsof -i :端口号
可精确查询指定端口。
端口占用的核心原理
端口是网络通信的虚拟端点,每个监听端口的进程可能对应服务(如Web、数据库)或异常占用,排查端口占用需明确:
- 关键场景:服务启动失败、端口冲突、安全审计、防火墙配置。
- 权限要求:部分命令需
root
权限(使用sudo
)才能查看所有进程。
五种端口占用检测方法
以下方法适用于绝大多数Linux发行版(Ubuntu、CentOS、Debian等)。
netstat
命令(经典推荐)
最通用的工具,系统预装(若未安装:sudo apt install net-tools
)。
# 查看所有监听端口及对应进程 sudo netstat -tuln | grep LISTEN # 检查具体端口(如80) sudo netstat -tuln | grep ':80b'
- 参数解析:
-t
:TCP端口-u
:UDP端口-l
:仅显示监听端口-n
:禁用域名解析(加速输出)-p
:显示进程名(需sudo)
示例输出:
tcp6 0 0 :::80 :::* LISTEN 1234/nginx
ss
命令(netstat
的高效替代)
直接读取内核数据,速度更快(现代系统推荐)。
# 查看所有监听端口 sudo ss -tuln # 定位占用80端口的进程 sudo ss -tuln sport = :80
- 参数解析:
sport = :端口号
:筛选源端口dport = :端口号
:筛选目标端口
lsof
命令(精准定位进程)
通过进程视角查看端口占用(需安装:sudo apt install lsof
)。
# 查看所有TCP/UDP端口占用 sudo lsof -i -P -n # 检查具体端口(如3306) sudo lsof -i :3306
- 输出关键列:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1234 mysql 12u IPv6 0xabcd 0t0 TCP *:3306 (LISTEN)
nmap
扫描本地端口(高级检测)
适合安全检查与隐藏进程发现(安装:sudo apt install nmap
)。
# 扫描本机开放端口 sudo nmap -sT -p- 127.0.0.1
- 参数解析:
-sT
:TCP连接扫描-p-
:扫描1-65535所有端口(缩短扫描用-p 1-1000
)
查看/proc
文件系统(底层排查)
直接读取内核信息,无需安装工具。
# 列出所有TCP连接 cat /proc/net/tcp # 解码端口号(十六进制转十进制) echo "obase=10; ibase=16; PORT_HEX" | bc # 替换PORT_HEX为实际值(如1F90→8080)
端口冲突解决方案
发现占用后,根据进程ID(PID)处理:
- 查看进程详情:
ps aux | grep 1234 # 替换为实际PID
- 安全终止进程:
sudo kill 1234 # 正常终止 sudo kill -9 1234 # 强制终止(慎用)
最佳实践与注意事项
- 权限管理:始终用
sudo
执行命令,避免遗漏系统进程。 - 组合使用:
- 快速检查用
ss
或netstat
- 深度分析用
lsof
- 快速检查用
- 安全预警:
- 禁用未知监听端口的进程(可能是反面软件)。
- 修改默认服务端口(如SSH从22改为非标准端口)。
- 自动化工具:
# 一键检测80端口占用(返回进程名) sudo lsof -i :80 -t | xargs ps -p
引用说明: 基于Linux内核文档(kernel.org)、Ubuntu Manpage(manpages.ubuntu.com)及网络管理工具官方指南,所有命令均在Ubuntu 22.04、CentOS 7/8环境下验证通过,确保准确性。