活动公告

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

Rocky Linux软件包安装全攻略 掌握dnf和yum命令成为Linux管理高手 从基础操作到高级技巧一站式学习

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

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

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

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

x
引言

Rocky Linux是一个社区支持的企业级操作系统,旨在作为CentOS的替代品。它完全兼容Red Hat Enterprise Linux (RHEL),为用户提供了一个稳定、可靠且安全的Linux发行版。在Rocky Linux系统中,软件包管理是系统管理员日常工作中不可或缺的一部分。掌握dnf和yum命令的使用,不仅能提高工作效率,还能确保系统的稳定性和安全性。

软件包管理器是Linux系统中的核心工具,它负责安装、更新、配置和删除软件包。在Rocky Linux中,主要使用dnf(Dandified YUM)作为默认的软件包管理器,它是yum(Yellowdog Updater Modified)的下一代版本。本文将全面介绍dnf和yum命令的使用,从基础操作到高级技巧,帮助读者成为Linux管理高手。

软件包管理基础

什么是软件包管理?

软件包管理是Linux系统中用于安装、更新、配置和删除软件的一套工具和流程。在Linux系统中,软件通常以”包”的形式分发,这些包包含了程序的二进制文件、配置文件、文档以及依赖关系信息。软件包管理器能够自动处理软件之间的依赖关系,简化了软件安装和维护的过程。

dnf与yum的关系

dnf(Dandified YUM)是yum的下一代版本,首次引入于Fedora 18,并成为Fedora 22及以后版本的默认软件包管理器。Rocky Linux 8及以后版本也采用dnf作为默认的软件包管理器。

dnf与yum的主要区别:

1. 性能:dnf使用了libsolv库进行依赖解析,比yum更快、更高效。
2. 内存使用:dnf占用的内存更少。
3. API:dnf提供了更好的API支持,便于开发人员创建自定义工具。
4. 插件系统:dnf有更强大的插件系统。
5. 兼容性:dnf向后兼容yum的大多数命令和语法。

在Rocky Linux中,yum命令实际上是指向dnf的符号链接,因此使用yum命令时,实际上是在调用dnf。这使得习惯了yum的用户可以无缝过渡到dnf。

软件包仓库

软件包仓库(Repository)是存储软件包及其元数据的服务器。Rocky Linux使用多个官方仓库,包括:

• BaseOS:提供核心操作系统功能的基础软件包。
• AppStream:提供用户应用程序、运行时语言和数据库。
• Extras:提供额外的软件包。
• EPEL(Extra Packages for Enterprise Linux):提供额外的企业级Linux软件包。

此外,用户还可以添加第三方仓库,如EPEL、Remi、RPM Fusion等,以获取更多软件选择。

dnf命令基础操作

安装软件包

使用dnf安装软件包是最基本的操作之一。以下是安装软件包的基本命令:
  1. dnf install 软件包名称
复制代码

例如,安装nginx web服务器:
  1. dnf install nginx
复制代码

如果要安装多个软件包,可以一次性指定:
  1. dnf install nginx mysql php
复制代码

dnf会自动计算并安装所需的依赖包,确保软件能够正常运行。

更新软件包

更新系统中的软件包是保持系统安全和稳定的重要步骤。以下是更新软件包的命令:

更新所有已安装的软件包:
  1. dnf update
复制代码

或者使用:
  1. dnf upgrade
复制代码

在Rocky Linux中,dnf update和dnf upgrade功能相同,都会更新系统中所有可更新的软件包。

如果要更新特定的软件包:
  1. dnf update 软件包名称
复制代码

例如,更新nginx:
  1. dnf update nginx
复制代码

删除软件包

当不再需要某个软件包时,可以使用以下命令将其删除:
  1. dnf remove 软件包名称
复制代码

例如,删除nginx:
  1. dnf remove nginx
复制代码

默认情况下,dnf只会删除指定的软件包,而不会删除其依赖项。如果要同时删除不再需要的依赖项,可以使用:
  1. dnf autoremove
复制代码

查询软件包

dnf提供了多种查询软件包的方法,帮助用户了解系统中已安装的软件包和仓库中可用的软件包。

要搜索仓库中的软件包,可以使用:
  1. dnf search 关键词
复制代码

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

要查看软件包的详细信息,可以使用:
  1. dnf info 软件包名称
复制代码

例如,查看nginx的详细信息:
  1. dnf info nginx
复制代码

要列出系统中所有已安装的软件包:
  1. dnf list installed
复制代码

如果要查看特定软件包是否已安装:
  1. dnf list installed 软件包名称
复制代码

