Linux 下查所有开放端口,一个命令搞定
为什么需要这个?
排查服务、安全审计、日常运维,查开放端口是基本功。别一个个去 ps、netstat 翻,直接上命令。

核心命令
1. ss(推荐,现代系统首选)
# 查所有监听端口(TCP+UDP)
ss -tuln
# 只看 TCP 监听
ss -tln
# 只看 UDP 监听
ss -uln
# 带进程信息(需要 root)
sudo ss -tulnp
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=5678,fd=6))
2. netstat(经典,部分系统需安装)
# 等效于 ss -tuln
netstat -tuln
# 带进程 PID
sudo netstat -tulnp
参数说明:
– -t TCP
– -u UDP
– -l 仅监听状态
– -n 数字格式(不解析主机名)
– -p 显示进程(需 root)
3. lsof(适合排查具体端口)
# 列出所有监听端口
sudo lsof -i -P -n | grep LISTEN
# 查特定端口
sudo lsof -i :80
# 查某个进程开放的端口
sudo lsof -i -P -n -p <PID>
快速筛选技巧
只看非系统服务端口(排除22、80等常见端口)
ss -tuln | grep -E ':[0-9]{4,5}' | grep -vE ':22|:80|:443|:3306'
只看 IPv4 监听
ss -tln4
ss -tln6 # IPv6
输出格式化,一眼看出哪些端口对外
ss -tuln | awk 'NR>1 {print $5}' | cut -d: -f2 | sort -n | uniq
实用场景
场景1:快速确认某个端口是否在监听
ss -tln | grep :8080
# 有输出 = 在监听,无输出 = 没开
场景2:查谁占了端口(比如 80 被谁占了)
sudo ss -tlnp | grep :80
# 或者
sudo lsof -i :80
场景3:查所有端口及对应服务名
sudo ss -tulnp | awk '{print $5, $7}' | grep -v 'Peer'
重要提示
- 普通用户只能看自己的进程端口,想看全部需要
sudo - ss 比 netstat 快,因为直接读内核,不遍历 /proc
- 如果系统没有 ss,先装
iproute2包(ss 包含在内) - 容器环境里,查的是容器内的端口,不是宿主机
一句话总结
# 日常够用
sudo ss -tulnp
存好这个,下次查端口别再用 netstat -ano | grep LISTEN 了,过时了。
💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者
