包管理工具是 Linux 系统中用于安装、卸载、更新、查询软件包的核心工具。不同 Linux 发行版基于不同的包管理体系(如 Debian 系、Red Hat 系、Arch 系等),对应不同的工具。
包(Package)的组成要素:
/etc/目录)包管理系统的核心功能:
DEB包结构(Debian格式):
myapp_1.0-1_amd64.deb├── control.tar.gz│ ├── control # 控制信息│ ├── md5sums # 文件校验│ ├── conffiles # 配置文件列表│ ├── preinst # 安装前脚本│ ├── postinst # 安装后脚本│ ├── prerm # 卸载前脚本│ └── postrm # 卸载后脚本├── data.tar.gz # 实际文件└── debian-binary # 格式版本RPM包结构(Red Hat格式):
myapp-1.0-1.x86_64.rpm├── Header│ ├── Name: myapp│ ├── Version: 1.0│ ├── Release: 1│ ├── Architecture: x86_64│ ├── Summary: My Application│ ├── Description: Detailed description...│ ├── Requires: libc >= 2.17│ ├── Provides: myapp│ └── Files: 100644 /usr/bin/myapp├── Payload # 压缩的文件数据└── Signature # GPG签名基于 .deb 格式的软件包,核心工具为 dpkg,上层封装工具为apt/apt-get。
DPKG(Debian Packager)是Debian包管理系统,是Debian Linux家族的基础包管理工具,用于安装、删除deb软件包以及提供deb软件包的信息。
dpkg本身是一个底层工具,如同rpm系统,直接操作 .deb 包,不自动解决依赖关系,是 apt 等工具的基础,其上层工具(如apt)被用于从远程获取软件包以及处理复杂的软件包关系。
所有源自Debian的Linux发行版都使用dpkg作为包管理系统,例如Knoppix、Debian、Ubuntu、Linux Mint等。
选项说明:
-i: 安装本地的 .deb 软件包r:删除软件包(保留配置文件)-P : 删除软件包的同时删除其配置文件(彻底删除)-l : 列出系统中已安装的所有软件包-L: 查看某个已安装软件包的文件安装路径-s:查看某个软件包的详细信息(版本、状态等)-S:查找某个文件属于哪个软件包-c : 显示软件包内文件列表-- unpack : 解开软件包--configure -- :配置软件包dpkg -i package.deb # 安装deb软件包dpkg -r package # 删除软件包dpkg -P package # 删除软件包(包括配置文件)dpkg -l # 列出已安装的软件包dpkg -l package # 显示该软件包的版本dpkg --unpack package.deb # 解开deb软件包dpkg -c package.deb # 列出deb软件包的内容dpkg --configure package # 配置软件包详细命令参考:
安装操作:
# 基本安装sudo dpkg -i package.deb# 详细安装选项sudo dpkg -i --debug=2 package.deb # 调试模式sudo dpkg -i --force-depends package.deb # 强制忽略依赖(危险!)sudo dpkg -i --force-overwrite package.deb # 强制覆盖文件sudo dpkg -i --skip-same-version package.deb # 跳过相同版本sudo dpkg -i --recursive /path/to/debs/*.deb # 递归安装查询操作:
# 包状态查询dpkg -l # 所有包dpkg -l | grep ^ii # 仅已安装dpkg -l | grep ^rc # 仅配置文件残留dpkg -l | grep ^un # 未安装但配置存在dpkg -l | grep ^pn # 部分安装# 包信息查询dpkg -s package_name # 包详细信息dpkg -p package_name # 详细包信息(包含描述)dpkg -L package_name # 包文件列表dpkg -c package.deb # 查看未安装的deb包内容dpkg -I package.deb # 查看未安装的deb包信息dpkg -S /path/to/file # 文件属于哪个包dpkg --search pattern # 搜索文件模式维护操作:
# 包状态管理dpkg --get-selections # 获取包选择状态dpkg --set-selections < package_list.txt # 设置包选择状态dpkg --clear-selections # 清除选择状态# 数据库维护sudo dpkg --configure -a # 配置所有未配置的包sudo dpkg --audit # 审计包数据库sudo dpkg --clear-avail # 清除可用包列表sudo dpkg --update-avail # 更新可用包列表包操作:
# 卸载操作sudo dpkg -r package_name # 删除包,保留配置sudo dpkg -P package_name # 完全删除包和配置sudo dpkg --purge package_name # 同上,完全删除# 包重新配置sudo dpkg-reconfigure package_name # 重新配置包sudo dpkg-reconfigure -plow package_name # 低优先级重新配置sudo dpkg-reconfigure -phigh package_name # 高优先级重新配置sudo dpkg-reconfigure dash # 重新配置dash(shell选择)# 包修复sudo dpkg --force-all --configure -a # 强制配置所有包高级操作:
# 提取deb包内容dpkg -x package.deb /target/directory # 提取文件dpkg -e package.deb /target/directory # 提取控制信息mkdir extracted && dpkg -x package.deb extracted/ # 创建目录并提取# 包比较debdiff package1.deb package2.deb # 比较两个deb包dpkg --compare-versions ver1 op ver2 # 版本比较# op: lt le eq ne ge gt (小于、小于等于、等于、不等于、大于等于、大于)# 构建信息dpkg-buildpackage -us -uc # 构建deb包(不签名)dpkg-buildpackage -rfakeroot # 使用fakeroot构建apt(advanced packaging tool)基于 dpkg 开发,自动解决依赖关系,并支持从远程软件源获取包,是 Debian 系最常用的工具(apt 是 apt-get 的简化版,更友好)。
适用于Debian及其衍生版,如Ubuntu、Linux Mint。apt由几个操作软件包的命令行工具组成,包括apt-get、apt-cache和apt-cdrom。
为了解决命令过于分散的问题,引入了命令apt,它包括了命令apt-get使用最广泛的功能选项,以及命令apt-cache和apt-config中常用到的功能。在使用apt命令时,用户不必再由apt-get转到apt-cache或apt-config,而且apt更加结构化,并为用户提供了管理软件包所需的必要选项。简单来说,apt就是apt-get、apt-cache和apt-config中最常用命令选项的集合。
APT(Advanced Packaging Tool)是一个完整的包管理系统,包含多个工具:
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
apt [options] [command] [package ...]
# 基础必会apt install package # 安装包apt remove package # 删除包apt autoremove # 检查并清除无用的安装包apt update&upgrade package # 更新所有的安装包apt命令详解:
仓库和缓存管理:
# 源管理sudo apt update # 更新包列表sudo apt update --allow-insecure-repositories # 允许不安全仓库sudo apt update --allow-releaseinfo-change # 允许发布信息变化# 升级操作sudo apt upgrade # 安全升级sudo apt full-upgrade # 完全升级(可处理依赖变化)sudo apt dist-upgrade # 分发升级(同full-upgrade)包管理操作:
# 安装操作sudo apt install package_namesudo apt install package_name=1.0.0-1ubuntu1 # 安装特定版本sudo apt install --only-upgrade package_name # 仅升级sudo apt install --download-only package_name # 仅下载不安装sudo apt install --reinstall package_name # 重新安装sudo apt install --install-suggests package_name # 安装建议包# 删除操作sudo apt remove package_name # 删除包sudo apt purge package_name # 删除包和配置sudo apt autoremove # 删除自动安装的依赖sudo apt autoremove --purge # 彻底清理查询操作:
# 搜索查询apt search "正则表达式" # 正则搜索apt search --names-only keyword # 仅包名搜索apt search --full "完整描述搜索"# 包信息apt show package_name # 包详细信息apt show --all-versions package_name # 所有版本信息apt policy package_name # 版本策略apt depends package_name # 依赖关系apt rdepends package_name # 反向依赖# 列表操作apt list # 所有可用包apt list --installed # 已安装的包apt list --upgradable # 可升级的包apt list --all-versions # 所有版本高级功能:
# 包标记sudo apt-mark hold package_name # 保持版本sudo apt-mark unhold package_name # 取消保持sudo apt-mark showhold # 显示保持的包sudo apt-mark auto package_name # 标记为自动安装sudo apt-mark manual package_name # 标记为手动安装sudo apt-mark showauto # 显示自动安装的包# 清理操作sudo apt clean # 清理所有缓存sudo apt autoclean # 清理旧包缓存sudo apt autoremove # 移除不需要的包sudo apt-get --purge autoremove # 彻底清理apt-get update # 更新所有已安装的软件包apt-get dist-upgrade # 将系统升级到新版本apt-get install package # 安装包apt-get remove package # 删除包(保留配置文件)apt-get --purge remove package # 删除包(同时删除配置文件)apt-get autoclean package # 移除该软件的旧版本软件包(为了满足其他软件包的依赖而安装,但现在不再需要的软件包)apt-get clean # 移除下载到本地的已安装的软件包sudo apt list --installed # 列出已安装的软件包apt-cache工具:
# 缓存查询apt-cache search keyword # 搜索包apt-cache show package_name # 显示包信息apt-cache showpkg package_name # 显示包详细信息apt-cache showsrc package_name # 显示源码包信息apt-cache stats # 显示统计信息apt-cache dump # 显示缓存内容apt-cache dumpavail # 显示可用包列表apt-cache unmet # 显示未满足的依赖apt update | apt-get update | ||
apt upgrade | apt-get upgrade | ||
apt full-upgrade | apt-get dist-upgrade | ||
apt install <package-name> | apt-get install <package-name> | ||
apt remove <package-name> | apt-get remove <package-name> | ||
apt purge <package-name> | apt-get purge <package-name> | ||
apt clean | apt-get clean | ||
apt autoremove | apt-get autoremove | ||
apt search <keyword> | apt-cache search <keyword> | ||
apt show <package-name> | apt-cache show <package-name> |
基于 .rpm 格式的软件包,早期用 yum,Fedora 22+ 及 CentOS 8+ 推荐用 dnf(yum 的升级版)。
RPM(Red Hat Package Manager)是Red Hat系发行版的底层包管理工具,用于管理.rpm格式的软件包。类似 dpkg,直接操作 .rpm 包,不自动解决依赖。
rpm -ivh <package.rpm> | |
rpm -e <package-name> | |
rpm -qa | |
rpm -ql <package-name> | |
rpm -qi <package-name> | |
rpm -qf <file-path> | |
rpm -Uvh <package.rpm> | |
rpm -V <package-name> |
示例:安装本地的 nginx.rpm 包rpm -ivh nginx-1.24.0-1.el9.x86_64.rpm
安装操作详解:
# 基本安装命令sudo rpm -ivh package.rpm # 安装并显示进度sudo rpm -i package.rpm # 静默安装sudo rpm -Uvh package.rpm # 升级(未安装则安装)# 高级安装选项sudo rpm -ivh --test package.rpm # 测试安装(不实际安装)sudo rpm -ivh --replacepkgs package.rpm # 重新安装sudo rpm -ivh --replacefiles package.rpm # 替换文件sudo rpm -ivh --oldpackage package.rpm # 允许旧版本sudo rpm -ivh --noscripts package.rpm # 不执行脚本sudo rpm -ivh --nodeps package.rpm # 忽略依赖(危险!)sudo rpm -ivh --force package.rpm # 强制安装sudo rpm -ivh --prefix /opt package.rpm # 指定安装路径sudo rpm -ivh --relocate /old=/new package.rpm # 重定位文件查询操作详解:
# 查询语法rpm -q [select-options] [query-options]# 选择选项rpm -qa # 所有已安装的包rpm -q package_name # 特定包rpm -qf /path/to/file # 文件属于哪个包rpm -qp package.rpm # 查询未安装的rpm文件rpm -qg group_name # 组中的包rpm -q --whatprovides capability # 提供能力的包rpm -q --whatrequires package # 依赖此包的包rpm -q --whatconflicts package # 与此包冲突的包rpm -q --whatobsoletes package # 废弃此包的包# 查询选项rpm -qi package_name # 包信息rpm -ql package_name # 文件列表rpm -qc package_name # 配置文件rpm -qd package_name # 文档文件rpm -q --scripts package_name # 安装脚本rpm -q --changelog package_name # 变更日志rpm -q --provides package_name # 提供的能力rpm -q --requires package_name # 依赖rpm -q --conflicts package_name # 冲突rpm -q --obsoletes package_name # 废弃rpm -q --last package_name # 安装时间rpm -q --dump package_name # 详细文件信息验证操作:
# 包验证rpm -V package_name # 验证包rpm -Va # 验证所有包rpm -Vp package.rpm # 验证未安装的包rpm -Vf /path/to/file # 验证文件# 验证输出含义# S: 文件大小不同# M: 权限不同# 5: MD5校验和不同# D: 设备号不同# L: 符号链接不同# U: 用户不同# G: 组不同# T: 修改时间不同# P: 能力不同卸载操作:
# 基本卸载sudo rpm -e package_name # 卸载包sudo rpm -e --nodeps package_name # 忽略依赖卸载sudo rpm -e --test package_name # 测试卸载sudo rpm -e --allmatches package_name # 卸载所有匹配数据库操作:
# 数据库维护sudo rpm --rebuilddb # 重建数据库sudo rpm --initdb # 初始化数据库sudo rpm --verifydb # 验证数据库sudo rpm --showrc # 显示配置# 导入密钥sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7sudo rpm -K package.rpm # 检查签名sudo rpm --checksig package.rpm # 检查签名基于 rpm,自动解决依赖,支持远程源,CentOS 7 及以下的默认工具。
yum update | |
yum install <package-name> | |
yum remove <package-name> | |
yum erase <package-name> | |
yum search <keyword> | |
yum info <package-name> | |
yum list installed | |
yum clean all | |
yum groupinstall <group-name> |
示例:安装开发工具组yum groupinstall "Development Tools"
YUM基本命令:
# 仓库管理yum repolist # 列出启用的仓库yum repolist all # 列出所有仓库yum repoinfo # 仓库信息yum repoinfo example-repo # 特定仓库信息yum --disablerepo="*" --enablerepo="epel" list available # 临时启用仓库# 搜索操作yum search keyword # 搜索包yum search all keyword # 搜索所有字段yum provides */filename # 搜索提供文件的包yum whatprovides capability # 搜索提供能力的包yum list available # 可用包列表yum list installed # 已安装的包yum list updates # 可更新的包yum list extras # 额外安装的包yum list obsoletes # 废弃的包yum grouplist # 组列表yum groupinfo "Development Tools" # 组信息安装和更新:
# 安装操作yum install package_name # 安装包yum install package-1.0.0 # 安装特定版本yum install @group # 安装组yum install package1 package2 # 安装多个包yum localinstall /path/to/package.rpm # 本地安装yum reinstall package_name # 重新安装yum downgrade package_name # 降级# 更新操作yum check-update # 检查更新yum update # 更新所有包yum update package_name # 更新特定包yum update --security # 安全更新yum update-minimal # 最小更新yum --security update-minimal # 安全最小更新卸载和清理:
# 卸载操作yum remove package_name # 卸载包yum erase package_name # 彻底卸载yum autoremove # 自动移除yum groupremove "Development Tools" # 卸载组# 清理操作yum clean all # 清理所有缓存yum clean packages # 清理包缓存yum clean metadata # 清理元数据yum clean dbcache # 清理数据库缓存yum clean expire-cache # 清理过期缓存DNF 是 YUM 的重写版本,速度更快、依赖解析更高效,主要用于 Fedora 和 CentOS 8 及以上版本。
命令与 yum 基本兼容,用法几乎一致:
dnf install <package-name>dnf updatednf remove <package-name>dnf search <keyword>独有优势:支持并行下载、更好的版本控制,推荐优先使用。
DNF增强功能:
# 模块管理(RHEL 8+)dnf module list # 列出模块dnf module info module_name # 模块信息dnf module enable module_name:stream # 启用模块流dnf module install module_name:stream/profile # 安装模块dnf module update module_name # 更新模块dnf module reset module_name # 重置模块dnf module disable module_name # 禁用模块# 高级查询dnf repoquery --whatprovides /usr/bin/python3 # 查询提供者dnf repoquery -l package_name # 包文件列表dnf repoquery --requires package_name # 依赖关系dnf repoquery --changelog package_name # 变更日志dnf repoquery --duplicates # 重复包dnf repoquery --obsoletes # 废弃的包# 历史管理dnf history # 事务历史dnf history info 6 # 事务详情dnf history undo 6 # 撤销事务dnf history redo 6 # 重做事务dnf history rollback # 回滚dnf history store # 存储事务基于 rpm 体系,openSUSE 系列的默认包管理工具,语法简洁,支持自动解决依赖。
zypper refresh | |
zypper update | |
zypper install <package-name> | |
zypper remove <package-name> | |
zypper search <keyword> | |
zypper info <package-name> | |
zypper dup |
示例:更新系统并安装 Vimzypper refresh && zypper install vim
仓库管理:
# 仓库操作zypper lr # 列出仓库zypper lr -d # 详细列表zypper lr -P # 显示优先级zypper lr -E # 显示是否启用zypper ar http://example.com/repo alias # 添加仓库zypper rr alias # 删除仓库zypper mr -e alias # 启用仓库zypper mr -d alias # 禁用仓库zypper mr -k alias # 保留包zypper mr -K alias # 不保留包zypper mr -p 99 alias # 设置优先级zypper ref # 刷新仓库包管理:
# 搜索和查询zypper se keyword # 搜索zypper se -s keyword # 搜索详情zypper se -i keyword # 已安装的包zypper se -u keyword # 未安装的包zypper info package_name # 包信息zypper info --requires package_name # 依赖关系zypper if package_name # 完整信息zypper packages --installed-only # 已安装的包zypper patches # 补丁列表# 安装和更新zypper in package_name # 安装zypper in -l package_name # 自动同意许可证zypper in -D package_name # 仅下载zypper in -f package_name # 强制安装zypper up # 更新zypper up -r patch:security # 安全更新zypper dup # 分发升级zypper patch # 安装补丁高级功能:
# 包锁定zypper al # 列出锁zypper al package_name # 添加锁zypper al 'kernel*' # 通配符锁定zypper rl 1 # 移除锁# 补丁管理zypper lp # 列出补丁zypper lp --all # 所有补丁zypper lp -g # 按类别分组zypper patch-check # 检查补丁zypper patch --updatestack-only # 仅更新堆栈# 事务历史zypper history # 历史记录zypper history --reverse # 反向历史zypper history 5 # 查看特定事务zypper undo 5 # 撤销事务Arch 系的核心包管理工具,以 简洁、高效、滚动更新 为特点,直接操作 Arch 官方仓库的 .pkg.tar.zst 包。
pacman -Syu | 同步源 + 升级系统 |
pacman -S <package-name> | |
pacman -R <package-name> | |
pacman -Rs <package-name> | |
pacman -Rns <package-name> | |
pacman -Q | |
pacman -Ql <package-name> | |
pacman -Ss <keyword> | |
pacman -Scc |
示例:安装 Firefox 并升级系统pacman -Syu firefox
基本操作:
# 系统更新pacman -Syu # 同步并升级pacman -Sy # 仅同步pacman -Su # 仅升级pacman -Syw package # 仅下载# 包管理pacman -S package_name # 安装pacman -R package_name # 删除pacman -Rs package_name # 删除及未使用的依赖pacman -Rns package_name # 完全删除pacman -U /path/to/package.pkg.tar.zst # 本地安装pacman -Scc # 清理缓存查询操作:
# 包查询pacman -Qs keyword # 搜索本地pacman -Ss keyword # 搜索远程pacman -Qi package_name # 包信息pacman -Ql package_name # 文件列表pacman -Qo /path/to/file # 文件所属pacman -Qe # 显式安装pacman -Qd # 作为依赖安装pacman -Qdt # 孤立包pacman -Qm # 从AUR安装pacman -Qn # 从官方仓库安装AUR管理:
# 通过yay使用AURyay -S aur_package # 安装AUR包yay -Ss keyword # 搜索AURyay -Sua # 更新AUR包yay -Yc # 清理不需要的依赖yay -Ps # 统计信息yay -G package_name # 下载PKGBUILD用于管理 Python 的第三方库(如 requests、numpy 等),支持从 PyPI(Python Package Index)下载包。
pip install <package-name> | |
pip install <package-name>==x.y.z | |
pip install --upgrade <package-name> | |
pip uninstall <package-name> | |
pip list | |
pip freeze | |
pip install -r requirements.txt | |
pip search <keyword> |
示例:导出依赖并批量安装
pip freeze > requirements.txt #导出pip install -r requirements.txt #安装基本命令:
# 安装管理pip install package_name # 安装pip install package_name==1.0.0 # 特定版本pip install --upgrade package_name # 升级pip install --upgrade-strategy eager # 积极升级pip install --upgrade-strategy only-if-needed # 需要时升级pip install --force-reinstall package_name # 强制重装pip uninstall package_name # 卸载pip install --no-deps package_name # 不安装依赖# 环境管理pip freeze > requirements.txt # 导出依赖pip install -r requirements.txt # 安装依赖pip list # 列出已安装pip list --outdated # 列出过时的包pip show package_name # 显示包信息pip check # 检查依赖pip cache purge # 清理缓存虚拟环境:
# 创建虚拟环境python3 -m venv myenv # 创建source myenv/bin/activate # 激活deactivate # 退出# pipenv(现代Python包管理)pipenv install package_name # 安装pipenv install --dev package_name # 开发依赖pipenv lock # 生成锁定文件pipenv install --ignore-pipfile # 忽略Pipfilepipenv graph # 依赖图pipenv run python script.py # 运行用于管理 Node.js 的第三方模块(如 express、react 等),默认从 npm 官方仓库下载。
核心命令
npm install <package-name> | |
npm install -g <package-name> | |
npm install <package-name>@x.y.z | |
npm update <package-name> | |
npm uninstall <package-name> | |
npm uninstall -g <package-name> | |
npm list | |
npm init | |
npm run <script-name> | npm run dev) |
补充说明
yarn add <package>)。示例:全局安装 Vue 脚手架并初始化项目
npm install -g @vue/cli #安装vue create my-vue-project #初始化包管理:
# 基本操作npm install package_name # 本地安装npm install -g package_name # 全局安装npm install package_name@1.0.0 # 特定版本npm update package_name # 更新npm uninstall package_name # 卸载npm ls # 列出依赖npm outdated # 列出过时的包npm audit # 安全审计npm audit fix # 修复安全问题npm ci # 清洁安装npm init # 初始化项目npm run script_name # 运行脚本package.json管理:
{ "name": "my-project", "version": "1.0.0", "description": "My Node.js project", "main": "index.js", "scripts": { "start": "node index.js", "dev": "nodemon index.js", "test": "jest" }, "dependencies": { "express": "^4.18.0", "mongoose": "^6.0.0" }, "devDependencies": { "jest": "^29.0.0", "eslint": "^8.0.0" }, "engines": { "node": ">=16.0.0" }}替代工具:
# yarnyarn add package_name # 添加包yarn add -D package_name # 开发依赖yarn upgrade package_name # 升级yarn remove package_name # 移除yarn install # 安装依赖yarn upgrade # 升级所有# pnpmpnpm add package_name # 添加包pnpm install # 安装pnpm update # 更新pnpm remove package_name # 移除