netstat -tulpn | grep
**:查看监听端口的进程名和 PID。,2. **lsof -i :
**:直接列出占用指定端口的进程信息。,3. **ss -tulpn | grep
**:更现代的替代命令,功能类似 netstat。,通常需要 root 权限才能查看所有进程信息。🔍 方法一:使用 ss
命令(推荐)
ss
(Socket Statistics)是替代 netstat
的现代工具,执行速度快且默认预装:
sudo ss -tulnp | grep :端口号
示例(查看80端口):
sudo ss -tulnp | grep :80
输出解析:
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=18))
nginx
:进程名称pid=1234
:进程IDfd=18
:文件描述符
⚙️ 方法二:使用 lsof
命令
lsof
(List Open Files)可查看文件与端口的关联:
sudo lsof -i :端口号
示例(查看3306端口):
sudo lsof -i :3306
输出解析:
mysqld 5678 mysql 34u IPv6 0xabcd1234 0t0 TCP *:mysql (LISTEN)
mysqld
:进程名5678
:进程PIDmysql
:运行用户
💡 若未安装:
sudo apt install lsof
(Debian/Ubuntu)或sudo yum install lsof
(RHEL/CentOS)
📡 方法三:使用 netstat
命令(传统方案)
netstat
兼容性广,但部分新系统需手动安装:
sudo netstat -tulnp | grep :端口号
常用参数:
-t
:TCP端口-u
:UDP端口-l
:仅监听端口-n
:禁用域名解析(加速)-p
:显示进程信息
🛠️ 方法四:使用 fuser
命令
直接通过端口号查询进程:
sudo fuser 端口号/tcp
示例(终止占用8080的进程):
sudo fuser -k 8080/tcp # -k 选项终止进程
⚖️ 方法对比与选择建议
工具 | 速度 | 预装情况 | 功能亮点 |
---|---|---|---|
ss |
⚡️ 极快 | 多数系统 | 信息简洁,性能最优 |
lsof |
⚡️ 快 | 需手动安装 | 支持查看文件关联细节 |
netstat |
🐢 较慢 | 部分预装 | 兼容性强,语法易记 |
fuser |
⚡️ 快 | 通常预装 | 快速终止进程 |
🔧 实战案例:解决端口冲突
场景:启动Nginx时报错 80端口被占用
- 查找进程:
sudo ss -tulnp | grep :80
- 发现占用进程PID为
1234
(假设为旧Apache进程) - 终止进程:
sudo kill 1234 # 正常终止 sudo kill -9 1234 # 强制终止(慎用)
- 重新启动Nginx:
sudo systemctl start nginx
⚠️ 注意事项
- 权限要求:查询系统级端口需
sudo
权限 - 谨慎终止进程:避免误杀关键服务(如数据库)
- 临时端口:
TIME_WAIT
状态端口属正常释放过程,无需处理 - 服务自启:若重启后端口仍被占,检查系统服务(如
systemctl list-unit-files
)
掌握 ss
、lsof
、netstat
和 fuser
四类工具,可覆盖所有端口排查场景,推荐优先使用 ss
或 lsof
获取详细信息,结合 kill
或 fuser -k
安全释放端口,定期检查端口占用能有效预防服务异常,提升系统稳定性。
引用说明:
- 工具文档:
man ss
,man lsof
,man netstat
,man fuser
- 协议标准:IEEE 802.3, TCP/IP RFC 793
- 系统支持:适用于Linux kernel 2.6+及主流发行版(Ubuntu, CentOS, RHEL等)
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/18820.html