在linux系统中,查看当前开放的端口是运维和开发过程中非常常见的操作,无论是排查服务启动问题、确认端口占用情况,还是做安全巡检,都需要用到相关命令。不同的工具适用场景略有区别,下面逐一介绍常用的查看方法。

使用netstat命令查看端口
netstat是比较传统的网络状态查看工具,大部分linux发行版都默认安装或者可以通过包管理器快速安装。它可以显示网络连接、路由表、接口统计等信息,通过参数过滤可以快速查看开放的端口。
常用的查看所有监听端口的命令如下:
# 查看所有监听的TCP和UDP端口,显示进程信息 netstat -tulnp # 参数说明 # -t 显示TCP连接相关端口 # -u 显示UDP连接相关端口 # -l 仅显示监听状态的端口 # -n 以数字形式显示地址和端口,不解析服务名称 # -p 显示占用端口的进程PID和名称
输出结果中,Local Address列会显示监听的IP和端口,PID/Program name列会显示对应的进程信息。如果只需要查看TCP端口,可以去掉-u参数,命令为netstat -tlnp。
使用ss命令查看端口
ss是linux系统中比netstat更现代的工具,它从内核空间直接获取socket统计信息,速度比netstat更快,功能也更丰富,现在很多新版本的linux发行版已经默认用ss替代了netstat的相关功能。
查看监听端口的常用命令如下:
# 查看所有监听的TCP和UDP端口,显示进程信息 ss -tulnp # 参数说明和netstat类似 # -t 显示TCP端口 # -u 显示UDP端口 # -l 仅显示监听状态的端口 # -n 数字形式显示地址端口 # -p 显示进程信息
ss的输出格式和netstat类似,但是执行效率更高,尤其是在系统连接数较多的情况下,ss的响应速度优势更明显。
使用lsof命令查看端口
lsof是列出当前系统打开文件的工具,在linux中一切皆文件,网络连接也属于文件范畴,因此可以通过lsof查看端口占用情况。
查看指定端口是否被占用的命令如下:
# 查看8080端口是否被占用 lsof -i:8080 # 查看所有TCP监听端口 lsof -iTCP -sTCP:LISTEN # 参数说明 # -i 指定网络相关的文件 # -i:端口号 查看指定端口的占用情况 # -sTCP:LISTEN 仅显示TCP监听状态的连接
如果需要查看所有开放的端口,可以结合管道过滤输出,比如lsof -i | grep LISTEN,不过这种方式输出的信息不如netstat和ss直观。
不同方法的适用场景对比
三种工具的适用场景可以参考下面的表格:
| 工具名称 | 优势 | 适用场景 |
|---|---|---|
| netstat | 兼容性好,几乎所有linux系统都支持 | 老旧系统或者习惯使用传统命令的场景 |
| ss | 速度快,功能更丰富,输出更清晰 | 新版本linux系统,需要快速获取端口信息的场景 |
| lsof | 可以关联进程打开的所有文件,信息更全面 | 需要同时查看进程打开的其他文件,或者排查端口对应进程详细信息的场景 |
注意事项
- 查看端口信息通常需要root权限,普通用户执行命令可能无法看到所有进程信息,建议在命令前加
sudo获取权限。 - 如果系统没有安装对应的工具,可以通过包管理器安装,比如ubuntu/debian系统用
sudo apt install net-tools安装netstat,用sudo apt install lsof安装lsof。 - UDP端口没有连接状态,查看UDP端口时需要确保命令包含
-u参数,否则可能看不到UDP相关的开放端口。