Linux查看端口:一眼定位监听与占用
linux 查看端口
在 Linux 系统运维中,“查看端口”是非常基础但非常重要的操作。通过查看端口,可以判断某个服务是否正在监听、哪个进程占用了指定端口、端口是否对外开放,以及是否存在异常连接。常见场景包括排查 Web 服务、数据库服务、代理软件、容器服务以及端口冲突问题。
一、端口是什么?
端口可以理解为服务器上不同网络服务之间的“入口编号”。例如:
80:HTTP 服务常用端口443:HTTPS 服务常用端口22:SSH 远程连接端口3306:MySQL 数据库端口6379:Redis 端口5432:PostgreSQL 端口
端口本身并不代表服务一定正常,它只是说明某个程序正在通过该端口接收或发送网络数据。因此,在排查问题时,通常要同时查看端口状态、进程信息和防火墙规则。
二、使用 ss 查看端口
ss 是目前 Linux 中推荐使用的端口查看命令,比传统的 netstat 更高效。
1. 查看所有监听端口
ss -tulnp
参数含义:
-t:查看 TCP 端口-u:查看 UDP 端口-l:只显示监听状态的端口-n:显示数字格式,不解析域名-p:显示进程 PID 和进程名
输出示例:
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1024,fd=3))
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2048,fd=6))
这表示 SSH 服务正在监听 22 端口,Nginx 正在监听 80 端口。
2. 查看指定端口
例如查看 80 端口:
ss -lntp | grep :80
查看 3306 端口:
ss -lntp | grep :3306
如果没有任何输出,通常说明该端口当前没有处于监听状态。
3. 查看已建立连接
ss -tnp
也可以查看 ESTABLISHED 状态连接:
ss -tnp state established
这适合排查当前有哪些远程 IP 正在连接服务器。
三、使用 netstat 查看端口
部分系统中仍可使用 netstat,但它已经逐渐被 ss 替代。
1. 查看所有监听端口
netstat -tulnp
2. 查看 TCP 监听端口
netstat -lntp
3. 查看 UDP 端口
netstat -lunp
4. 查看指定端口
netstat -tulnp | grep :80
如果系统提示找不到命令,可以尝试安装:
sudo apt install net-tools
或:
sudo yum install net-tools
四、使用 lsof 查看端口占用
lsof 可以查看哪个进程打开了某个端口,适合排查端口被谁占用。
1. 查看指定端口
sudo lsof -i :80
2. 查看 TCP 端口
sudo lsof -i tcp:22
3. 查看 UDP 端口
sudo lsof -i udp:53
4. 查看某个进程打开的端口
sudo lsof -p 1234
其中 1234 是进程 PID。
如果系统没有 lsof,可以安装:
sudo apt install lsof
或:
sudo yum install lsof
五、使用 fuser 查找端口占用进程
fuser 适合快速定位端口对应的进程。
sudo fuser -n tcp 80
输出结果通常是 PID,例如:
1234
也可以显示更详细信息:
sudo fuser -v -n tcp 80
如果要结束占用端口的进程,需要谨慎操作:
sudo fuser -k -n tcp 80
该命令会终止使用 80 端口的进程,生产环境中不建议随意执行。
六、查看端口监听地址含义
查看端口时,经常会看到以下几种地址:
1. 0.0.0.0:80
表示监听所有 IPv4 地址,外部网络可能可以访问该端口。
2. 127.0.0.1:3306
表示只监听本机,外部服务器无法直接访问,通常更安全。
3. :::80
表示监听 IPv6 地址。
4. localhost:6379
表示只允许本机访问 Redis 端口。
如果服务只监听 127.0.0.1,但外部无法访问,不一定是服务异常,也可能是配置限制。
七、查看防火墙是否放行端口
即使服务正在监听端口,外部仍然无法访问,常见原因是防火墙没有放行。
1. 使用 ufw
查看防火墙状态:
sudo ufw status
放行端口:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
2. 使用 firewall-cmd
查看状态:
sudo firewall-cmd --state
查看已开放端口:
sudo firewall-cmd --list-ports
放行端口:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
3. 使用 iptables
sudo iptables -L -n
如果使用 nftables,可以查看:
sudo nft list ruleset
八、查看外部端口是否开放
在服务器上查看监听端口,只能说明服务在本地是否开启。若想确认外部能否访问,可以在另一台机器上测试。
例如:
telnet 服务器IP 80
或使用:
nc -zv 服务器IP 80
还可以使用:
curl http://服务器IP:80
如果连接失败,需要检查:
- 服务是否启动;
- 端口是否监听;
- 防火墙是否放行;
- 云安全组是否开放;
- 服务是否只监听本机地址。
九、常见端口排查思路
如果某个端口无法访问,可以按以下顺序排查:
1. 确认服务是否运行
systemctl status nginx
systemctl status sshd
2. 确认端口是否监听
ss -lntp | grep :80
3. 确认进程是否正常
ps -ef | grep nginx
4. 确认防火墙是否放行
sudo ufw status
5. 确认外部测试是否成功
curl http://服务器IP:80
十、常用命令速查表
| 目的 | 命令 |
|---|---|
| 查看所有监听端口 | ss -tulnp |
| 查看 TCP 监听端口 | ss -lntp |
| 查看 UDP 监听端口 | ss -lunp |
| 查看指定端口 | ss -lntp \| grep :80 |
| 查看端口占用进程 | lsof -i :80 |
| 查看 TCP 端口占用 | fuser -n tcp 80 |
| 查看防火墙状态 | ufw status |
| 测试端口连通性 | nc -zv IP 端口 |
总结
Linux 查看端口主要可以使用 ss、netstat、lsof 和 fuser 等命令,其中 ss -tulnp 是最常用、最推荐的方式。查看端口时,不仅要关注端口是否监听,还要关注监听地址、占用进程、防火墙规则和外部访问情况。只有把这些信息结合起来,才能准确判断服务是否正常,以及端口无法访问的真正原因。