排查前的准备工作:确认操作系统类型、获取权限、安装工具

端口排查这事儿,看着简单,但准备工作没做好,后面全是坑。我见过太多人一上来就敲命令,结果权限不够、工具没装,折腾半天啥也没查出来。咱们先把底子打好。

第一步:确认你用的什么系统

不同系统,命令不一样,工具也不一样。你想想看,Windows 上用 netstat -ano,Linux 上却是 ss -tlnp,搞混了只会报错。

怎么确认?很简单:

  • Windows:打开 cmd,敲 ver 或 systeminfo | findstr /B /C:"OS Name"
  • Linux:敲 uname -a 或 cat /etc/os-release
  • macOS:敲 sw_vers 或 uname -a

我个人习惯,先看一眼终端提示符——Windows 是 C:\>,Linux/macOS 是 $ 或 #。嗯,这招最快。

小技巧: 如果你远程连了一台服务器,不确定是啥系统,敲 hostnamectl(Linux)或 systeminfo(Windows),信息一目了然。

第二步:拿到管理员/root 权限

端口排查,说白了就是要看系统底层网络状态。普通用户权限不够,很多关键信息看不到。

我举个例子:Linux 上用 ss -tlnp 查看进程 PID,普通用户只能看到自己的进程,root 才能看到所有。Windows 上 netstat -b 也需要管理员权限,否则直接报错。

怎么获取?

  • Windows:右键 cmd 或 PowerShell,选「以管理员身份运行」
  • Linux:命令前加 sudo,或者 su - 切换到 root
  • macOS:同样用 sudo,或者 sudo -i 进 root shell
注意: 我曾经在排查生产环境端口冲突时,忘了用 sudo,结果 lsof 只显示了部分进程,漏掉了关键的系统服务。排查了半小时才发现是权限问题。所以,一开始就提权,别省这一步。

第三步:安装必要的工具

不同系统预装的工具不一样。咱们得确保手上有这几把「刀」:

工具 Windows Linux macOS 主要用途
netstat 系统自带 通常预装(net-tools) 系统自带 查看端口监听、连接状态
ss 无 预装(iproute2) 无 比 netstat 更快、更详细
lsof 无 需安装 预装 查看哪个进程打开了端口
Resource Monitor 系统自带 无 无 图形化查看端口和进程

Windows 上的准备

Windows 自带 netstat 和 Resource Monitor,基本够用。但如果你想要更强大的功能,我建议装一个 TCPView(微软 Sysinternals 工具包里的),图形化、实时刷新,排查端口冲突特别好用。

安装方式:去微软官网下载 TCPView,解压即用,无需安装。

Linux 上的准备

Linux 发行版不同,预装情况也不同。我遇到过 CentOS 7 默认没装 lsof,Ubuntu 20.04 默认有 ss 但没有 netstat。所以,建议统一检查一遍:

# 检查 netstat
which netstat || echo "netstat 未安装"

# 检查 ss
which ss || echo "ss 未安装"

# 检查 lsof
which lsof || echo "lsof 未安装"

缺啥装啥:

# Debian/Ubuntu 系列
sudo apt update
sudo apt install net-tools lsof

# CentOS/RHEL 系列
sudo yum install net-tools lsof

# 或者用 dnf(Fedora)
sudo dnf install net-tools lsof
我的建议: 在 Linux 上,ss 比 netstat 快得多,而且信息更全。我个人习惯优先用 ss,只有在需要看老式输出格式时才用 netstat。但 lsof 是必装的,它能直接告诉你「哪个进程占用了这个端口」,这是 ss 和 netstat 做不到的。

macOS 上的准备

macOS 自带 netstat 和 lsof,基本不用额外装。但 netstat 的参数和 Linux 版略有不同,比如查看监听端口要用 netstat -anvp tcp | grep LISTEN。

如果你想要更现代的工具,可以用 Homebrew 安装 nmap 或 mtr,但排查端口占用,lsof 已经足够了。

# macOS 上查看端口占用的标准姿势
sudo lsof -i :8080

一张图看懂准备工作流程

我把整个准备工作的逻辑画成了流程图,方便你对照执行:

端口排查准备工作流程图 端口排查准备工作流程 开始排查 步骤1:确认操作系统类型 Windows / Linux / macOS 步骤2:获取管理员/root权限 sudo / 以管理员身份运行 步骤3:安装必要工具 netstat / ss / lsof / Resource Monitor 准备就绪,开始排查 💡 说明: 每完成一步,建议用命令验证一下(如 which ss、sudo -v),确保环境真的准备好了。

常见问题与避坑

  • 装了 net-tools 还是找不到 netstat? 检查一下 PATH,或者直接敲 /usr/sbin/netstat。有些发行版把 sbin 目录排除在普通用户的 PATH 之外。
  • macOS 上 lsof 报错「permission denied」? 必须加 sudo,否则看不到其他用户的进程。
  • Windows 上 Resource Monitor 怎么打开? 按 Win + R,输入 resmon,回车。或者在任务管理器「性能」标签页里点「打开资源监视器」。
曾经踩过的坑: 有一次我在一台 Ubuntu 服务器上排查端口冲突,ss -tlnp 显示端口被一个 PID 为 1234 的进程占用,但 ps aux | grep 1234 却查不到任何信息。后来才发现,那个进程是容器里的,宿主机上根本看不到。所以,如果你在容器环境下排查,记得先确认是宿主机还是容器内的端口占用。

好了,准备工作做到这一步,你的环境已经齐活了。接下来,咱们就可以正式进入端口排查的实战环节了。