linux系统的检测脚本,用于检查linux的网络配置,包括网络接口状态、IP地址、子网掩码、默认网关、DNS服务器、连通性测试等等

avatar
作者
筋斗云
阅读量:0

目录

一、要求

二、脚本介绍

1、脚本内容

2、脚本解释

(1) 检查是否以 root 用户身份运行

(2)显示脚本标题 

(3)打印主机名

(4)获取网络接口信息

(5)检查每个接口的状态

(6)检查默认网关

(7)检查DNS服务器

(8)进行 ping 测试

(a)输出标题说明接下来要进行网络连通性测试。

(b)进行 ping 测试

(c)对其他主机测试方法

3、脚本应用和运行

(1)脚本文件

(2)赋予权限

(3)执行结果

4、注意事项


一、要求

        由于工作需要,要编写一个用于检查Linux网络配置的自动检测脚本,可以涵盖多个方面,如网络接口状态、IP地址、子网掩码、默认网关、DNS服务器等,以及到公网的连通性的测试。

二、脚本介绍

        经过在centos系统中测试,完成了脚本,这个脚本可能需要根据具体系统配置(如使用的发行版)进行调整。

        闲话不说,直接介绍脚本吧。

1、脚本内容

       (PS:请注意,这个脚本可能需要根据具体需求和环境进行调整。)

 

 #!/bin/bash  # 检查是否以 root 用户身份运行 if [ "$(id -u)" != "0" ]; then     echo "This script must be run as root."     exit 1 fi  # 显示脚本标题   echo "" echo "    ====================="   echo "    Linux 网络配置检查脚本"   echo "    ====================="   echo "" # 打印主机名 echo "Hostname: $(hostname)"  echo "" echo "    ======== 获取并打印 IP所有网络接口 IP地址、子网掩码、状态和默认网关============="  # 获取网络接口信息 echo "正在检查网络接口状态..." interfaces=$(ip link show | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')  # 检查每个接口的状态 for interface in $interfaces; do     echo "网络接口: $interface"     ip link show $interface | grep 'state UP' > /dev/null     if [ $? -eq 0 ]; then         echo "状态: 已激活"         # 获取IP地址         ip addr show $interface | grep 'inet ' | awk '{print "IP地址&掩码: "$2}'         # 获取MAC地址         mac=$(ip link show $interface | awk '/link\/ether/ {print $2}')         echo "MAC地址: $mac"     else         echo "状态: 未激活"     fi     echo "---------------------------------" done  # 检查默认网关 echo "正在检查默认网关..." default_gateway=$(ip route | grep default | awk '{print$3}') if [ -z "$default_gateway" ]; then     echo "未找到默认网关。" else     echo "默认网关: $default_gateway" fi  # 检查DNS服务器 echo "正在检查DNS服务器配置..." dns_servers=$(cat /etc/resolv.conf | grep nameserver | awk '{print$2}') if [ -z "$dns_servers" ]; then     echo "未配置DNS服务器。" else     echo "DNS服务器:"     for server in $dns_servers; do         echo "- $server"     done fi    echo "" echo "    ======= ping 测试  =========="  # 进行 ping 测试 echo "Testing connectivity to vidisit.cn (3 packets)..." ping -c 3 vidisit.cn  # 如果想对特定的主机进行测试,可以添加一个参数 if [ $# -eq 1 ]; then     echo "Testing connectivity to $1 (3 packets)..."     ping -c 3 $1 fi  

2、脚本解释

        脚本中主要部分的解释如下:

(1) 检查是否以 root 用户身份运行

if [ "$(id -u)" != "0" ]; then     echo "This script must be run as root."     exit 1 fi

        这段代码检查当前用户是否具有 root 权限。id -u 命令返回当前用户的用户ID,如果用户ID不是0(即不是root用户),则打印一条消息并退出脚本。

(2)显示脚本标题 