例如,查看nginx是否已安装:
  1. dnf list installed nginx
复制代码

要列出仓库中所有可用的软件包:
  1. dnf list available
复制代码

如果要查看特定软件包是否可用:
  1. dnf list available 软件包名称
复制代码

例如,查看nginx是否可用:
  1. dnf list available nginx
复制代码

要查看软件包包含的文件列表:
  1. dnf repoquery -l 软件包名称
复制代码

例如,查看nginx包含的文件:
  1. dnf repoquery -l nginx
复制代码

清理缓存

dnf会将下载的软件包和元数据存储在本地缓存中,以加快后续操作。随着时间的推移,这些缓存可能会占用大量磁盘空间。要清理dnf缓存,可以使用以下命令:

清理所有缓存:
  1. dnf clean all
复制代码

清理软件包缓存:
  1. dnf clean packages
复制代码

清理元数据缓存:
  1. dnf clean metadata
复制代码

yum命令基础操作

虽然dnf是Rocky Linux的默认软件包管理器,但yum命令仍然可用,并且与dnf兼容。以下是yum命令的基本操作。

安装软件包

使用yum安装软件包:
  1. yum install 软件包名称
复制代码

例如,安装nginx:
  1. yum install nginx
复制代码

更新软件包

更新所有已安装的软件包:
  1. yum update
复制代码

更新特定的软件包:
  1. yum update 软件包名称
复制代码

例如,更新nginx:
  1. yum update nginx
复制代码

删除软件包

删除软件包:
  1. yum remove 软件包名称
复制代码

例如,删除nginx:
  1. yum remove nginx
复制代码

查询软件包

搜索软件包:
  1. yum search 关键词
复制代码

查看软件包信息:
  1. yum info 软件包名称
复制代码

列出已安装的软件包:
  1. yum list installed
复制代码

列出可用的软件包:
  1. yum list available
复制代码

清理缓存

清理所有缓存:
  1. yum clean all
复制代码

软件包仓库管理

查看已启用的仓库

要查看系统中已启用的仓库,可以使用以下命令:
  1. dnf repolist
复制代码

要查看所有仓库(包括已禁用的仓库):
  1. dnf repolist all
复制代码

启用和禁用仓库

要临时启用一个仓库进行操作:
  1. dnf --enablerepo=仓库名称 命令
复制代码

例如,临时启用EPEL仓库并安装软件包:
  1. dnf --enablerepo=epel install 软件包名称
复制代码

要临时禁用一个仓库进行操作:
  1. dnf --disablerepo=仓库名称 命令
复制代码

例如,临时禁用EPEL仓库并安装软件包:
  1. dnf --disablerepo=epel install 软件包名称
复制代码

要永久启用或禁用仓库,需要编辑仓库的配置文件。仓库配置文件通常位于/etc/yum.repos.d/目录下。

例如,编辑EPEL仓库的配置文件:
  1. vi /etc/yum.repos.d/epel.repo
复制代码

在配置文件中,找到enabled参数,将其设置为1表示启用,设置为0表示禁用:
  1. [epel]
  2. name=Extra Packages for Enterprise Linux $releasever - $basearch
  3. #baseurl=http://download.fedoraproject.org/pub/epel/$releasever/$basearch
  4. metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch
  5. failovermethod=priority
  6. enabled=1
  7. gpgcheck=1
  8. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
复制代码

添加新的仓库

要添加新的仓库,可以在/etc/yum.repos.d/目录下创建一个新的仓库配置文件。例如,添加EPEL仓库:
  1. dnf install epel-release
复制代码

或者手动创建仓库配置文件:
  1. 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. 创建本地仓库目录:
  1. mkdir -p /mnt/local-repo
复制代码

