服务器测评网
我们一直在努力

linux主机端口被占用了,如何快速查看是哪个进程?

在Linux系统管理和网络排错中,了解主机上开放了哪些端口、哪些服务正在监听这些端口,是一项至关重要的基本技能,无论是部署新应用、排查服务连接问题,还是进行安全审计,都离不开对主机端口状态的精确掌握,本文将系统性地介绍几种主流且高效的方法,帮助您全面地查看Linux主机端口信息。

netstat – 经典的网络工具

netstat(Network Statistics)是一个历史悠久且功能强大的网络统计工具,尽管在一些最新的Linux发行版中逐渐被ss取代,但它依然是许多系统管理员熟悉的“老朋友”,通过netstat,我们可以轻松获取网络连接、路由表、接口统计等信息。

要查看当前主机所有监听的TCP和UDP端口,最常用的命令组合是:

netstat -tuln

让我们来解析这个命令的各个参数:

  • -t:显示TCP(Transmission Control Protocol)端口。
  • -u:显示UDP(User Datagram Protocol)端口。
  • -l:仅显示处于监听状态的套接字。
  • -n:以数字形式显示地址和端口号,而不是尝试解析成服务名或主机名,这能显著提高执行速度。

执行后,您会看到类似以下的输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 0.0.0.0:68              0.0.0.0:*

这里的Local Address列显示了监听的IP地址和端口。0.0.1:631表示服务仅在本地回环地址的631端口上监听,而::22则表示服务在所有IPv6地址的22端口(SSH服务)上监听。

ss – 现代高效的替代品

ss(Socket Statistics)是netstat的现代替代品,它直接从内核获取信息,因此比netstat更快、更高效,在大多数现代Linux系统(如CentOS 7+, Ubuntu 18.04+)上,ss都是默认安装的,并且是推荐使用的工具。

20251017182743992

ss的用法与netstat高度兼容,上述查看监听端口的命令可以完全对应为:

ss -tuln

其输出格式与netstat类似,但信息可能更详尽,执行速度也更快,对于日常的端口检查,养成使用ss的习惯是明智的选择。

lsof – 列出打开文件的利器

在Linux哲学中,“一切皆文件”,网络端口也不例外,它们被视为一种特殊的文件。lsof(List Open Files)是一个功能极其强大的命令,用于列出当前系统打开的文件,利用它,我们可以精准地找到是哪个进程占用了某个端口。

要查看所有网络连接,可以使用:

lsof -i

但更实用的场景是,当我们想知道某个特定端口(例如80端口)被哪个进程占用时:

20251017182743774

lsof -i :80

这个命令会直接返回监听80端口的进程名、进程ID(PID)、用户等信息,这是ssnetstat需要结合grep或其他命令才能实现的便捷功能,因此在定位具体问题时,lsof往往能一击即中。

解读端口状态与协议

在查看端口时,理解不同的状态和协议至关重要。

  • 协议:主要分为TCP和UDP,TCP是面向连接的协议,提供可靠的数据传输,常用于Web(HTTP/HTTPS)、SSH、FTP等服务,UDP是无连接的协议,传输速度快但不保证可靠性,常用于DNS、DHCP、视频流等场景。
  • 状态:对于TCP连接,状态信息尤为重要:
    • LISTEN:服务正在监听端口,等待传入的连接请求。
    • ESTABLISHED:一个连接已经建立,双方可以进行数据传输。
    • TIME_WAIT:连接主动关闭后,等待一段时间以确保对方收到了关闭请求,这是TCP协议保证可靠性的机制之一。
    • CLOSE_WAIT:被动关闭方收到对方的关闭请求,但应用程序尚未关闭连接。

实用技巧与高级用法

掌握了基本工具后,一些组合命令和外部工具能让我们事半功倍。

  1. 查找特定端口:如果端口列表很长,可以使用grep进行过滤,查找80端口:
    ss -tuln | grep :80
  2. 外部扫描视角netstatsslsof都是从主机内部视角查看,如果想模拟外部攻击者或用户,看看哪些端口是对外开放的,可以使用强大的网络扫描工具nmap

    20251017182743878

    # 安装nmap (如果未安装)
    # sudo apt-get install nmap  (Debian/Ubuntu)
    # sudo yum install nmap      (CentOS/RHEL)
    # 扫描本机开放的TCP端口
    nmap -sT localhost

    nmap会主动尝试连接端口,从而判断其是否开放,这对于安全审计非常有价值。

工具对比与总结

为了更直观地选择合适的工具,下表对它们进行了总结:

工具 主要用途 优点 常用命令示例
netstat 查看网络连接、路由、接口统计 经典通用,兼容性好 netstat -tuln
ss 查看网络套接字信息 速度快,信息详细,现代推荐 ss -tuln, ss -tulnp
lsof 查看进程打开的文件(包括端口) 能直接关联进程与端口,定位问题精准 lsof -i :22
nmap 网络发现和安全审计 外部视角,功能强大,端口服务识别 nmap -sT -O localhost

查看Linux主机端口是系统管理员的基本功,对于日常快速检查,ss -tuln是首选;当需要深入探究某个端口与具体进程的关联时,lsof -i :端口号是最佳利器;而进行安全评估或外部连通性测试时,则应求助于nmap,灵活运用这些工具,将使您在管理和维护Linux系统时更加得心应手,从容应对各种网络相关的挑战。

赞(0)
未经允许不得转载:好主机测评网 » linux主机端口被占用了,如何快速查看是哪个进程?