在linux系统日常使用中,查看进程与端口的对应关系是非常常见的操作需求,无论是排查端口占用冲突,还是确认服务是否正常监听指定端口,都需要用到相关命令。

常用查看进程端口的命令
1. netstat命令
netstat是传统的网络状态查看工具,能够显示网络连接、路由表、接口统计等信息,通过指定参数可以查看进程和端口的对应关系。常用的参数组合如下:
- -t:显示TCP协议的连接
- -u:显示UDP协议的连接
- -n:以数字形式显示地址和端口,不进行域名解析
- -l:只显示处于监听状态的连接
- -p:显示占用端口的进程ID和进程名称
查看所有监听状态的TCP端口及对应进程的命令示例如下:
# 查看所有监听的TCP端口及对应进程 netstat -tlnp # 查看指定端口对应的进程,比如查看8080端口 netstat -tlnp | grep 8080
2. lsof命令
lsof是列出当前系统打开文件的工具,在linux中一切皆文件,网络连接也属于文件范畴,因此可以用lsof直接查看端口对应的进程。常用用法如下:
- 查看指定端口对应的进程:
lsof -i:端口号 - 查看指定进程打开的所有端口:
lsof -p 进程ID
具体命令示例如下:
# 查看8080端口对应的进程 lsof -i:8080 # 查看进程ID为1234的进程打开的所有端口 lsof -p 1234 # 查看所有TCP监听端口及对应进程 lsof -iTCP -sTCP:LISTEN
3. ss命令
ss是netstat的替代工具,性能更好,功能也更强大,是现在很多linux发行版默认推荐的网络状态查看工具。它的参数和netstat类似,常用参数含义相同。查看进程端口的示例如下:
# 查看所有监听的TCP端口及对应进程 ss -tlnp # 查看指定端口对应的进程 ss -tlnp | grep 8080 # 查看所有UDP端口及对应进程 ss -ulnp
4. ps命令配合管道过滤
如果已经知道进程名称,也可以通过ps命令找到进程ID,再结合/proc目录查看进程打开的端口,不过这种方式相对繁琐,适合已知进程名的场景。示例如下:
# 先通过进程名找到进程ID,比如查找nginx进程 ps -ef | grep nginx # 假设nginx的进程ID是1234,查看该进程打开的所有文件,过滤网络相关 ls -l /proc/1234/fd | grep socket
命令对比与适用场景
下面是几个常用命令的对比,方便用户根据场景选择:
| 命令 | 优势 | 适用场景 |
|---|---|---|
| netstat | 参数简单,老用户熟悉度高 | 传统系统环境,习惯使用老命令的场景 |
| lsof | 功能全面,不仅能查端口还能查文件 | 需要同时查看进程打开的其他文件,或者已知端口查进程的场景 |
| ss | 性能高,速度快,功能更丰富 | 高并发环境,新系统环境,推荐使用 |
注意事项
使用上述命令查看进程端口时,大部分操作需要root权限,否则可能无法显示进程名称,只显示进程ID或者没有权限查看。如果遇到权限不足的问题,可以在命令前加上sudo获取权限,比如sudo netstat -tlnp。
另外,如果系统中没有安装对应的工具,可以通过包管理器安装,比如debian/ubuntu系统安装netstat可以用sudo apt install net-tools,安装lsof可以用sudo apt install lsof,centos系统安装对应工具可以用sudo yum install net-tools lsof。