在linux系统使用过程中,不管是部署服务还是调试程序,都可能会遇到端口被占用的情况,这时候就需要通过对应的命令来查看端口的占用状态,找到占用端口的进程并进行处理。本文会介绍几种常用的linux端口占用查看方法,覆盖不同场景下的使用需求。

使用netstat命令查看端口占用
netstat是linux系统中常用的网络状态查看工具,大部分linux发行版都默认安装了这个工具,我们可以通过它来查看端口的监听和占用情况。
常用的查看端口占用的命令格式如下:
# 查看所有端口的占用情况,包含进程信息 netstat -tulnp # 查看指定端口是否被占用,比如查看8080端口 netstat -tulnp | grep 8080
命令参数说明:
- -t:显示tcp协议的连接
- -u:显示udp协议的连接
- -l:只显示处于监听状态的端口
- -n:以数字形式显示地址和端口号,不解析服务名称
- -p:显示占用端口的进程ID和进程名称
如果执行命令后没有输出结果,说明对应的端口没有被占用;如果有输出结果,会显示对应的进程ID和进程名称,我们可以根据进程ID进一步处理进程。
使用lsof命令查看端口占用
lsof命令的作用是列出当前系统打开的文件,在linux中一切皆文件,网络连接也属于文件范畴,所以也可以通过lsof来查看端口占用情况。
查看指定端口占用的命令格式如下:
# 查看指定端口的占用情况,比如查看8080端口 lsof -i:8080
命令参数说明:
- -i:指定查询的网络地址和端口,格式为[协议][@主机名|IP地址]:端口号,不指定协议则默认匹配tcp和udp
执行命令后如果有输出结果,会显示占用端口的进程的相关信息,包括进程ID、用户、进程名称等,如果没有输出结果则说明端口未被占用。
使用ss命令查看端口占用
ss是linux系统中比netstat更高效的网络状态查看工具,它直接从内核空间获取网络信息,执行速度比netstat更快,现在很多新的linux发行版更推荐使用ss命令。
常用的查看端口占用的命令格式如下:
# 查看所有端口的占用情况,包含进程信息 ss -tulnp # 查看指定端口是否被占用,比如查看8080端口 ss -tulnp | grep 8080
ss命令的参数和netstat大部分是通用的,参数含义和netstat一致,输出结果的格式也类似,使用起来和netstat没有太大区别。
如何根据查询结果处理占用端口的进程
当我们查到端口被某个进程占用后,如果不需要这个进程,可以通过进程ID来结束进程,释放端口。结束进程的命令如下:
# 普通结束进程,pid为查到的进程ID kill pid # 强制结束进程 kill -9 pid
如果是需要保留的进程,但是端口冲突,可以修改当前要启动的服务的端口配置,更换为其他未被占用的端口即可。
几种方法的对比
我们可以通过下面的表格来对比几种查看端口占用方法的特点:
| 命令 | 默认安装情况 | 执行效率 | 适用场景 |
|---|---|---|---|
| netstat | 大部分发行版默认安装 | 一般 | 传统系统,习惯使用netstat的用户 |
| lsof | 部分发行版需要手动安装 | 一般 | 需要查看端口对应的详细进程信息的场景 |
| ss | 大部分新发行版默认安装 | 高 | 追求执行效率,新系统的使用场景 |
实际使用过程中可以根据自己的系统环境和习惯选择合适的命令,三种方法都可以准确查到端口的占用情况。