菜鸟科技网

Linux如何查端口状态?

在Linux系统中,查询端口状态是网络管理和系统运维中的常见操作,主要用于检查端口是否开放、监听状态、连接情况以及相关进程信息,掌握多种命令工具可以帮助用户高效诊断网络问题,以下是常用的Linux查询端口状态的命令及其详细使用方法。

Linux如何查端口状态?-图1
(图片来源网络,侵删)

netstat命令

netstat是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息,虽然在新版Linux中逐渐被ss替代,但仍有广泛使用。

基本语法

netstat [选项] [参数]

常用选项及示例

  • 查看所有监听端口

    netstat -tuln
    • -t:显示TCP端口
    • -u:显示UDP端口
    • -l:仅显示监听端口
    • -n:以数字形式显示地址和端口,避免DNS解析
  • 显示所有端口(包括监听和非监听)

    netstat -an
    • -a:显示所有连接
  • 显示进程ID和进程名

    Linux如何查端口状态?-图2
    (图片来源网络,侵删)
    netstat -tulnp
    • -p:显示进程ID和名称(需root权限)
  • 统计端口协议类型

    netstat -s

输出说明

输出表格包含以下列:

  • Proto:协议类型(TCP/UDP)
  • Local Address:本地IP和端口
  • Foreign Address:远程IP和端口
  • State:连接状态(如LISTENESTABLISHED
  • PID/Program name:进程ID和名称(使用-p时显示)

ss命令

ssnetstat的替代工具,速度更快,功能更强大,默认在大多数现代Linux发行版中可用。

基本语法

ss [选项] [过滤条件]

常用选项及示例

  • 查看所有监听端口

    ss -tuln

    选项与netstat类似,-t-u-l-n含义相同。

  • 显示TCP和UDP连接

    ss -t -a  # 显示所有TCP连接
    ss -u -a  # 显示所有UDP连接
  • 显示进程信息

    ss -tulnp
  • 显示socket统计摘要

    ss -s
  • 过滤特定端口

    ss -tuln 'sport = :22'  # 查询22端口

输出说明

输出表格包含以下列:

  • Netid:协议类型
  • State:连接状态
  • Recv-Q:接收队列
  • Send-Q:发送队列
  • Local Address:Port:本地地址和端口
  • Peer Address:Port:远程地址和端口
  • Process:进程信息

lsof命令

lsof(List Open Files)用于列出系统打开的文件,包括网络连接、设备文件等。

基本语法

lsof [选项] [文件/目录/端口]

常用选项及示例

  • 查看指定端口的占用情况

    lsof -i :8080  # 查询8080端口
    • -i:指定网络地址
  • 显示所有网络连接

    lsof -i
  • 显示UDP端口

    lsof -i UDP
  • 显示TCP端口

    lsof -i TCP

输出说明

输出表格包含以下列:

  • COMMAND:进程名
  • PID:进程ID
  • USER:进程所有者
  • FD:文件描述符
  • TYPE:文件类型(IPv4、IPv6)
  • DEVICE:设备号
  • SIZE/OFF:文件大小
  • NODE:索引节点
  • NAME:网络地址或端口

nmap命令

nmap(Network Mapper)是一款网络扫描工具,可扫描远程主机的端口状态。

基本语法

nmap [选项] [目标IP/域名]

常用选项及示例

  • 扫描本地主机的开放端口

    nmap localhost
  • 扫描特定端口

    nmap -p 22,80,443 localhost
  • 扫描UDP端口

    nmap -sU localhost
  • 详细输出

    nscan -v localhost

输出说明

输出显示目标主机的端口状态(openclosedfiltered)及服务信息。

/proc文件系统

通过读取/proc/net目录下的文件,可直接查看内核网络状态信息。

示例

  • 查看TCP端口

    cat /proc/net/tcp
    cat /proc/net/tcp6  # IPv6
  • 查看UDP端口

    cat /proc/net/udp
    cat /proc/net/udp6  # IPv6

输出格式

输出为十六进制格式,需转换IP和端口号,本地地址0500000A:0016表示IP0.0.5和端口22(十六进制0016转十进制)。

综合对比

以下是各命令的对比表格:

命令 优点 缺点 适用场景
netstat 兼容性好,功能全面 速度较慢,逐渐被淘汰 传统系统或兼容性要求高的场景
ss 速度快,功能强大 选项复杂,学习成本较高 现代Linux系统快速诊断
lsof 可查看文件和进程关联 仅限本地端口查询 查找端口占用进程
nmap 支持远程扫描,功能丰富 需额外安装,扫描可能被拦截 远程主机端口探测
/proc 直接读取内核数据,无需工具 输出格式复杂,需手动解析 深度调试或脚本自动化

相关问答FAQs

Q1: 如何快速查看本机所有监听的TCP端口?
A1: 使用ss -tlnnetstat -tln命令。

ss -tln

输出将显示所有监听的TCP端口及其IP地址,Local Address:Port列即为所需信息。

Q2: 如何查找占用8080端口的进程并终止它?
A2: 先用lsof -i :8080查找进程ID(PID),再用kill命令终止。

lsof -i :8080  # 输出如:nginx 1234 root 3u IPv4 0t0 TCP *:8080 (LISTEN)
kill -9 1234   # 强制终止PID为1234的进程

注意:kill -9为强制终止,建议优先使用killkill -15

分享:
扫描分享到社交APP
上一篇
下一篇