睿诚科技协会

Linux Shell网络配置如何高效排查故障?

  1. 基础网络配置与信息查看
  2. 网络连通性测试
  3. 网络数据包分析
  4. 网络状态与服务查看
  5. 高级网络工具与脚本

基础网络配置与信息查看

这些命令用于查看和配置本机的网络接口、IP 地址、路由表和 DNS 等。

Linux Shell网络配置如何高效排查故障?-图1
(图片来源网络,侵删)

ip 命令 (现代、功能强大)

ip 命令是 ifconfig 的现代替代品,功能更全面,是推荐的工具。

  • 显示所有网络接口信息:

    ip addr show
    # 或者简写
    ip a
  • 显示特定接口信息(如 eth0):

    ip addr show eth0
  • 启用/禁用网络接口:

    Linux Shell网络配置如何高效排查故障?-图2
    (图片来源网络,侵删)
    # 启用 eth0
    ip link set eth0 up
    # 禁用 eth0
    ip link set eth0 down
  • 为接口配置 IP 地址:

    # 为 eth0 配置静态 IP 地址 192.168.1.100/24
    ip addr add 192.168.1.100/24 dev eth0
  • 显示路由表:

    ip route show
    # 或者简写
    ip r
  • 添加/删除路由:

    # 添加一条默认路由,网关为 192.168.1.1
    ip route add default via 192.168.1.1
    # 添加一条到 10.10.10.0/24 网段的路由,下一跳为 192.168.1.254
    ip route add 10.10.10.0/24 via 192.168.1.254
    # 删除默认路由
    ip route del default

ifconfig 命令 (传统、仍广泛使用)

在许多旧系统或脚本中仍然能看到。

Linux Shell网络配置如何高效排查故障?-图3
(图片来源网络,侵删)
  • 显示所有网络接口信息:

    ifconfig -a
  • 显示特定接口信息(如 eth0):

    ifconfig eth0
  • 为接口配置 IP 地址:

    ifconfig eth0 192.168.1.100 netmask 255.255.255.0

ss / netstat 命令 (查看网络连接)

ssnetstat 的现代替代品,速度更快,信息更全。

  • 显示所有 TCP 和 UDP 连接:

    # 使用 ss (推荐)
    ss -tuln
    # 使用 netstat (传统)
    netstat -tuln
    • -t: TCP
    • -u: UDP
    • -l: 只显示监听端口
    • -n: 以数字形式显示地址和端口,不进行 DNS 解析(速度更快)
  • 显示所有连接(包括监听和非监听):

    ss -tulpn
    • -p: 显示进程ID和名称 (PID/Program name)
  • 查看指定端口的连接:

    ss -tulpn | grep ':80'

hostname / hostnamectl 命令

  • 查看/设置主机名:

    # 查看当前主机名
    hostname
    # 查看完整主机名信息 (systemd 系统)
    hostnamectl

route 命令 (传统)

查看和操作 IP 路由表,功能已被 ip route 取代。

route -n

网络连通性测试

这些是排查网络问题的最常用命令。

ping (测试网络连通性)

向目标主机发送 ICMP Echo Request 数据包,并等待响应。

# 测试与 baidu.com 的连通性
ping baidu.com
# 发送 5 个包后停止
ping -c 5 baidu.com
# 每隔 1 秒发送一个包
ping -i 1 baidu.com

traceroute / tracepath (跟踪网络路径)

显示数据包到达目标主机所经过的路由器。

# 使用 traceroute (可能需要安装)
traceroute baidu.com
# 使用 tracepath (通常自带,无需 root)
tracepath baidu.com

mtr (更强大的 traceroute)

mtr 结合了 pingtraceroute 的功能,并持续显示数据包的统计信息,是网络诊断的利器。

# 通常需要安装 sudo apt-get install mtr 或 yum install mtr
mtr baidu.com

wget / curl (测试应用层连通性)

这两个命令可以测试 HTTP/HTTPS 服务是否正常。

# 使用 curl 获取网页内容
curl -I http://baidu.com  # -I 只获取响应头,速度更快
curl http://baidu.com
# 使用 wget 下载文件
wget http://baidu.com

网络数据包分析

