活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Rocky Linux系统更新教程详解 从基础命令到高级技巧让你轻松掌握系统更新方法

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-8 02:00:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Rocky Linux是一个社区支持的企业级操作系统,作为CentOS的替代品,与RHEL(Red Hat Enterprise Linux)二进制兼容。保持系统最新状态对于安全性、稳定性和功能更新至关重要。本教程将带领您从Rocky Linux系统更新的基础知识开始,逐步深入到高级技巧,帮助您全面掌握系统更新的方法。

1. 基础命令

1.1 更新系统前准备工作

在开始更新系统之前,有几个准备工作是必不可少的:

首先,了解您当前运行的Rocky Linux版本是很重要的:
  1. cat /etc/rocky-release
  2. # 或者使用
  3. hostnamectl
复制代码

这将显示您的系统版本信息,例如:”Rocky Linux release 9.1 (Blue Onyx)“。

虽然系统更新通常是安全的,但在进行重大更新前备份重要数据始终是一个好习惯:
  1. # 创建备份目录
  2. mkdir /backup/$(date +%Y%m%d)
  3. # 备份重要配置文件
  4. cp -r /etc /backup/$(date +%Y%m%d)/
  5. # 如果有重要用户数据,也一并备份
  6. cp -r /home /backup/$(date +%Y%m%d)/
复制代码

确保系统有足够的磁盘空间和内存来完成更新:
  1. # 检查磁盘空间
  2. df -h
  3. # 检查内存使用情况
  4. free -h
复制代码

更新过程需要稳定的网络连接,确保网络正常工作:
  1. ping -c 4 rockylinux.org
复制代码

1.2 基本更新命令

Rocky Linux使用DNF(Dandified YUM)作为其默认的包管理器,它是YUM(Yellowdog Updater Modified)的下一代版本。尽管DNF是默认的,但YUM命令仍然兼容并可以使用。

要更新系统上所有的软件包到最新版本,使用以下命令:
  1. # 使用DNF
  2. sudo dnf update -y
  3. # 或者使用YUM
  4. sudo yum update -y
复制代码

-y参数表示自动回答所有提示为”是”,这在自动化脚本中很有用。在交互式使用中,您可以省略这个参数,以便在更新前查看将要进行的更改。

如果您只是想查看有哪些可用的更新,而不实际安装它们:
  1. sudo dnf check-update
复制代码

这将列出所有可用的更新包,但不会安装它们。

如果您只想更新特定的软件包,而不是整个系统:
  1. sudo dnf update package_name
复制代码

例如,只更新Apache web服务器:
  1. sudo dnf update httpd
复制代码

如果您只关心安全相关的更新:
  1. sudo dnf update --security
复制代码

这将只应用与安全相关的更新,忽略其他类型的更新。

1.3 软件包查询和管理

了解如何查询和管理软件包是系统管理的重要部分。

如果您想查找特定的软件包:
  1. sudo dnf search keyword
复制代码

例如,搜索与web服务器相关的软件包:
  1. sudo dnf search web server
复制代码

获取有关特定软件包的详细信息:
  1. sudo dnf info package_name
复制代码

例如,获取关于Apache的详细信息:
  1. sudo dnf info httpd
复制代码

查看系统中已安装的软件包:
  1. sudo dnf list installed
复制代码

如果您想查看已安装但不再需要的软件包(孤立包):
  1. sudo dnf list extras
复制代码

如果您想删除不再需要的软件包:
  1. sudo dnf remove package_name
复制代码

例如,删除Apache:
  1. sudo dnf remove httpd
复制代码

DNF会缓存下载的软件包,随着时间的推移,这些缓存可能会占用大量磁盘空间。清理这些缓存:
  1. sudo dnf clean all
复制代码

如果您只想清理过期的缓存:
  1. sudo dnf clean expire-cache
复制代码

2. 进阶技巧

2.1 自动更新配置

对于服务器环境,配置自动更新可以确保系统始终保持最新状态,减少手动干预的需要。

DNF-automatic是一个可以自动下载和安装更新的工具:
  1. sudo dnf install dnf-automatic -y
复制代码

