在Linux系统中,可通过以下方法查看程序占用的端口号:
1、使用netstat命令
netstat是传统工具,用于查看网络连接和监听状态。执行以下命令可筛选特定进程的端口信息:
netstat -tuln | grep <进程名或PID>
参数说明:
- -t:显示TCP连接
- -u:显示UDP连接
- -l:仅显示监听状态的端口
- -n:以数字形式显示端口号(不解析服务名称)
输出结果会包含协议类型、本地地址、外部地址及进程状态,通过grep过滤后可快速定位目标进程的端口。
2、使用lsof命令
lsof通过文件描述符关联进程与端口,可直接查询特定端口或进程的占用情况:
- 查询指定端口:
lsof -i :<端口号> - 限定协议类型(TCP/UDP):
lsof -i TCP:<端口号>
lsof -i UDP:<端口号>
输出内容包含进程ID(PID)、用户、命令名称及端口状态,适合快速确认端口归属。
3、使用ss命令
ss是netstat的现代替代工具,查询效率更高,语法与netstat类似:
ss -tuln | grep <进程名或PID>
优势:
- 底层使用内核空间接口,速度更快
- 支持更详细的过滤条件(如-p直接显示进程名)
- 输出格式更简洁,适合脚本处理
4、通过/proc文件系统
Linux内核通过/proc虚拟文件系统暴露进程信息,每个进程对应/proc/<PID>目录。执行以下步骤可手动解析端口:
- 确认进程PID(如通过ps aux | grep <进程名>)
- 查看进程打开的套接字文件:
ls -l /proc/<PID>/fd | grep socket
结果解读:
- 符号链接指向的socket:[<inode>]中的inode号需与ss -tulnp输出的inode匹配
- 此方法需结合其他工具解析,适合深度调试场景
应用场景建议:
- 快速排查:优先使用ss或lsof,直接关联进程与端口
- 脚本自动化:ss -tulnp | awk '{print $5,$7}'可提取端口与进程名
- 兼容性需求:旧系统使用netstat,确保工具可用性
- 底层调试:通过/proc分析内核级套接字信息
以上方法覆盖了从用户态到内核态的多种查询路径,可根据实际需求选择最适合的工具组合。