netstat是用于查看端口占用及关联进程的网络统计工具,支持Windows和Linux系统,需管理员/root权限获取完整信息,还可使用PowerShell替代。

如果您需要确认某个端口是否已被其他进程占用,或排查服务启动失败的原因,则可能需要查看当前系统的端口占用情况。netstat 是一个常用的网络统计工具,可用于列出活动的网络连接、监听端口及关联的进程信息。以下是使用 netstat 命令查询端口占用情况的具体方法:
一、查看所有监听端口及对应进程
该方法适用于快速定位哪些端口处于监听状态,并显示占用它们的进程 ID(PID)和程序名称,需具备管理员权限才能看到所有进程信息。
1、打开命令提示符(Windows)或终端(Linux/macOS)。
2、输入命令:netstat -ano | findstr :端口号(Windows),其中“端口号”替换为实际要查询的数字,例如 netstat -ano | findstr :8080。
3、若需查看全部监听端口及其 PID,可执行:netstat -ano -p TCP | findstr LISTENING。
4、根据输出中的 PID,在任务管理器(Windows)或使用 tasklist | findstr "PID" 进一步确认进程名称。
二、在 Linux 系统中结合 netstat 与 grep 查询指定端口
Linux 下 netstat 默认可能未安装,需先确保 net-tools 已部署;该方法通过过滤输出精准定位目标端口的监听状态与进程归属。
1、检查 netstat 是否可用:which netstat 或 netstat --version。
2、若未安装,执行:sudo apt install net-tools(Debian/Ubuntu)或 sudo yum install net-tools(CentOS/RHEL)。
3、查询指定端口(如 3306):sudo netstat -tulnp | grep :3306。
4、解析输出字段:第 7 列为 pid/program name,格式为“1234/mysqld”,其中 1234 即为进程 ID。
三、使用 netstat 显示进程名而非仅 PID(Linux 需 root 权限)
该方式可直接在 netstat 输出中显示可读性强的程序名称,避免额外查 PID 步骤,但必须以 root 或 sudo 方式运行。
1、执行完整监听列表命令:sudo netstat -tulnep。
2、观察输出中 “Program name” 列,该列将显示类似 sshd: /usr/sbin/sshd 的完整路径信息。
3、若需筛选特定协议(如只看 TCP):sudo netstat -tlnp | grep tcp。
4、注意:-e 参数启用扩展信息,-p 参数要求 root 权限,否则会显示 “can’t identify protocol” 或权限拒绝提示。
四、Windows 下通过 netstat 与 tasklist 联合定位进程
当 netstat 输出仅含 PID 时,需借助 tasklist 命令将数字 PID 映射为具体应用程序名称,实现端口到软件的完整追踪。
1、执行监听端口查询:netstat -ano -p TCP。
2、从结果中复制目标端口所在行的 PID(最后一列数字)。
3、运行进程查询命令:tasklist /FI "PID eq XXXX",将 XXXX 替换为实际 PID。
4、输出中 “Image Name” 字段即为占用端口的程序名,例如 java.exe 或 nginx.exe。
五、替代方案:使用 PowerShell 替代 netstat(Windows 10/11)
PowerShell 提供了更现代的网络诊断命令 Get-NetTCPConnection,无需依赖 netstat,且原生支持对象化输出与筛选。
1、以管理员身份启动 PowerShell。
2、查询指定端口(如 443):Get-NetTCPConnection -LocalPort 443 | Format-List。
3、获取关联进程详情:Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess。
4、批量查询所有监听端口:Get-NetTCPConnection | Where-Object State -eq Listen | Sort-Object LocalPort。










