在 Linux 中查看端口占用:,1. **
netstat -tulpn | grep
**:查看监听端口及对应进程。,2. **ss -tulpn | grep
**:更快速替代 netstat。,3. **lsof -i :
**:查找占用指定端口的进程。方法1:使用 netstat
命令(经典工具)
netstat
是网络统计工具,可查看所有网络连接和监听端口。
操作步骤:
netstat -tuln | grep <端口号>
- 参数解析
-t
:TCP端口
-u
:UDP端口
-l
:仅显示监听中的端口
-n
:以数字形式显示(不解析域名)
-p
:显示进程信息(需sudo权限)
示例:
$ netstat -tulnp | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
输出解读:
端口 22
被进程 sshd
(PID 1234)占用,协议为TCP。
方法2:使用 ss
命令(netstat
的替代品)
ss
(Socket Statistics)更快速高效,语法与 netstat
类似。
操作步骤:
ss -tuln | grep <端口号>
示例:
$ ss -tuln sport = :80 tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
输出解读:
端口 80
处于监听状态(未显示进程时需结合 -p
参数)。
方法3:使用 lsof
命令(查看文件与进程关联)
lsof
(List Open Files)可精确查看占用端口的进程。
操作步骤:
sudo lsof -i :<端口号>
示例:
$ sudo lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 5678 mysql 33u IPv6 123456 0t0 TCP *:mysql (LISTEN)
输出解读:
端口 3306
被 mysqld
进程(PID 5678)占用。
方法4:使用 /proc
文件系统(底层排查)
Linux 通过 /proc
目录暴露进程信息,可直接读取网络状态。
操作步骤:
grep -l <端口号> /proc/net/tcp* # 查找TCP端口 cat /proc/<PID>/net/tcp # 根据PID检查
适用场景:
当系统未安装 netstat
/ss
时使用(如精简版Docker容器)。
端口占用后的处理建议
- 终止占用进程:
sudo kill <PID> # 正常终止 sudo kill -9 <PID> # 强制终止(慎用)
- 修改服务配置:
若需保留原进程,修改应用配置文件更换端口(如Nginx的listen
指令)。 - 预防冲突:
- 使用
systemctl status <服务名>
检查服务状态。 - 通过
crontab
设置定期端口检查脚本。
- 使用
方法对比与选择指南
方法 | 优势 | 适用场景 |
---|---|---|
netstat |
兼容性广(旧系统支持) | 基础检查 |
ss |
执行速度快,输出简洁 | 高效批量检查 |
lsof |
进程信息详细,支持过滤 | 精准定位占用源 |
/proc |
不依赖外部工具 | 极简环境故障排查 |
安全提示:
- 操作需
sudo
权限的命令时,确保理解其风险。- 生产环境中,终止进程前请确认其作用(如
sshd
占用22端口属正常现象)。
引用说明: 参考 Linux 官方文档(man7.org)及以下工具手册:
netstat(8)
,ss(8)
,lsof(8)
的 man page 文档。- Linux 内核文档
/proc/net/
部分(kernel.org)。 - 操作实践基于 Ubuntu 22.04/CentOS 7 测试验证。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/18798.html