ss比netstat更快更可靠,因它直接从内核socket表读取数据,而netstat需解析/proc文件系统;ss属iproute2默认预装,netstat依赖已停更的net-tools且新系统常未安装。

直接用 sudo ss -tulnp | grep :端口号,这是当前最可靠、最快、兼容性最好的方法。
为什么优先用 ss 而不是 netstat
netstat 在多数新系统(如 Ubuntu 22.04+、CentOS 8+、Fedora)中已不预装,且依赖 net-tools 包,而 ss 属于 iproute2 套件,默认随系统安装。它从内核 socket 表直接读取数据,延迟更低、输出更稳定;netstat 则需拼接多个 /proc/net/ 文件,容易在高负载下卡顿或漏信息。如果你执行 netstat -tulnp 报错 command not found,不用折腾安装,直接切到 ss 即可。
lsof -i :端口号 看得全但权限要求高
lsof 输出字段最丰富(COMMAND、PID、USER、NAME 都一目了然),但它把端口当作“打开的文件”处理,某些容器环境或最小化镜像里默认没装,且非 root 用户执行时,对非本用户进程常显示 - 或空 PID,无法定位真正占用者。实际使用中:
- 必须加 sudo 才能看全所有进程
- 若提示 command not found,Debian/Ubuntu 下运行 sudo apt install lsof,RHEL/CentOS 用 sudo yum install lsof
- 注意语法:冒号 : 必须紧贴端口号,写成 lsof -i :8080,不能是 lsof -i 8080 或 lsof -i : 8080
别信 netstat -an | grep 端口号 这类残缺命令
这类命令常见于过时教程或面试题,但实际无效:
- netstat -an 不带 -p,压根不显示 PID 和进程名
- 不带 -l 会混入大量 ESTABLISHED 连接,干扰判断
- 不带 -n 可能显示 :http 而非 :80,导致 grep 失效
- iostat、ps、top 等完全无关工具,查端口纯属误用
查到 PID 后怎么确认是不是真凶
拿到 PID 后别急着 kill,先验证进程真实性:
- 运行 ps -o pid,comm,args -p PID 看完整启动命令
- 检查工作目录:readlink /proc/PID/cwd
- 查配置路径:cat /proc/PID/cmdline | tr '\0' ' '
- 特别注意 PID 为 1 的进程(通常是 systemd 或容器 init),强行 kill 可能导致服务崩溃


















