Linux 软件管理秘籍:rpm、repo、dnf 高效管理之道

发布于:2025-04-20 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、Linux软件包类型

在Linux系统中,软件包的类型和对应的包管理器因发行版而异,主要可分为以下几类:

  1. RPM(Red Hat Package Manager)

    • 适用发行版:主要用于 Red Hat、CentOS、Fedora 等基于 Red Hat 的发行版。

    • 包管理器rpm命令是基础管理工具,可用于安装、查询、验证、升级和删除软件包。但rpm在处理软件包依赖关系方面存在不足,因此常配合yum(Yellowdog Updater, Modified)或dnf(Dandified Yum ,yum的下一代版本 )使用。yumdnf可以自动解决软件包依赖,从软件源仓库中下载并安装所需的软件包及相关依赖项。例如,使用dnf install package_name即可安装指定软件包。

  2. DEB(Debian Package)

    • 适用发行版:广泛应用于 Debian、Ubuntu、Linux Mint 等基于 Debian 的发行版。

    • 包管理器dpkg是底层的包管理工具,负责软件包的安装、卸载和查询等基本操作。类似于rpmdpkg本身不处理依赖关系。而apt(Advanced Package Tool)则在dpkg基础上提供了更高级的功能,它可以从软件源仓库获取软件包信息,自动解决依赖关系并进行安装、更新和卸载操作。常用命令如apt install package_nameapt update(更新软件源索引)和apt upgrade(升级已安装软件包) 。

  3. Pacman

    • 适用发行版:主要用于 Arch Linux 及其衍生发行版。

    • 包管理器pacman是 Arch Linux 的核心包管理器,它不仅可以快速安装、升级、删除软件包,还能很好地处理依赖关系,并且支持系统升级和清理。例如,pacman -S package_name用于安装软件包,pacman -Syu用于同步软件源并升级整个系统。

以及各类压缩包(bz2、gz、xz等)
常见格式: .tar.gz、.tar.bz2、.tar.xz

安装流程:

解压:tar -xzvf package.tar.gz

配置:./configure(检查系统环境)

编译:make

安装:make install

工具依赖: gcc、make等编译工具链。

二、 rpm命令

1、概念
rpm 是 RPM Package Manager 的缩写(原为 Red Hat Package Manager),是 Red Hat 系 Linux 发行版(如 CentOS、Fedora、RHEL)中用于管理 .rpm 格式软件包的核心命令行工具。

2、基本功能
rpm 主要用于以下操作:

安装、卸载、升级软件包

查询软件包信息

验证软件包完整性

管理 RPM 数据库

3、命令
 以下命令为常用命令

(1)安装软件包

# 安装本地 RPM 包(显示详细进度)
rpm -ivh package.rpm

 

对于“-ivh”:

  • -i:安装(install)。

  • -v:显示详细信息(verbose)。

  • -h:显示进度条(hash)。

示例

rpm -ivh linuxqq_2.0.0-b2-1082_x86_64.rpm

 (2)卸载软件包

# 卸载已安装的软件包
rpm -e package-name

 

  • -e:卸载(erase)。

  • 需指定包名(非文件名),例如 nginx,而非 nginx-1.20.1.rpm

示例

rpm -e nginx

 (3)升级软件包

# 升级软件包(若未安装则自动安装)
rpm -Uvh package.rpm

  • -U:升级(upgrade)。

  • 若需降级,可添加 --oldpackage 选项。

 (4)查询软件包

# 查询所有已安装的包
rpm -qa
 
# 查询某个文件属于哪个包
rpm -qf /path/to/file
 
# 查询包的详细信息
rpm -qi package-name
 
# 列出包内的文件
rpm -ql package-name
 
# 查询未安装的 RPM 文件信息
rpm -qpi package.rpm

 

  • -q:查询(query)。

  • -a:所有已安装的包。

  • -f:根据文件路径查询所属包。

  • -i:显示包信息。

  • -l:列出包内文件。

  • -p:针对未安装的 RPM 文件操作。

(5)验证软件包 

# 验证已安装的包是否被修改
rpm -V package-name
 
# 验证所有包
rpm -Va

 -V:验证(verify),检查文件大小、权限、MD5 哈希等是否与原始安装一致。

输出符号说明(例如 S 表示文件大小变化,5 表示哈希值变化)。

(6)rpm的常用参数表

1)安装与升级