编辑配置文件/etc/dnf/automatic.conf:
  1. sudo vi /etc/dnf/automatic.conf
复制代码

以下是重要的配置选项:
  1. [commands]
  2. # 下载模式,设置为download-only只下载不安装,设置为install则下载并安装
  3. download_updates = yes
  4. apply_updates = yes
  5. [emitters]
  6. # 发送通知的方式,可以设置为stdio(标准输出)、motd(登录消息)或email
  7. emit_via = motd
  8. [email]
  9. # 如果emit_via设置为email,则需要配置邮件发送
  10. email_from = root@example.com
  11. email_to = admin@example.com
  12. email_host = localhost
  13. [command]
  14. # 如果需要,可以指定在更新前或更新后运行的命令
复制代码
  1. sudo systemctl enable --now dnf-automatic.timer
复制代码

这将启用并启动定时器,默认情况下,它会在每天早上6点检查更新。
  1. sudo systemctl status dnf-automatic.timer
  2. sudo systemctl list-timers dnf-automatic.timer
复制代码

如果您想自定义更新检查的时间,可以创建一个自定义的定时器:
  1. sudo systemctl edit dnf-automatic.timer
复制代码

然后添加以下内容(例如,将更新检查设置为每天凌晨2点):
  1. [Timer]
  2. OnCalendar=*-*-* 02:00:00
复制代码

2.2 更新历史和回滚

有时候,更新可能会导致问题。了解如何查看更新历史和回滚更新是非常重要的。
  1. sudo dnf history list
复制代码

这将显示所有DNF事务的列表,包括安装、更新和删除软件包的操作。
  1. sudo dnf history info transaction_id
复制代码

将transaction_id替换为您想查看的事务ID。

如果您想撤销某个特定事务(例如,事务ID为15):
  1. sudo dnf history undo 15
复制代码

如果您想重做某个特定事务:
  1. sudo dnf history redo 15
复制代码

在某些情况下,您可能需要使用RPM进行更精细的回滚:
  1. # 查看最近安装的软件包
  2. rpm -qa --last | head
  3. # 回滚特定软件包到旧版本
  4. sudo dnf downgrade package_name
复制代码

2.3 仓库管理

Rocky Linux使用软件仓库来分发软件包。了解如何管理这些仓库对于系统更新至关重要。
  1. sudo dnf repolist
复制代码
  1. sudo dnf repolist all
复制代码
  1. # 启用仓库
  2. sudo dnf config-manager --enable repository_id
  3. # 禁用仓库
  4. sudo dnf config-manager --disable repository_id
复制代码

您可以通过添加.repo文件来添加新的仓库。例如,添加EPEL(Extra Packages for Enterprise Linux)仓库:
  1. sudo dnf install epel-release -y
复制代码

或者手动添加仓库:
  1. sudo vi /etc/yum.repos.d/custom.repo
复制代码

然后添加以下内容:
  1. [custom-repo]
  2. name=Custom Repository
  3. baseurl=http://example.com/repo/$releasever/$basearch/
  4. enabled=1
  5. gpgcheck=0
复制代码

如果您有多个仓库提供相同的软件包,您可以设置仓库优先级:
  1. sudo vi /etc/yum.repos.d/custom.repo
复制代码

添加priority参数(数字越小,优先级越高):
  1. [custom-repo]
  2. name=Custom Repository
  3. baseurl=http://example.com/repo/$releasever/$basearch/
  4. enabled=1
  5. gpgcheck=0
  6. priority=1
复制代码

为了加快DNF操作的速度,您可以预加载仓库元数据:
  1. sudo dnf makecache
复制代码

3. 高级技巧

3.1 内核更新管理

内核是系统的核心,管理内核更新需要特别注意。
  1. uname -r
复制代码
  1. sudo dnf list --installed | grep kernel
复制代码
  1. sudo dnf update kernel
复制代码

在安装新内核后,您可能需要设置它为默认启动项:
  1. sudo grubby --set-default /boot/vmlinuz-$(uname -r)
复制代码

默认情况下,DNF会保留一定数量的旧内核。您可以通过修改/etc/dnf/dnf.conf文件来调整这个数量:
  1. sudo vi /etc/dnf/dnf.conf
