在麒麟操作系统上进行服务故障排查、端口冲突诊断或安全审计时,首要任务是确认当前系统中有哪些端口正被本地服务所监听。如果缺乏足够的权限,普通用户执行命令会遗漏大量关键的监听信息,进而导致服务状态误判——这一点务必事先明确。

使用 ss 命令查看所有监听端口(推荐)
ss 是银河麒麟 V10 默认内置的现代网络工具,解析速度快,输出简洁,相比 netstat 更加稳定可靠。直接执行:
sudo ss -tuln
此命令会列出所有 TCP 和 UDP 监听端口,但不包含进程名称,适合快速概览。若输出为空,说明当前没有服务主动监听任何端口。添加 -p 参数可以显示关联的进程信息:sudo ss -tulnp
注意:如果不加 sudo,-p 参数将失效,并且大部分监听项会直接不显示——必须使用 root 权限执行,否则你会看到大量缺失行,误以为端口未被占用,导致排查方向错误。
使用 netstat 命令查看监听端口(兼容旧脚本)
netstat 功能全面但默认未安装,适合需要沿用现有运维脚本或查看连接状态细节的场景。首先安装工具包:
sudo apt-get install net-tools
然后列出监听端口并关联进程:
sudo netstat -tulnp
若要单独检查某个端口(例如 3306)是否处于 LISTEN 状态:
sudo netstat -tulnp | grep ':3306'
如果结果中 State 列为 LISTEN 且进程列为 mysqld,说明 MySQL 服务正常监听;如果没有输出,并不代表端口未被占用,更可能是服务未启动或绑定失败。
使用 lsof 精确定位监听进程
方法一:查看所有 TCP 监听套接字
sudo lsof -iTCP -sTCP:LISTEN -n -P
方法二:反查指定端口归属(例如查询 8080 端口)
sudo lsof -i :8080
方法三:仅提取 PID 和进程名(便于后续 kill 或调试操作)
sudo lsof -t -i :22
该命令返回纯数字 PID,可直接用于 systemctl stop 或 kill 命令,避免手动复制导致的错误。
通过 firewall-cmd 验证端口是否对外放行
firewall-cmd 反映的是 firewalld 策略中允许外部访问的端口,而非真实的监听状态。执行:
sudo firewall-cmd --list-ports
如果 80 端口出现在该列表里,说明防火墙已放行;但即使端口未列出,也不代表服务没有监听——它可能只绑定了 127.0.0.1 回环地址,或者服务本身未启动。确认 firewalld 是否运行:
sudo firewall-cmd --state