tcpdump (抓包分析)

tcpdump 是一个强大的命令行抓包工具,可以捕获和分析经过网络接口的数据包。

  • 基本用法:

    # 需要 root 权限
    sudo tcpdump
  • 抓取指定接口的数据包:

    sudo tcpdump -i eth0
  • 抓取与特定主机相关的数据包:

    # 抓取与 baidu.com 的所有通信
    sudo tcpdump host baidu.com
    # 抓取来自 baidu.com 的数据包
    sudo tcpdump src host baidu.com
    # 抓取去往 baidu.com 的数据包
    sudo tcpdump dst host baidu.com
  • 抓取特定端口的数据包:

    # 抓取所有 HTTP (80) 和 HTTPS (443) 流量
    sudo tcpdump port 80 or port 443
  • 抓取特定协议的数据包:

    # 抓取所有 TCP 流量
    sudo tcpdump tcp
    # 抓取所有 ICMP 流量 (ping 使用)
    sudo tcpdump icmp
  • 将抓包结果保存到文件:

    sudo tcpdump -w capture.pcap
  • 读取保存的抓包文件:

    tcpdump -r capture.pcap

网络状态与服务查看

ss / netstat (再次强调)

它们不仅显示连接,还显示监听的服务。

# 查看所有监听端口及其对应的进程
sudo ss -tulpn

systemctl / service (管理网络服务)

管理网络相关的系统服务,如 sshd (SSH), nginx, firewalld 等。

# 检查 sshd 服务状态
systemctl status sshd
# 启动 sshd 服务
systemctl start sshd
# 设置 sshd 服务开机自启
systemctl enable sshd
# 查看防火墙状态 (firewalld)
systemctl status firewalld

高级网络工具与脚本

nc / netcat (网络工具中的“瑞士军刀”)

nc 可以进行 TCP/UDP 连接、监听端口、发送数据等,功能非常灵活。

  • 作为客户端连接到远程服务器:

    # 连接到 baidu.com 的 80 端口
    nc baidu.com 80
    # 连接后可以手动输入 HTTP 请求,如 GET / HTTP/1.1
  • 作为服务器监听本地端口:

    # 在本机 1234 端口开启一个 TCP 监听
    nc -lvp 1234
    • -l: 监听模式
    • -v: 详细输出
    • -p: 指定端口
  • 简单的端口扫描:

    # 扫描 baidu.com 的 80 和 443 端口是否开放
    nc -z -v baidu.com 80 443
    • -z: 只扫描端口,不发送数据

Shell 脚本示例:检查多个网站是否可访问

#!/bin/bash
# 定义一个包含多个 URL 的数组
urls=(
    "http://www.baidu.com"
    "http://www.google.com"
    "http://www.github.com"
    "http://this-site-does-not-exist-12345.com"
)
# 遍历数组中的每个 URL
for url in "${urls[@]}"; do
    # 使用 curl 的 -f (fail silently on server errors) 和 -S (show error even if silent)
    # --connect-timeout 5 设置连接超时为 5 秒
    if curl -IfS --connect-timeout 5 "$url" > /dev/null; then
        echo "[SUCCESS] $url is accessible."
    else
        echo "[FAILED]  $url is not accessible."
    fi
done
exit 0
命令 主要用途 关键选项/示例
ip 现代、全面的网络配置 ip a, ip r, ip link set eth0 up
ifconfig 传统网络配置 (已过时) ifconfig eth0 192.168.1.100
ss 查看 TCP/UDP 连接 (推荐) ss -tulpn, ss -tuln
netstat 查看 TCP/UDP 连接 (传统) netstat -tuln
ping 测试网络连通性 ping -c 5 baidu.com
traceroute 跟踪数据包路径 traceroute baidu.com
mtr 持续跟踪并统计 mtr baidu.com
curl / wget 测试 HTTP/HTTPS 服务 curl -I http://baidu.com
tcpdump 抓包分析底层流量 sudo tcpdump -i eth0 host baidu.com
nc / netcat 网络调试和测试 nc -lvp 1234, nc baidu.com 80

掌握这些命令,你就可以在 Linux Shell 中高效地完成绝大多数网络管理、监控和排错任务。

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