复制代码

添加或修改以下行:
  1. installonly_limit=3
复制代码

这将保留最新的3个内核版本。

如果您想手动删除旧内核:
  1. # 查看已安装的内核
  2. sudo dnf list --installed | grep kernel
  3. # 删除特定版本的内核
  4. sudo dnf remove kernel-core-version kernel-modules-version
复制代码

3.2 安全更新

安全更新是系统维护的重要部分,特别是对于服务器。
  1. sudo dnf updateinfo list security
复制代码
  1. sudo dnf update --security
复制代码
  1. sudo dnf updateinfo info RHSA-2023:1234
复制代码

将RHSA-2023:1234替换为您想查看的安全公告ID。

您也可以安装yum-security插件来增强安全更新的管理:
  1. sudo dnf install yum-security -y
  2. # 列出安全更新
  3. sudo yum --security check-update
  4. # 应用安全更新
  5. sudo yum --security update
复制代码

您可以配置dnf-automatic只应用安全更新:
  1. sudo vi /etc/dnf/automatic.conf
复制代码

修改以下行:
  1. [commands]
  2. # 只下载安全更新
  3. download_updates = yes
  4. # 只安装安全更新
  5. apply_updates = yes
  6. upgrade_type = security
复制代码

3.3 批量更新和自定义更新策略

对于管理多台Rocky Linux系统,批量更新和自定义更新策略非常重要。

如果您有多台Rocky Linux系统需要更新,您可以使用脚本进行批量更新:
  1. #!/bin/bash
  2. # 服务器列表
  3. servers=("server1.example.com" "server2.example.com" "server3.example.com")
  4. # 为每台服务器执行更新
  5. for server in "${servers[@]}"; do
  6.     echo "Updating $server..."
  7.     ssh $server "sudo dnf update -y"
  8.     echo "Update completed for $server"
  9. done
复制代码

将此脚本保存为batch_update.sh,然后添加执行权限并运行:
  1. chmod +x batch_update.sh
  2. ./batch_update.sh
复制代码

Ansible是一个强大的自动化工具,非常适合进行批量系统更新:

首先,安装Ansible:
  1. sudo dnf install ansible -y
复制代码

然后,创建一个清单文件/etc/ansible/hosts:
  1. [rocky_servers]
  2. server1.example.com
  3. server2.example.com
  4. server3.example.com
复制代码

创建一个Ansible playbookupdate.yml:
  1. ---
  2. - name: Update Rocky Linux systems
  3.   hosts: rocky_servers
  4.   become: yes
  5.   tasks:
  6.     - name: Update all packages
  7.       dnf:
  8.         name: "*"
  9.         state: latest
  10.     - name: Reboot system if kernel was updated
  11.       reboot:
  12.         when: ansible_kernel != reboot_required.rc
复制代码

运行playbook:
  1. ansible-playbook update.yml
复制代码

您可以创建自定义的更新策略,例如,只更新特定的软件包组:
  1. #!/bin/bash
  2. # 定义要更新的软件包组
  3. package_groups=("Core" "Base" "Development Tools")
  4. # 更新每个软件包组
  5. for group in "${package_groups[@]}"; do
  6.     echo "Updating $group packages..."
  7.     sudo dnf group update "$group" -y
  8.     echo "Update completed for $group"
  9. done
复制代码

