一,rpm
1.1 介绍
RPM(RPM Package Manager,原名 Red Hat Package Manager)是一种用于 Linux 操作系统的软件包管理系统,广泛用于 Red Hat、Fedora、CentOS、openSUSE 等发行版。它提供了一种标准化的方式来打包、安装、升级、查询和卸载软件。
注意:RPM包管理器主要是用来安装提前下载的 RPM 包的。
1.2 查询指令
-
查询所安装的所有rpm软件包
bashrpm -aq
举例:当前系统是否安装了firefox
bashrpm -aq | grep firefox
返回的一个rpm包名:
firefox-60.2.2-1.el7.centos.x86_64
-
名称:firefox
-
版本号:60.2.2-1
-
使用操作系统:el7.centos.x86_64
表示centos7.x的64位操作系统,如果是i686、i386表示32位操作系统,noarch表示通用
-
-
其他相关查询指令
bashrpm -qa 想查询的软件名
-
查询软件包的具体信息
bashrpm -qi 软件包名
-
查询软件包包含了哪些文件
bashrpm -ql 软件包名
-
查询文件所属的软件包
bashrpm -qf 文件绝对路径
1.3 卸载rpm包
bash
rpm -e 软件包名
firefox-60.2.2-1.el7.centos.x86_64
这个是rpm包名的完整部分,但是卸载只需要写名称firefox即可
如果其他软件包和你要删除的软件包有依赖关系,卸载时会产生出错信息。
卸载的时候会出现警告,忽略即可,实际上已经删除。
强行卸载rpm包
bash
rpm -e --nodeps 软件包名
1.3 安装rpm包
bash
rpm -ivh rpm包的绝对路径(安装包的绝对路径)
参数说明:
-
i
:install 安装 -
v
:verbose提示 -
h
:hash进度条。在centos的光盘中packages文件下含大量的rpm包
二,yum
2.1 介绍
YUM (Yellowdog Updater Modified )是一个基于 RPM 的高级包管理工具,主要用于 Red Hat 系列的 Linux 发行版(如 RHEL、CentOS、Fedora 早期版本)。它的核心目标是解决 RPM 包管理中的依赖问题,同时提供便捷的软件仓库管理功能。
2.2 YUM 的基本用法
2.2.1 安装/升级/卸载
bash
# 安装软件包(从仓库)
yum install package_name
# 安装本地 RPM 包(自动解决依赖)
yum localinstall path/to/package.rpm
# 升级单个软件包
yum update package_name
# 升级所有软件包
yum update
# 卸载软件包
yum remove package_name
2.2.2 查询与搜索
bash
# 列出所有已安装的包
yum list installed
# 搜索关键字(如查找包含 "nginx" 的包)
yum search nginx
# 查看包详细信息
yum info package_name
# 列出仓库中所有可用包
yum list available
2.2.3 仓库管理
bash
# 列出已启用的仓库
yum repolist
# 启用/禁用仓库
yum-config-manager --enable repository_name
yum-config-manager --disable repository_name
# 添加新仓库(例如 EPEL)
yum install epel-release
2.2.4 清理与维护
bash
# 清理缓存(过期元数据和软件包)
yum clean all
# 重建元数据缓存
yum makecache
2.3 YUM 的配置文件
- 主配置文件 :
/etc/yum.conf
定义全局设置,如缓存目录、日志文件等。 - 仓库配置文件 :
/etc/yum.repos.d/*.repo
每个仓库对应一个.repo
文件,定义仓库名称、URL、是否启用等。
示例仓库配置(/etc/yum.repos.d/epel.repo
):
ini
[epel]
name=Extra Packages for Enterprise Linux
baseurl=https://download.example.com/epel/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
2.4 YUM与RPM的关系
YUM 并不是为了替代 RPM,而是为了增强 RPM 的功能。它们的关系更像是"互补"而非"替代"。
- RPM
- 底层工具 :直接操作
.rpm
文件,负责包的基本操作(安装、查询、卸载)。 - 不解决依赖 :安装时需要手动处理依赖关系(例如:安装
A.rpm
时,需先手动安装它依赖的B.rpm
和C.rpm
)。 - 精细控制:适合需要直接操作包文件的场景(如调试、强制覆盖安装)。
- 底层工具 :直接操作
- YUM
- 高层工具 :基于 RPM 构建,专注于自动化依赖解决 和远程仓库管理。
- 依赖自动化 :从仓库中自动下载并安装所需依赖(例如:
yum install A
会自动拉取B
和C
)。 - 事务性操作:确保安装/升级过程的完整性(失败时自动回滚)。
- 依赖 RPM :YUM 的底层操作(如最终安装包)仍需调用
rpm
命令。
虽然 YUM 简化了日常操作,但某些场景仍需直接使用 rpm
命令:
场景 1:直接操作本地 RPM 文件
-
安装一个手动下载的
.rpm
文件(尤其是离线环境):bashrpm -ivh package.rpm # 直接安装(但需自行处理依赖) yum localinstall package.rpm # 更推荐:YUM 会尝试解决依赖
场景 2:查询或验证已安装的包
-
查看某个文件属于哪个包:
bashrpm -qf /usr/bin/curl # 直接通过 RPM 查询
-
验证包的完整性:
bashrpm -V httpd # 检查 Apache 是否被篡改
场景 3:强制操作
-
强制覆盖安装(忽略冲突或依赖警告):
bashrpm -ivh --force package.rpm
(YUM 不支持此类高风险操作,需直接使用 RPM。)
场景 4:构建或调试 RPM 包
- 开发者构建 RPM 包时,需使用
rpmbuild
和rpm
命令。
2.5 YUM更新源
-
备份原有的仓库
bash# 进入仓库目录 cd /etc/yum.repos.d/ # 创建备份文件夹 sudo mkdir bak # 备份所有 .repo 文件 sudo mv *.repo bak/
-
下载国内源的仓库文件并替换
bashsudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
如果不是CentOs7可以直接去网站找对应的文件
https://mirrors.aliyun.com/repo
-
更新 EPEL 源(可选)
EPEL 提供额外软件包,建议一并替换:
bash
```bash
# 备份旧 EPEL 源
sudo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
# 下载阿里云 EPEL 源(以 CentOS 7 为例)
sudo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
```
- 清理缓存并生成新缓存
go
```bash
sudo yum clean all # 清理旧缓存
sudo yum makecache # 生成新缓存
```
- 更新系统
go
```bash
sudo yum update -y # 执行系统更新
```
三,apt
3.1 介绍
APT (Advanced Package Tool )是 Debian 及其衍生发行版(如 Ubuntu、Linux Mint 等)的高级包管理工具,专注于自动化解决依赖关系和简化软件管理流程。它与 RPM/YUM 的定位类似,但面向不同的 Linux 生态。
简而言之apt就是Ubuntu系统用来对标CentOs的yum
APT 的核心功能
- 依赖自动处理
- 安装软件时自动解析并下载所有依赖项,无需手动干预。
- 例如:安装
nginx
时会自动安装libssl
、zlib
等依赖包。
- 软件仓库管理
- 从配置的远程仓库(如官方源、PPA)获取软件包。
- 支持 HTTP、FTP、CD-ROM 等多种来源。
- 本地包操作
- 安装本地
.deb
文件时自动解决依赖(类似yum localinstall
)。 - 例如:
apt install ./package.deb
。
- 安装本地
- 版本控制和升级
- 支持选择性升级(如仅安装安全更新)。
- 可以固定(pin)特定软件的版本,防止意外升级。
- 清理与优化
- 自动删除无用的依赖包(
autoremove
)。 - 清理下载的缓存包(
clean
)。
- 自动删除无用的依赖包(
3.2 更换源
-
查看Ubuntu的版本中Codename信息
bashlsb_release -a
-
修改源文件
bashsudo gedit /etc/apt/sources.list
-
将内容替换
inideb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse # 注意须将xenial改成自己系统的Codename # 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##proposed表示測試版源,不建议启用 #deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 #deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 清华大学源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 #deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse ##proposed表示測試版源,不建议启用 #deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
-
更新源
bashapt-get update
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。 我们在软件包管理器里看到的新的软件列表,都是通过update命令更新的。
-
更新软件(如果不需要更新就不用)
bashapt-get upgrade
3.3 常用命令
APT(Advanced Package Tool)是Debian及其衍生系统(如Ubuntu)中用于管理软件包的核心工具。它简化了软件的安装、更新和删除流程,适合日常系统维护。以下是常用命令及用法详解:
3.3.1 基本用法
-
更新软件包列表
从配置的软件源同步最新包信息(不安装更新):
bashsudo apt update
-
升级已安装的软件包
安装所有可用的更新(需先执行
apt update
):bashsudo apt upgrade
- 仅升级特定包:
sudo apt upgrade package_name
- 仅升级特定包:
-
完整系统升级(含内核)
更彻底的升级,可能删除旧包或添加依赖:
bashsudo apt full-upgrade
-
安装软件包
bashsudo apt install package_name
- 安装指定版本:
sudo apt install package_name=version
- 安装指定版本:
-
删除软件包
-
删除软件但保留配置文件:
bashsudo apt remove package_name
-
彻底删除软件及配置:
bashsudo apt purge package_name
-
-
自动清理无用依赖
删除因安装其他软件而自动引入、现不再需要的包:
bashsudo apt autoremove
3.3.2 查询与搜索
-
搜索软件包
按名称或描述关键词搜索:
bashapt search keyword
-
查看包详细信息
显示版本、依赖、描述等:
bashapt show package_name
-
列出已安装的包
bashapt list --installed
-
检查某个包是否安装:
bashapt list package_name
-
-
查看可升级的包
bashapt list --upgradable
3.3.3 维护与清理
-
删除旧版本的缓存包
(保留最新版本缓存,释放空间):
bashsudo apt autoclean
-
删除所有缓存包
(彻底清理下载的
.deb
文件):bashsudo apt clean
-
修复依赖问题
自动修复损坏的依赖关系:
bashsudo apt --fix-broken install
3.3.4 高级操作
-
添加PPA仓库
安装
software-properties-common
后添加第三方源:bashsudo add-apt-repository ppa:user/repo sudo apt update
-
降级软件包
恢复到旧版本(需确保版本在仓库中存在):
bashsudo apt install package_name=old_version
-
下载包但不安装
下载
.deb
文件到当前目录:bashapt download package_name
3.3.5 注意事项
- 权限要求 :APT 命令通常需要
sudo
权限(除查询类命令如apt search
)。 - 更新优先 :执行升级前务必先运行
apt update
,否则无法获取最新包信息。 - apt vs apt-get :
apt
是新一代工具,整合了apt-get
和apt-cache
的功能,提供更友好的输出(如进度条)。传统脚本中仍建议使用apt-get
。
四,dpkg
4.1 介绍
dpkg
是 Debian 及其衍生系统(如 Ubuntu)中用于管理 .deb
软件包的基础工具。它是 APT(高级包管理工具) 的底层实现,直接操作软件包文件,但不处理依赖关系。dpkg就相当于rpm
4.2 基本功能
-
安装本地
.deb
包bashsudo dpkg -i package.deb
-
问题 :如果缺少依赖,安装会失败,但可以用
apt
修复:bashsudo apt --fix-broken install
-
-
卸载软件包
bashsudo dpkg -r package_name # 卸载包(保留配置文件) sudo dpkg -P package_name # 完全卸载包(删除配置文件)
-
查询已安装的包
bashdpkg -l # 列出所有已安装的包 dpkg -l | grep keyword # 按关键词过滤 dpkg -s package_name # 查看包的详细信息(版本、依赖等)
-
列出包内文件
bashdpkg -L package_name # 列出包安装的所有文件路径 dpkg -S /path/to/file # 查询文件属于哪个包
4.3 高级操作
-
解包但不安装 将
.deb
文件解压到指定目录(用于手动提取文件):bashdpkg -x package.deb /target/directory
-
查看
.deb
包内容 查看包内文件列表和元信息(无需安装):bashdpkg -c package.deb # 列出包内文件 dpkg -I package.deb # 显示包的元信息(版本、依赖等)
-
重新配置已安装的包 重新运行包的配置脚本(如重置设置):
bashsudo dpkg-reconfigure package_name
-
修复包状态 如果包状态异常(如安装中断),可重置状态标记:
bashsudo dpkg --configure -a # 配置所有未完成的安装 sudo dpkg --force-all -i package.deb # 强制安装(慎用)
4.4 常见场景示例
场景 1:手动安装本地 .deb
包
bash
sudo dpkg -i google-chrome.deb
# 若提示依赖缺失,修复依赖
sudo apt --fix-broken install
场景 2:查询软件包是否安装
bash
dpkg -s nginx
# 输出中若包含 "Status: install ok installed" 表示已安装
场景 3:彻底删除包及其配置
bash
sudo dpkg -P firefox
场景 4:查找文件所属的包
bash
dpkg -S /usr/bin/curl
# 输出示例:curl: /usr/bin/curl
4.5 注意事项
- 依赖问题 :
dpkg
不解决依赖,建议优先使用apt
安装软件。 - 强制操作 :
--force-*
参数可能破坏系统稳定性,仅在明确后果时使用。 - 结合
apt
:日常维护推荐使用apt
,仅在需要直接操作.deb
文件时使用dpkg
。
五,dnf
5.1 介绍
以下是 DNF (Dandified YUM)的详细介绍,它是新一代 RPM 发行版(如 Fedora、RHEL 8+、CentOS 8+)的默认包管理工具,旨在替代传统的 YUM
,提供更快的速度和更健壮的依赖管理。
DNF 的核心功能
- 软件包管理
- 安装、更新、卸载软件包。
- 自动解决依赖关系。
- 仓库管理
- 支持从官方/第三方仓库(Repo)获取软件。
- 系统维护
- 清理缓存、检查更新、回滚操作。
- 高级功能
- 软件包组管理、模块化支持、事务历史查询。
5.2 DNF 的安装
注意:
-
Fedora/CentOS 8+/RHEL 8+:默认已预装 DNF,无需手动安装。
-
旧版系统(如 CentOS 7):需手动安装:
bashsudo yum install epel-release # 启用 EPEL 仓库 sudo yum install dnf
5.3 常用命令
好的!以下是 DNF 命令的分类整理,按功能划分,方便快速查找:
5.1 软件包安装与卸载
安装单个包
bash
sudo dnf install <包名> # 例如:sudo dnf install nginx
批量安装
bash
sudo dnf install <包1> <包2> # 例如:sudo dnf install git vim
卸载软件包
bash
sudo dnf remove <包名> # 例如:sudo dnf remove httpd
卸载并清理无用依赖
bash
sudo dnf autoremove <包名> # 例如:sudo dnf autoremove docker-ce
5.2 更新与升级
更新所有软件包
bash
sudo dnf update
仅更新指定包
bash
sudo dnf update <包名> # 例如:sudo dnf update kernel
检查可用的更新(不执行)
bash
dnf check-update
5.3 搜索与查询
搜索软件包
bash
dnf search <关键词> # 例如:dnf search "python3"
查看包详细信息
bash
dnf info <包名> # 例如:dnf info firefox
列出已安装的包
bash
dnf list installed
查找文件所属的包
bash
dnf provides <文件路径> # 例如:dnf provides /usr/bin/pip3
5.4 仓库管理
列出启用的仓库
bash
dnf repolist
添加新仓库
bash
sudo dnf config-manager --add-repo <仓库URL> # 例如:添加 EPEL 仓库
启用/禁用仓库
bash
sudo dnf config-manager --enable <仓库名> # 启用
sudo dnf config-manager --disable <仓库名> # 禁用
清理仓库缓存
bash
sudo dnf clean all
5.5 系统维护
清理无用依赖
bash
sudo dnf autoremove
删除旧内核版本
bash
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)
修复损坏的依赖
bash
sudo dnf check && sudo dnf distro-sync # 检查并修复依赖问题
5.6 软件包组管理
安装软件包组(如开发工具、桌面环境)
bash
sudo dnf group install "<组名>" # 例如:sudo dnf group install "Development Tools"
列出所有可用包组
bash
dnf group list
更新包组
bash
sudo dnf group update "<组名>"
5.7 事务与历史记录
查看操作历史
bash
sudo dnf history
回滚到指定事务
bash
sudo dnf history undo <事务ID> # 撤销某个事务
sudo dnf history rollback <事务ID> # 回滚到某个事务前的状态
5.8. 高级操作
仅下载软件包(不安装)
bash
dnf download <包名> # 例如:dnf download nginx
安装特定版本的包
bash
sudo dnf install <包名>-<版本> # 例如:sudo dnf install python3-3.9.10
模块化管理(适用于 CentOS/RHEL 8+)
bash
dnf module list # 列出可用模块
sudo dnf module enable <模块名> # 启用模块(如:postgresql:12)
5.9 其他实用命令
查看 DNF 版本
bash
dnf --version
显示帮助文档
bash
dnf --help # 查看所有命令选项
man dnf # 查看完整手册