netstat -tunlp需root权限才能显示PID和程序名,否则显示“-”;最小化系统可能未安装net-tools;过滤端口须用grep ':3306'避免误匹配;推荐用ss -tulnp或lsof -i :端口替代。

直接用 netstat -tunlp 查端口归属,前提是你是 root 或有 sudo 权限;否则看不到 PID 和程序名,只显示 -。
为什么 netstat -tunlp 有时不显示程序名
普通用户执行时,netstat 无法读取其他用户的进程信息,所以 PID/Program name 列为空或显示为 -。这不是命令写错了,是权限限制。
- 必须加
sudo才能获取完整信息:sudo netstat -tunlp - 某些最小化系统(如 Alpine 容器)默认没装
netstat,会报command not found,得先装net-tools包 -
-t(TCP)、-u(UDP)、-n(不解析服务名)、-l(只看监听态)、-p(显示进程)——漏掉任一参数都可能得不到目标结果
netstat -tunlp | grep :3306 这样过滤为什么可能失败
常见错误是漏了冒号或空格不匹配,比如写成 grep 3306 会匹配到 PID 里含 3306 的进程,而不是监听 3306 端口的那行。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 正确写法必须带冒号:
sudo netstat -tunlp | grep ':3306' - IPv6 地址格式是
:::3306,所以grep ':3306'能同时匹配 IPv4 的:3306和 IPv6 的:::3306 - 如果只关心 TCP,加
-t更准;若 UDP 服务(如 DNS)也要查,就得保留-u
比 netstat 更快更可靠的替代方案
现代 Linux 发行版推荐用 ss 或 lsof,它们启动更快、输出更干净,且在容器或 systemd 环境下兼容性更好。
-
sudo ss -tulnp | grep ':8080'——ss是netstat的继任者,尤其适合高并发场景 -
sudo lsof -i :27017—— 直接按端口查,字段清晰,COMMAND和PID一目了然 - 如果连
lsof都没装,sudo yum install lsof(CentOS/RHEL)或sudo apt install lsof(Debian/Ubuntu)
真正容易被忽略的是:有些服务(比如 Docker 启动的容器)监听在 127.0.0.1:8080,而 netstat -tunlp 默认显示所有地址,但你用 curl localhost:8080 能通,用本机 IP 却不通——这时得看监听地址列,不是只盯 PID。

















