一、Linux软件包类型
在Linux系统中,软件包的类型和对应的包管理器因发行版而异,主要可分为以下几类:
RPM(Red Hat Package Manager)
适用发行版:主要用于 Red Hat、CentOS、Fedora 等基于 Red Hat 的发行版。
包管理器:
rpm
命令是基础管理工具,可用于安装、查询、验证、升级和删除软件包。但rpm
在处理软件包依赖关系方面存在不足,因此常配合yum
(Yellowdog Updater, Modified)或dnf
(Dandified Yum ,yum
的下一代版本 )使用。yum
和dnf
可以自动解决软件包依赖,从软件源仓库中下载并安装所需的软件包及相关依赖项。例如,使用dnf install package_name
即可安装指定软件包。
DEB(Debian Package)
适用发行版:广泛应用于 Debian、Ubuntu、Linux Mint 等基于 Debian 的发行版。
包管理器:
dpkg
是底层的包管理工具,负责软件包的安装、卸载和查询等基本操作。类似于rpm
,dpkg
本身不处理依赖关系。而apt
(Advanced Package Tool)则在dpkg
基础上提供了更高级的功能,它可以从软件源仓库获取软件包信息,自动解决依赖关系并进行安装、更新和卸载操作。常用命令如apt install package_name
、apt update
(更新软件源索引)和apt upgrade
(升级已安装软件包) 。
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+)中新一代的包管理工具,用于替代早期的 yum
。dnf
支持自动依赖解析、软件仓库管理,并优化了性能和稳定性。
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