要确认Linux系统中开放并等待连接的端口,应直接读取内核socket表,推荐使用sudo ss -tuln查看全部监听端口,或依需选用netstat、lsof、fuser、nmap等工具辅助验证与排查。

如果您需要确认 Linux 系统中哪些端口正处于开放并等待连接的状态,则需直接读取内核 socket 表以获取实时、准确的监听信息。以下是多种可靠方法,适用于不同权限与环境需求:
一、使用 ss 命令查看所有监听端口
ss 是现代 Linux 发行版默认推荐的工具,它绕过用户态解析层,直接访问内核网络子系统,响应快、结果准,且无需额外安装。普通用户可查看自身进程监听端口,而 sudo 权限是查看全部监听端口(含其他用户及系统服务)的必要条件。
1、执行命令列出所有正在监听的 TCP 和 UDP 端口(不解析地址与服务名):
sudo ss -tuln
2、若仅关注 TCP 监听端口(排除 UDP 干扰):
sudo ss -tln
3、快速检查某端口(如 3000)是否被监听:
sudo ss -tuln | grep ':3000'
二、使用 netstat 命令兼容旧系统或容器基础镜像
netstat 虽在新发行版中逐步弃用,但在未预装 ss 的嵌入式设备、精简容器镜像或老旧服务器中仍具实用价值。其参数语义清晰,便于调试,但依赖 net-tools 包支持。
1、安装 net-tools(如提示 command not found):
Debian/Ubuntu 执行:sudo apt install net-tools
CentOS/RHEL 执行:sudo yum install net-tools
2、列出全部监听中的 TCP/UDP 端口(数字格式输出):
sudo netstat -tuln
3、定位特定端口(如 80)的监听状态及关联进程:
sudo netstat -tulpn | grep ':80'
三、使用 lsof 命令精准识别端口所属进程
lsof 将网络端口视为“打开的文件”,能提供最细粒度的进程级上下文,包括 COMMAND、PID、USER、TYPE 等字段,特别适合冲突排查与服务溯源。
1、列出所有处于 LISTEN 状态的网络套接字(禁用解析提升速度):
sudo lsof -i -P -n -s TCP:LISTEN
2、精确匹配指定端口(如 3306)并显示完整进程信息:
sudo lsof -i :3306
3、仅输出占用某端口的 PID(便于后续 kill 或调试):
sudo lsof -t -i :8080
四、使用 fuser 快速获取并释放端口占用
fuser 设计目标为高效定位与操作文件及套接字资源,不依赖连接状态解析,适合脚本集成或紧急端口释放场景。其输出简洁,可单步获取 PID 或直接终止进程。
1、直接返回占用某端口(如 22)的所有进程 ID:
sudo fuser 22/tcp
2、显示详细信息,含用户、访问类型与命令名:
sudo fuser -v 22/tcp
3、强制终止所有占用该端口的进程(操作不可逆,请谨慎执行):
sudo fuser -k 22/tcp
五、使用 nmap 扫描本地主机开放端口
nmap 是一个主动探测型网络扫描工具,适用于验证端口是否对外可达,尤其在怀疑防火墙规则或服务绑定地址限制时有效。它不依赖进程权限,但结果反映的是外部可访问性而非内核监听状态。
1、扫描本机全部 65535 个端口(需 root 权限以执行 SYN 扫描):
sudo nmap -p 1-65535 -sS localhost
2、快速检测常见服务端口(如 22、80、443、3306):
nmap -p 22,80,443,3306 localhost
3、仅扫描 TCP 端口并跳过主机发现阶段(加速本地扫描):
nmap -sn -p T:1-1000 localhost


















