在 Linux 中,查看某个端口被哪个程序(进程)占用,常用的命令有 ss、netstat、lsof 和 fuser。推荐优先使用 ss,它速度快而且是现代 Linux 的标准工具。
1. 使用 ss(推荐)
sudo ss -tulpn | grep :端口号
示例:查看 80 端口
sudo ss -tulpn | grep :80
输出会包含类似 users:(("nginx",pid=1234,fd=6)) 的信息,直接告诉你进程名和 PID。
如果想查看所有监听的端口及其进程,可省略 grep:
sudo ss -tulpn
2. 使用 netstat(传统方法)
sudo netstat -tulpn | grep :端口号
参数含义同上。如果系统提示 netstat 命令未找到,需先安装 net-tools:
# Debian/Ubuntusudo apt install net-tools# CentOS/RHELsudo yum install net-tools
3. 使用 lsof(列出打开的文件)
sudo lsof -i :端口号
直接显示占用该端口的进程详细信息(进程名、PID、用户等)。
示例:
sudo lsof -i :3306
输出样例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmysqld 1122 mysql 20u IPv4 21542 0t0 TCP *:mysql (LISTEN)
4. 使用 fuser(快速查找进程 PID)
sudo fuser 端口号/tcp# 或sudo fuser 端口号/udp
只输出 PID,可以结合其他命令使用,比如:
sudo fuser 80/tcp# 输出类似:80/tcp: 1234ps -p 1234 -o comm= # 查看 PID 对应的进程名
注意事项
- 必须加
sudo 或以 root 运行,否则无法看到其他用户启动的进程信息(PID 一列会显示 -)。 - 如果你想查找的端口不是监听状态(例如客户端临时端口),可以去掉
-l 参数,直接用 ss -tupn 或 netstat -tupn。