echo ""  echo "    ====================="   echo "    Linux 网络配置检查脚本"   echo "    ====================="   echo ""

        这些 echo 命令用于在控制台输出脚本标题。

(3)打印主机名

echo "Hostname: $(hostname)"

        输出当前系统的主机名,$(hostname) 是一个命令替换,它执行 hostname 命令并将输出结果替换到当前位置。

(4)获取网络接口信息

echo "正在检查网络接口状态..." interfaces=$(ip link show | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')

        输出一条消息,然后使用 ip link show 命令获取网络接口信息,通过 awk 过滤掉本地回环接口(通常是 lo)、虚拟接口(通常是 virbr*)、无线接口(通常是 wl*)以及不以数字开头的行,最后打印出接口名称。

(5)检查每个接口的状态

for interface in $interfaces; do      echo "网络接口: $interface"      ip link show $interface | grep 'state UP' > /dev/null      if [ $? -eq 0 ]; then          echo "状态: 已激活"           获取IP地址          ip addr show $interface | grep 'inet ' | awk '{print "IP地址&掩码: "$2}'           获取MAC地址          mac=$(ip link show $interface | awk '/link\/ether/ {print $2}')          echo "MAC地址: $mac"      else          echo "状态: 未激活"      fi      echo "---------------------------------"  done

        这段代码遍历所有网络接口,并检查它们的状态。如果接口已激活,则打印出IP地址和MAC地址。

(6)检查默认网关

echo "正在检查默认网关..." default_gateway=$(ip route | grep default | awk '{print$3}') if [ -z "$default_gateway" ]; then     echo "未找到默认网关。" else     echo "默认网关: $default_gateway" fi

        检查系统的默认网关,如果找到则打印出来。

(7)检查DNS服务器

echo "正在检查DNS服务器配置..." dns_servers=$(cat /etc/resolv.conf | grep nameserver | awk '{print$2}') if [ -z "$dns_servers" ]; then     echo "未配置DNS服务器。" else     echo "DNS服务器:"     for server in $dns_servers; do         echo "- $server"     done  fi

        从 /etc/resolv.conf 文件中读取DNS服务器配置,并打印出来。

(8)进行 ping 测试

(a)输出标题说明接下来要进行网络连通性测试。

        echo ""

        echo "    ======= ping 测试  =========="

(b)进行 ping 测试

        echo "Testing connectivity to vidisit.cn (3 packets)..."

        ping -c 3 vidisit.cn

        使用 ping 命令测试到 vidisit.cn 的网络连通性,发送3个数据包。

(c)对其他主机测试方法

         如果想对特定的主机进行测试,可以添加一个参数

if [ $ -eq 1 ]; then     echo "Testing connectivity to $1 (3 packets)..."     ping -c 3 $1 fi

        如果脚本运行时提供了一个参数(即 $1),则使用该参数指定的主机名或IP地址进行 ping 测试。$ 表示传递给脚本的参数数量。

3、脚本应用和运行

(1)脚本文件

        将上述脚本保存为一个文件,例如  network_check_ok.sh。

(2)赋予权限

        赋予脚本执行权限,使用如下命令:

                chmod +x  network_check_ok.sh

(3)执行结果

        运行脚本使用如下命令:

        ./network_check_ok.sh。

        结果如下所示:

4、注意事项

(1)脚本中使用的命令(如 ip、systemd-resolve)在大多数现代Linux发行版中都是可用的,但在一些非常旧的发行版中可能不可用。

(2)对于DNS服务器,可以尝试使用 systemd-resolve(适用于使用systemd-resolved服务的系统),如果不可用,则回退到查看 /etc/resolv.conf 文件。但是查看 /etc/resolv.conf 最直接,所以本脚本采用此种方式。

(3)脚本的输出可能因系统配置和网络环境而异。

(4)脚本中没有包含错误处理逻辑,这在实际应用中可能是必要的。例如,可以添加一些检查来确保命令成功执行,并在失败时给出适当的错误消息。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!