在Linux系统中,80端口是HTTP服务的默认端口,当我们需要启动Nginx、Apache等Web服务时,如果该端口已经被其他进程占用,就会导致服务启动失败,因此学会查询80端口的占用情况是系统运维的基础技能。

使用netstat命令查询
netstat是Linux系统中常用的网络状态查看工具,大部分发行版默认都会安装,我们可以通过以下命令查询80端口的占用情况:
# 查看所有监听的端口,找到80端口对应的进程 netstat -tulnp | grep :80
命令参数说明:
- -t:显示TCP协议的连接
- -u:显示UDP协议的连接
- -l:只显示处于监听状态的连接
- -n:以数字形式显示地址和端口号,不解析服务名称
- -p:显示占用端口的进程ID和进程名称
执行命令后,输出结果中PID/Program name列就是占用80端口的进程ID和进程名称,比如输出tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx,说明进程ID是1234,进程是nginx。
使用lsof命令查询
lsof是列出当前系统打开文件的工具,在Linux中一切皆文件,网络连接也属于文件,因此可以用它查询端口占用:
# 查询占用80端口的进程 lsof -i :80
参数说明:-i表示查询网络连接,后面跟端口号即可。执行命令后,输出结果中PID列是进程ID,COMMAND列是进程名称,USER列是进程所属用户。
如果只需要获取进程ID,可以结合awk命令过滤:
# 只输出占用80端口的进程ID lsof -t -i :80
使用ss命令查询
ss是比netstat更高效的网络状态查看工具,现在很多Linux发行版推荐使用ss替代netstat,查询80端口占用的命令如下:
# 查询80端口的占用情况 ss -tulnp | grep :80
ss的参数和netstat基本类似,输出结果格式也相近,同样可以找到对应的进程ID和进程名称。
查询到进程后如何终止
如果确认占用80端口的进程是不需要的,可以通过以下命令终止进程:
# 普通终止进程,1234替换为实际查到的进程ID kill 1234 # 如果普通终止无效,强制终止进程 kill -9 1234
终止进程后,可以再次执行上面的查询命令确认80端口是否已经释放。
注意事项
- 以上查询命令大部分需要root权限才能看到完整的进程信息,普通用户执行可能看不到进程名称,建议加上sudo执行,比如
sudo netstat -tulnp | grep :80 - 如果查询不到80端口的占用信息,说明当前80端口没有被任何进程占用,可以直接启动对应的Web服务
- 不要随意终止系统关键进程,终止前先确认进程的作用,避免影响系统正常运行