自学内容网 自学内容网

一个linux的自动检测的脚本,用于检查linux系统的软件更新和包管理

目录

一、要求

二、脚本介绍

1、脚本内容

2、脚本解释

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

(2). 检测系统发行版

(3). 根据操作系统选择包管理器

(4). 更新包列表

(5). 检查可用的更新

(6). 安装更新

(7). 结束和总结

3、脚本使用

(1)脚本文件

(2)赋予权限

(3)执行结果

(a)在Ubuntu系统执行情况

(b)在Centos系统执行情况


一、要求

        由于工作需要,要编写一个自动检测Linux系统软件更新和包管理的脚本,该脚本可以检查系统上的软件更新,并报告哪些包可以更新。这个脚本要能够适用于基于 Debian 和 Red Hat 的发行版,如 Ubuntu 和 CentOS。

二、脚本介绍

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

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

1、脚本内容

#!/bin/bash

# 检查登录是否以root身份运行
if [[ $EUID -ne 0 ]]; then
   echo "请以root用户或使用sudo权限运行此脚本"
   exit 1
fi

# 检测linux系统发行版
if cat /etc/os-release | grep -qi "ubuntu"; then
    DISTRO="Ubuntu"
elif cat /etc/os-release | grep -qi "centos"; then
    DISTRO="CentOS"
else
    echo "未识别的操作系统。仅支持Ubuntu和CentOS。"
    exit 1
fi

# 根据操作系统选择包管理器
case "$DISTRO" in
    "Ubuntu")
        PACKAGER="apt"
        ;;
    "CentOS")
        PACKAGER="yum"
        ;;
    *)
        echo "未知的包管理器。"
        exit 1
        ;;
esac

# 更新包列表
echo "正在更新包列表..."
$sudo $PACKAGER update

# 检查可用的更新
echo "正在检查可用的更新..."
$sudo $PACKAGER list --upgradable

# 安装更新
read -p "是否要安装所有更新? (y/N): " response
if [[ $response =~ ^[Yy]$ ]]; then
    echo "正在安装更新..."
    $sudo $PACKAGER upgrade -y
else
    echo "未安装更新。"
fi

echo "检查完毕。"

2、脚本解释

        这个脚本 auto_check_updates.sh 用于自动检测 Linux 系统上的软件更新,并提供选项来安装这些更新。

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

if [[ $EUID -ne 0 ]]; then
   echo "请以root用户或使用sudo权限运行此脚本"
   exit 1
fi

        这段代码检查当前用户是否具有 root 权限。$EUID 变量返回当前进程的有效用户 ID。如果不是以 root 身份运行,则脚本将打印一条消息并退出。

(2). 检测系统发行版

if cat /etc/os-release | grep -qi "ubuntu"; then
    DISTRO="Ubuntu"
elif cat /etc/os-release | grep -qi "centos"; then
    DISTRO="CentOS"
else
    echo "未识别的操作系统。仅支持Ubuntu和CentOS。"
    exit 1
fi

        这部分代码通过读取 /etc/os-release 文件来确定当前运行的是哪个 Linux 发行版。使用 grep -qi 命令来查找特定字符串,-q 表示安静模式,-i 表示忽略大小写。根据匹配的结果,设置 DISTRO 变量为相应的发行版名称。

(3). 根据操作系统选择包管理器

case "$DISTRO" in
    "Ubuntu")
        PACKAGER="apt"
        ;;
    "CentOS")
        PACKAGER="yum"
        ;;
    *)
        echo "未知的包管理器。"
        exit 1
        ;;
esac

        这部分代码根据 DISTRO 变量的值来确定使用哪个包管理器。如果是 Ubuntu,则使用 apt;如果是 CentOS,则使用 yum。如果 DISTRO 不是这两个值之一,则脚本将打印错误信息并退出。

(4). 更新包列表

echo "正在更新包列表..."

$sudo $PACKAGER update

        这部分代码使用选定的包管理器来更新包列表。对于 apt,这相当于运行 apt update;对于 yum,则运行 yum update(实际上是列出所有可更新的包)。

(5). 检查可用的更新

echo "正在检查可用的更新..."

$sudo $PACKAGER list --upgradable

        这部分代码使用选定的包管理器来检查是否有可用的更新。对于 apt,这相当于运行 apt list --upgradable;对于 yum,则运行 yum list --upgradable(实际上也是 yum check-update)。

(6). 安装更新

read -p "是否要安装所有更新? (y/N): " response
if [[ $response =~ ^[Yy]$ ]]; then
    echo "正在安装更新..."
    $sudo $PACKAGER upgrade -y
else
    echo "未安装更新。"
fi

        这部分代码询问用户是否希望安装所有可用的更新。如果用户输入 y 或 Y,则脚本将继续安装更新;否则,它将跳过安装步骤。对于 apt,这相当于运行 apt upgrade -y;对于 yum,则运行 yum upgrade -y。

(7). 结束和总结

        echo "检查完毕。"

        最后,脚本输出一条消息,表明检查已完成。

        这个脚本通过一系列条件判断和命令调用来实现对系统软件更新的检查,并提供了安装更新的选项。它可以作为基本模板来进一步扩展和完善,以适应不同的需求和场景。

      

3、脚本使用

(1)脚本文件

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

(2)赋予权限

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

        chmod +x auto_check_updates.sh

(3)执行结果

(a)在Ubuntu系统执行情况

        运行脚本使用如下命令:

        sh auto_check_updates.sh

        结果如下所示:

(b)在Centos系统执行情况

        运行脚本使用如下命令:

        sh auto_check_updates.sh

        结果如下所示:


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



原文地址:https://blog.csdn.net/weixin_70208651/article/details/142695447

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!