linux查看哪些端口被占用:三条命令按需选用
linux查看哪些端口被占用,优先选用ss命令列出全部监听端口,搭配lsof锁定单个端口对应的进程,老旧系统可使用netstat;ss预装在iproute2工具包,无需额外安装,netstat依赖net-tools包,多数新版系统没有预装,不加sudo执行命令时,大概率只能看到端口,无法显示进程PID;高并发服务器优先用ss,它读取内核netlink接口,查询速度明显更快,lsof适合精准定位单个端口进程,但遍历所有文件句柄,大批量端口查询时效率偏低。
主流端口查询命令对比
| 命令 | 依赖软件包 | 适用场景 | 查询效率 |
|---|---|---|---|
| ss | iproute2(系统预装) | 现代CentOS7、Ubuntu18.04及以上版本,批量查看所有端口 | 较高,支持万级连接查询 |
| netstat | net-tools(需要手动yum或apt安装) | CentOS6、Debian7等老旧Linux发行版,兼容旧脚本 | 一般,连接量大时查询变慢 |
| lsof | lsof(多数系统预装) | 只排查某一个指定端口,定位进程名称与PID | 较低,只适合单端口精准排查 |
批量查看全部占用端口
你执行ss-tulnp可以一次性列出所有TCP、UDP监听端口,-t代表TCP协议,-u代表UDP协议,-l只保留正在监听的服务端口,-n只显示数字IP与端口,不解析域名与服务名,-p输出进程PID与程序名;加上sudo才能完整读取所有进程信息。
不带sudo会隐藏root进程的PID。
如果你使用老旧系统,执行netstat-tulnp实现相同效果,没有netstat工具时,CentOS系列运行yuminstallnet-tools,Ubuntu系列运行aptinstallnet-tools完成安装。
精准查询单个端口占用进程
你直接执行sudolsof-i:端口号,就能直接查到占用该端口的程序、PID与运行用户;例如查询80端口,命令写成sudolsof-i:80;增加-nP参数可以关闭域名与服务解析,进一步加快查询速度。
这条命令只适合单端口排查,不要用它遍历全量端口。
补充操作:根据PID结束占用进程
拿到PID之后,你可以执行killPID平缓关闭进程,进程无法正常退出时,再使用kill-9PID强制终止端口占用;也可以组合命令一键杀掉端口进程:kill-9$(lsof-t-i:端口号),-t参数只输出PID数字,省去手动复制编号的步骤。
边界限制说明
仅监听状态的端口才会被-l参数筛选出来,已经建立连接的端口不会出现在列表里;同时普通非root用户执行查询,只能看到自己启动的进程,系统服务类端口只能用sudo查看完整进程信息。