参数 说明 示例
-i <包名> 安装软件包(需完整路径) rpm -ivh nginx-1.20.1.rpm
-U <包名> 升级软件包(若未安装则直接安装) rpm -Uvh nginx-2.0.0.rpm
--force 强制覆盖安装(忽略依赖或版本冲突) rpm -ivh --force old-package.rpm
--nodeps 忽略依赖检查(可能导致后续问题) rpm -ivh --nodeps broken-package.rpm

 2)查询操作

参数 说明 示例
-qa 列出所有已安装的包 rpm -qa | grep nginx
-qi <包名> 显示包的详细信息(版本、开发者、安装时间等) rpm -qi nginx
-ql <包名> 列出包内所有文件 rpm -ql nginx
-qf <文件路径> 查询某个文件属于哪个包 rpm -qf /usr/sbin/nginx
-qc <包名> 列出包的配置文件 rpm -qc nginx
-qd <包名> 列出包的文档文件 rpm -qd nginx
-qR <包名> 列出包的依赖项 rpm -qR nginx
-qp <包名> 查询未安装的 RPM 文件信息(需搭配其他参数) rpm -qpl httpd.rpm

 3)卸载与清理

参数 说明 示例
-e <包名> 卸载软件包(需包名,非文件名) rpm -e nginx
--test 模拟卸载(仅检查依赖和冲突,不实际执行) rpm -e --test nginx

 4)验证与签名

参数 说明 示例
-V <包名> 验证已安装的包是否被修改(文件大小、权限、哈希等) rpm -V nginx
-Va 验证所有已安装的包 rpm -Va
--checksig <包> 检查 RPM 包的签名是否有效 rpm --checksig nginx-1.20.1.rpm
--import <密钥> 导入 GPG 密钥(用于验证签名) rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 5)数据库管理

参数 说明 示例
--rebuilddb 重建 RPM 数据库(修复损坏) rpm --rebuilddb
--initdb 初始化 RPM 数据库(仅当数据库不存在时使用) rpm --initdb

6)依赖与脚本控制

参数 说明 示例
--nodeps 忽略依赖检查 rpm -ivh --nodeps package.rpm
--noscripts 不执行包的安装/卸载脚本(如预安装脚本) rpm -ivh --noscripts package.rpm

 7)常用组合参数

组合 说明 示例
-ivh 安装时显示详细信息和进度条 rpm -ivh nginx.rpm
-Uvh 升级时显示详细信息和进度条 rpm -Uvh nginx.rpm
-qpi 查询未安装 RPM 包的详细信息 rpm -qpi httpd.rpm

三、软件仓库搭建(本地/网络)

注意:搭建本地软件仓库需要使用镜像文件

(1)挂载系统在安装时使用的镜像文件

mount </xxx/rhel或centos或其他版本的Linux系统.iso  /xxx>  

 

 图中的警告(WARNING)是因为挂载的设备是光盘,光盘是不可以写入内容的,所以才是read-only(只读)不能写入。

(2)进入yum.repos.d/

cd /etc/yum.repos.d/

 

 (3) 创建软件仓库文件

vim xxxx(一般都起用户的名字).repo

 (4) 在创建的文件里编写下面的命令

[AppStream]
name=AppStream
baseurl=file:///rhel9/AppStream
gpgcheck=0
[BaseOS]
name=BaseOS
baseurl=file:///rhel9/BaseOS     
gpgcheck=0 

 

其中:

  • [AppStream] / [BaseOS] ——仓库名称(可以用户自定义)
  • name ——描述
  • baseurl——地址
  • gpgcheck——授权检测(等于0时即为跳过检测、不检测gpgkey)

 

(5)安装测试 

dnf install gcc -y

 

这里以安装gcc为例,用dnf命令来安装

  •  -y表示跳过确认询问(直接安装)

 2、网络软件仓库搭建

 (1)安装httpd软件区块(apache)

 dnf install httpd -y

 

(2)开启服务,关闭火墙

 开启httpd的服务

systemctl enable --now httpd 

 关闭火墙 

systemctl disable --now firewalld 

 

 (3) cd到httpd的共享目录

cd /var/www/html/ 

 

(4) 在共享目录中创建目录

 mkdir /var/www/html/rhel9/

(5)卸载原始挂载,挂载新的挂载

umount /dev/sr0
——卸载原始挂载
 
mount /dev/sr0  /var/www/html/rhel9/
——挂载新的挂载到默认发布目录中的子目录上 

 

 

(6) 配置网络

 重新cd到/etc/yum.repos.d/