您也可以创建一个更复杂的自定义更新脚本,包含错误处理和通知功能:
  1. #!/bin/bash
  2. # 定义日志文件
  3. LOG_FILE="/var/log/system_update.log"
  4. EMAIL="admin@example.com"
  5. # 记录开始时间
  6. echo "Update started at $(date)" >> $LOG_FILE
  7. # 检查更新
  8. echo "Checking for updates..." >> $LOG_FILE
  9. sudo dnf check-update >> $LOG_FILE 2>&1
  10. if [ $? -ne 0 ]; then
  11.     echo "No updates available." >> $LOG_FILE
  12.     echo "Update completed at $(date)" >> $LOG_FILE
  13.     exit 0
  14. fi
  15. # 应用更新
  16. echo "Applying updates..." >> $LOG_FILE
  17. sudo dnf update -y >> $LOG_FILE 2>&1
  18. if [ $? -ne 0 ]; then
  19.     echo "Update failed. Check $LOG_FILE for details." | mail -s "Update Failed" $EMAIL
  20.     exit 1
  21. fi
  22. # 检查是否需要重启
  23. if [ -f /var/run/reboot-required ]; then
  24.     echo "System reboot required." >> $LOG_FILE
  25.     echo "A system reboot is required. Please schedule a reboot at your earliest convenience." | mail -s "Reboot Required" $EMAIL
  26. fi
  27. # 记录完成时间
  28. echo "Update completed at $(date)" >> $LOG_FILE
  29. # 发送完成通知
  30. echo "System update completed successfully. Check $LOG_FILE for details." | mail -s "Update Completed" $EMAIL
复制代码

将此脚本保存为custom_update.sh,然后添加执行权限并运行:
  1. chmod +x custom_update.sh
  2. ./custom_update.sh
复制代码

4. 常见问题及解决方案

4.1 DNF/YUM 错误及解决方案

错误信息:
  1. error: Public key for *.rpm is not installed
复制代码

解决方案:
  1. sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
复制代码

错误信息:
  1. Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
复制代码

解决方案:
  1. sudo dnf clean all
  2. sudo dnf distro-sync
复制代码

如果问题仍然存在,检查网络连接和DNS设置。

错误信息:
  1. Error: Package: package_name
  2.            Requires: dependency_name
  3.            Installing: package_name-1.0-1.el8.x86_64 (repository)
  4.                dependency_name = 1.0
复制代码

解决方案:
  1. sudo dnf clean all
  2. sudo dnf update --skip-broken
复制代码

或者尝试:
  1. sudo rpm -e --nodeps package_name
  2. sudo dnf install package_name
复制代码

4.2 更新后系统问题

解决方案:

1. 在启动时选择旧内核
2. 进入系统后,修复问题:
  1. sudo grubby --set-default /boot/vmlinuz-old-version
复制代码

1. 如果问题仍然存在,考虑回滚最近的更新:
  1. sudo dnf history undo last_transaction_id
复制代码

解决方案:

1. 检查服务状态:
  1. sudo systemctl status service_name
复制代码

1. 查看日志:
  1. sudo journalctl -u service_name -n 100
复制代码

1. 重新安装服务:
  1. sudo dnf reinstall service_name
复制代码

1. 重置服务配置:
  1. sudo rpmconf -a
复制代码

4.3 磁盘空间不足

错误信息:
  1. Error: Transaction check error:
  2.   installing package package_name needs XMB on the / filesystem
复制代码

解决方案:

1. 清理DNF缓存:
  1. sudo dnf clean all
复制代码

1. 删除旧的内核:
  1. sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
复制代码

1. 删除不再需要的软件包:
  1. sudo dnf autoremove
复制代码

1. 查找并删除大文件:
  1. sudo find /var/log -type f -name "*.log" -exec ls -lh {} \;
  2. sudo find / -type f -size +100M -exec ls -lh {} \;
复制代码

5. 总结

Rocky Linux系统更新是维护系统安全、稳定性和功能性的关键任务。本教程从基础命令开始,逐步深入到高级技巧,帮助您全面掌握系统更新的方法。

我们学习了如何使用DNF/YUM进行基本更新操作,如何配置自动更新,如何管理更新历史和回滚,以及如何管理软件仓库。我们还探讨了更高级的主题,如内核更新管理、安全更新以及批量更新和自定义更新策略。

通过掌握这些技巧,您可以确保您的Rocky Linux系统始终保持最新状态,同时最大限度地减少更新带来的风险和不便。无论您是管理单个系统还是管理数百台服务器,这些技巧都能帮助您高效、安全地完成系统更新任务。

记住,定期更新系统是良好系统管理实践的重要组成部分。通过结合本教程中介绍的各种技术和工具,您可以建立一个强大、可靠的系统更新策略,为您的Rocky Linux系统提供最佳的保护和性能。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则