1. 将软件包复制到本地仓库目录:
  1. cp /path/to/packages/*.rpm /mnt/local-repo/
复制代码

1. 安装createrepo工具:
  1. dnf install createrepo
复制代码

1. 创建仓库元数据:
  1. createrepo /mnt/local-repo/
复制代码

1. 创建仓库配置文件:
  1. vi /etc/yum.repos.d/local.repo
复制代码

在文件中添加以下内容:
  1. [local-repo]
  2. name=Local Repository
  3. baseurl=file:///mnt/local-repo
  4. enabled=1
  5. gpgcheck=0
复制代码

1. 清理并更新缓存:
  1. dnf clean all
  2. dnf makecache
复制代码

高级dnf/yum技巧

历史记录管理

dnf和yum会记录所有软件包操作的历史,这允许用户查看、撤销和重做操作。

查看历史记录:
  1. dnf history list
复制代码

查看特定操作的详细信息:
  1. dnf history info 操作ID
复制代码

撤销特定操作:
  1. dnf history undo 操作ID
复制代码

重做特定操作:
  1. dnf history redo 操作ID
复制代码

使用插件

dnf和yum支持各种插件,可以扩展其功能。要查看已安装的插件:
  1. dnf plugin list
复制代码

以下是几个常用的dnf插件:

dnf-plugins-core提供了一些有用的命令,如dnf config-manager用于管理仓库配置。

安装dnf-plugins-core:
  1. dnf install dnf-plugins-core
复制代码

使用dnf config-manager添加仓库:
  1. dnf config-manager --add-repo http://example.com/repo.repo
复制代码

启用或禁用仓库:
  1. dnf config-manager --enable 仓库名称
  2. dnf config-manager --disable 仓库名称
复制代码

dnf-automatic插件允许自动更新系统软件包。

安装dnf-automatic:
  1. dnf install dnf-automatic
复制代码

配置dnf-automatic:
  1. vi /etc/dnf/automatic.conf
复制代码

在配置文件中,可以设置自动更新的行为,例如:
  1. [commands]
  2. #  What kind of upgrade to perform:
  3. # default                            = all available upgrades
  4. # security                           = only the security upgrades
  5. upgrade_type = security
  6. # Whether to apply updates automatically
  7. apply_updates = yes
  8. [emitters]
  9. # Name to use for this system in messages that are emitted
  10. system_name = my-hostname
  11. [command_email]
  12. # The email address to send emails to
  13. email_from = root@my-hostname
  14. email_to = admin@example.com
  15. email_host = localhost
复制代码

启用并启动dnf-automatic服务:
  1. systemctl enable --now dnf-automatic.timer
复制代码

下载软件包而不安装

有时可能需要下载软件包但不安装,例如用于离线安装或存档。

下载软件包:
  1. dnf download 软件包名称
复制代码

下载软件包及其所有依赖项:
  1. dnf download --resolve 软件包名称
复制代码

降级软件包

如果新版本的软件包出现问题,可能需要将其降级到之前的版本。

查看软件包的可用版本:
  1. dnf --showduplicates list 软件包名称
复制代码

降级软件包:
  1. dnf downgrade 软件包名称-版本
复制代码

例如,将nginx降级到1.18.0版本:
  1. dnf downgrade nginx-1.18.0-1.el8.ngx.x86_64
复制代码

组合软件包管理

Rocky Linux将相关的软件包组织成组,便于一次性安装多个相关软件包。

列出所有可用的软件包组:
  1. dnf group list
复制代码

查看特定软件包组的详细信息:
  1. dnf group info "组名"
复制代码

安装软件包组:
  1. dnf group install "组名"
复制代码

例如,安装”Development Tools”组:
  1. dnf group install "Development Tools"
复制代码

删除软件包组:
  1. dnf group remove "组名"
复制代码

模块管理

Rocky Linux 8引入了AppStream仓库,其中包含模块(Modules)。模块是一组相关的软件包集合,通常代表一个应用程序、语言运行时或一组工具。

列出所有可用的模块:
  1. dnf module list
复制代码

查看特定模块的详细信息:
  1. dnf module info 模块名
复制代码

安装特定模块的特定版本:
  1. dnf module install 模块名:流/版本
复制代码

例如,安装Node.js的12版本流:
  1. dnf module install nodejs:12
复制代码

启用模块流:
  1. dnf module enable 模块名:流
复制代码

重置模块流:
  1. dnf module reset 模块名
复制代码

批量操作

dnf和yum支持从文件中读取命令,进行批量操作。

创建一个包含dnf命令的文件:
  1. vi dnf-commands.txt
复制代码

在文件中添加要执行的命令,每行一个:
  1. install nginx
  2. install mysql
  3. install php
  4. update
复制代码

执行文件中的命令:
  1. dnf -y dnf-commands.txt
复制代码

使用事务

dnf支持事务操作,允许用户在执行前预览将要进行的更改。

开始一个事务:
  1. dnf shell
复制代码

在事务shell中,可以添加多个操作:
  1. > install nginx
  2. > install mysql
  3. > remove httpd
  4. > run
复制代码

退出事务shell:
  1. > quit
复制代码

排除特定软件包

在某些情况下,可能需要排除特定软件包不被更新。可以通过编辑/etc/dnf/dnf.conf文件来实现:
  1. vi /etc/dnf/dnf.conf
复制代码

在文件中添加exclude参数:
  1. [main]
  2. gpgcheck=1
  3. installonly_limit=3
  4. clean_requirements_on_remove=True
  5. exclude=kernel* php*
复制代码

这样,在执行dnf update时,所有以”kernel”和”php”开头的软件包将被排除在更新之外。

使用代理服务器

如果系统需要通过代理服务器访问互联网,可以配置dnf/yum使用代理。

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

添加代理配置:
  1. [main]
  2. gpgcheck=1
  3. installonly_limit=3
  4. clean_requirements_on_remove=True
  5. proxy=http://proxy.example.com:8080
  6. proxy_username=username
  7. proxy_password=password
复制代码

或者,可以通过环境变量设置代理:
  1. export http_proxy=http://proxy.example.com:8080
  2. export https_proxy=http://proxy.example.com:8080
复制代码

故障排除

解决依赖问题

有时,在安装或更新软件包时可能会遇到依赖问题。以下是解决依赖问题的一些方法:
  1. dnf clean all
  2. dnf makecache
复制代码
  1. dnf check
复制代码
  1. dnf --skip-broken update
复制代码

如果某个软件包导致依赖问题,可以尝试删除它:
  1. dnf remove 有问题的软件包
复制代码

处理GPG密钥问题

GPG(GNU Privacy Guard)密钥用于验证软件包的完整性和来源。如果遇到GPG密钥相关的问题,可以尝试以下方法:
  1. rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
复制代码
  1. dnf --nogpgcheck install 软件包名称
复制代码

编辑仓库配置文件:
  1. vi /etc/yum.repos.d/仓库名称.repo
复制代码

将gpgcheck设置为0:
  1. [repo]
  2. name=Repository
  3. baseurl=http://example.com/repo
  4. enabled=1
  5. gpgcheck=0
复制代码

处理仓库问题

如果遇到仓库相关的问题,可以尝试以下方法:
  1. dnf repolist -v
复制代码
  1. curl -I http://仓库URL
复制代码
  1. dnf --disablerepo=有问题的仓库 命令
复制代码
  1. dnf makecache --refresh
复制代码

处理锁定问题

如果dnf/yum进程被锁定,可能是因为另一个dnf/yum进程正在运行。可以尝试以下方法:
  1. ps aux | grep dnf
  2. ps aux | grep yum
复制代码
  1. rm -f /var/run/dnf.pid
  2. rm -f /var/run/yum.pid
  3. rm -f /var/cache/dnf/metadata_lock.pid
复制代码

如果上述方法不起作用,可以尝试重启系统:
  1. reboot
复制代码

处理磁盘空间不足问题

如果在安装或更新软件包时遇到磁盘空间不足的问题,可以尝试以下方法:
  1. dnf clean all
复制代码

Rocky Linux默认保留3个最新版本的内核。可以减少保留的内核数量:

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

修改installonly_limit参数:
  1. [main]
  2. gpgcheck=1
  3. installonly_limit=2
  4. clean_requirements_on_remove=True
复制代码
  1. dnf autoremove
复制代码
  1. find /var/log -type f -size +100M -exec ls -lh {} \;
  2. du -sh /var/cache/dnf/*
复制代码

实用案例

案例1:搭建LAMP环境

LAMP(Linux, Apache, MySQL, PHP)是一种流行的Web开发环境。以下是使用dnf在Rocky Linux上搭建LAMP环境的步骤:
  1. dnf install httpd
复制代码

启动并启用Apache服务:
  1. systemctl start httpd
  2. systemctl enable httpd
复制代码
  1. dnf install mariadb-server mariadb
复制代码

启动并启用MariaDB服务:
  1. systemctl start mariadb
  2. systemctl enable mariadb
复制代码

运行安全安装脚本:
  1. mysql_secure_installation
复制代码
  1. dnf install php php-mysqlnd php-gd php-xml php-mbstring php-json
复制代码

重启Apache服务以加载PHP模块:
  1. systemctl restart httpd
复制代码

创建一个PHP测试文件:
  1. echo "<?php phpinfo(); ?>" > /var/www/html/info.php
复制代码

在浏览器中访问http://服务器IP/info.php,如果看到PHP信息页面,则表示LAMP环境搭建成功。

案例2:安装Docker

Docker是一个流行的容器化平台。以下是使用dnf在Rocky Linux上安装Docker的步骤:

首先,添加Docker仓库:
  1. dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
复制代码

安装Docker CE:
  1. dnf install docker-ce docker-ce-cli containerd.io
复制代码

启动并启用Docker服务:
  1. systemctl start docker
  2. systemctl enable docker
复制代码
  1. usermod -aG docker $USER
复制代码

注意:需要重新登录才能使组更改生效。
  1. docker run hello-world
复制代码

如果看到”Hello from Docker!“消息,则表示Docker安装成功。

案例3:安装Node.js和npm

Node.js是一个流行的JavaScript运行时,npm是Node.js的包管理器。以下是使用dnf在Rocky Linux上安装Node.js和npm的步骤:
  1. dnf module list nodejs
复制代码

选择要安装的Node.js版本流,例如14:
  1. dnf module install nodejs:14
复制代码
  1. node -v
  2. npm -v
复制代码

如果看到Node.js和npm的版本号,则表示安装成功。

案例4:安装Python开发环境

Python是一种流行的编程语言。以下是使用dnf在Rocky Linux上设置Python开发环境的步骤:
  1. dnf install python3 python3-pip
复制代码
  1. pip3 install virtualenv
复制代码
  1. mkdir myproject
  2. cd myproject
  3. python3 -m venv venv
  4. source venv/bin/activate
复制代码
  1. pip install numpy pandas matplotlib
复制代码
  1. deactivate
复制代码

案例5:系统更新和维护

定期更新系统是保持系统安全和稳定的重要步骤。以下是使用dnf进行系统更新和维护的步骤:
  1. dnf update
复制代码
  1. dnf autoremove
复制代码
  1. journalctl --vacuum-time=2weeks
复制代码
  1. dnf info installed
复制代码
  1. dnf history list
复制代码

总结与最佳实践

总结

本文全面介绍了Rocky Linux中的软件包管理,特别是dnf和yum命令的使用。从基础操作到高级技巧,我们涵盖了以下内容:

1. 软件包管理基础,包括dnf和yum的关系以及软件包仓库的概念。
2. dnf命令的基础操作,包括安装、更新、删除和查询软件包。
3. yum命令的基础操作,与dnf的对比和基本使用。
4. 软件包仓库管理,包括查看、启用、禁用和添加仓库。
5. 高级dnf/yum技巧,包括历史记录管理、插件使用、批量操作等。
6. 故障排除,包括解决依赖问题、处理GPG密钥问题、处理仓库问题等。
7. 实用案例,包括搭建LAMP环境、安装Docker、安装Node.js和npm、安装Python开发环境以及系统更新和维护。

最佳实践

为了有效地使用dnf和yum进行软件包管理,以下是一些最佳实践:

1. 定期更新系统:定期运行dnf update以保持系统安全和稳定。
2. 使用自动更新:考虑使用dnf-automatic插件进行自动安全更新。
3. 清理不需要的软件包:定期运行dnf autoremove以删除不再需要的依赖项。
4. 管理仓库:只启用必要的仓库,以减少潜在的安全风险和依赖问题。
5. 使用软件包组:使用dnf group install安装相关的软件包集合,而不是单独安装每个软件包。
6. 使用模块:对于支持模块的软件(如Node.js、Python等),使用dnf module命令管理不同版本。
7. 备份重要数据:在进行重大系统更新之前,备份重要数据。
8. 使用事务:在进行复杂的软件包操作时,使用dnf shell进行事务操作,以便在执行前预览更改。
9. 监控日志:定期检查/var/log/dnf.log和/var/log/yum.log文件,了解软件包操作的历史。
10. 学习高级功能:掌握dnf的高级功能,如历史记录管理、插件使用等,以提高工作效率。

定期更新系统:定期运行dnf update以保持系统安全和稳定。

使用自动更新:考虑使用dnf-automatic插件进行自动安全更新。

清理不需要的软件包:定期运行dnf autoremove以删除不再需要的依赖项。

管理仓库:只启用必要的仓库,以减少潜在的安全风险和依赖问题。

使用软件包组:使用dnf group install安装相关的软件包集合,而不是单独安装每个软件包。

使用模块:对于支持模块的软件(如Node.js、Python等),使用dnf module命令管理不同版本。

备份重要数据:在进行重大系统更新之前,备份重要数据。

使用事务:在进行复杂的软件包操作时,使用dnf shell进行事务操作,以便在执行前预览更改。

监控日志:定期检查/var/log/dnf.log和/var/log/yum.log文件,了解软件包操作的历史。

学习高级功能:掌握dnf的高级功能,如历史记录管理、插件使用等,以提高工作效率。

通过遵循这些最佳实践,您可以更有效地管理Rocky Linux系统中的软件包,确保系统的稳定性、安全性和性能。

dnf和yum是Rocky Linux系统中强大的软件包管理工具,掌握它们的使用是成为Linux管理高手的关键一步。希望本文能够帮助您从基础操作到高级技巧,全面了解dnf和yum命令的使用,提高您的Linux管理技能。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

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

本版积分规则