cd /etc/yum.repos.d/

 在此路径下,创建新的网络配置文件(文件结尾一定要“.repo”)

vim rhel9.repo

配置网络文件

 [AppStream]
name=AppStream
baseurl=http://192.168.188.129/rhel9/AppStream
gpgcheck=0
 
 
[BaseOS]
name=BaseOS
baseurl=http://192.168.188.129/rhel9/BaseOS
gpgcheck=0

 (7)配置开机自动运行脚本

 vim /etc/rc.d/rc.local

 在配置文件的最下面多加如下命令

mount /dev/sr0 /var/www/html/rhel9

 

 (8)更改脚本权限 

chmod +x /etc/rc.d/rc.local 

四、dnf命令

一、dnf 命令基础

1. 命令概述

dnf命令它是 Red Hat 系 Linux(如 Fedora、RHEL、CentOS 8+)中新一代的包管理工具,用于替代早期的 yumdnf 支持自动依赖解析、软件仓库管理,并优化了性能和稳定性。

2. 基本语法

dnf [options] [command] [package_name]

其中,options是可选参数,用于调整命令行为;command指定具体操作,如安装、查询等;package_name是目标软件包名称,可使用通配符(如*)匹配多个软件包 。

二、常用操作命令

1. 安装软件包

  • 安装单个软件包:使用install命令,例如安装httpd(Apache HTTP 服务器),执行:

sudo dnf install httpd

执行命令后,dnf会检查软件源,列出软件包及其依赖项,询问是否继续安装,输入y并回车即可开始安装。

  • 安装多个软件包:可同时指定多个软件包名称,以空格分隔。如安装httpd和php:

sudo dnf install httpd php

  • 安装软件包组:软件包组包含多个相关软件包,使用groupinstall命令安装。例如安装 “Development Tools” 软件包组:

sudo dnf groupinstall "Development Tools"

2. 查询软件包信息

  • 搜索软件包:使用search命令,通过关键词搜索软件包,如查找与 “mysql” 相关的软件包:

dnf search mysql

命令会列出包含关键词的软件包名称、描述等信息。

  • 查看软件包详细信息:使用info命令,例如查看httpd软件包详细信息:

dnf info httpd

将显示软件包的版本号、大小、依赖关系、描述等详细内容。

  • 列出已安装软件包
    • 列出所有已安装软件包:

dnf list installed

  • 按名称过滤已安装软件包,如查看已安装的php相关软件包:

dnf list installed | grep php

3. 更新软件包

  • 更新单个软件包:使用update命令,如更新httpd软件包:

sudo dnf update httpd

  • 更新所有已安装软件包

sudo dnf update

  • 仅更新软件包的元数据:使用check-update命令,查看有哪些软件包可更新,但不实际执行更新操作:

dnf check-update

4. 删除软件包

  • 删除单个软件包:使用remove或erase命令,如删除httpd软件包:

sudo dnf remove httpd


sudo dnf erase httpd

  • 删除软件包及其依赖项:若要删除软件包及其不再被其他软件包依赖的依赖项,使用autoremove命令:

sudo dnf autoremove httpd

三、进阶使用技巧

1. 软件源管理

  • 查看可用软件源:使用repolist命令:

dnf repolist

将列出系统中所有可用的软件源及其状态。

  • 启用 / 禁用软件源:编辑软件源配置文件(位于/etc/yum.repos.d/目录下),修改enabled=1(启用)或enabled=0(禁用)。也可使用config-manager命令临时启用或禁用软件源,如禁用epel软件源:

sudo dnf config-manager --set-disabled epel

启用则将--set-disabled改为--set-enabled。

2. 处理软件包依赖关系

  • 查看软件包依赖:使用repoquery命令,如查看httpd软件包的依赖关系:

dnf repoquery --requires httpd

会列出httpd运行所需的其他软件包。

  • 安装软件包及其所有依赖项:在安装时,dnf默认会自动处理依赖关系,但也可使用--allowerasing选项,在必要时删除冲突的软件包以满足依赖,如:

sudo dnf install --allowerasing package_name

3. 缓存管理

  • 清理缓存:为节省磁盘空间,可清理dnf缓存,包括软件包和元数据缓存。清理所有缓存:

sudo dnf clean all

  • 仅清理软件包缓存

sudo dnf clean packages

  • 仅清理元数据缓存

sudo dnf clean metadata


网站公告

今日签到

点亮在社区的每一天
去签到