一、软件相关概念
1.1 ABI
1.1.1 接口简介
ABI(Application Binary Interface,应用程序二进制接口)是一种定义了应用程序与操作系统 或者硬件之间交互方式的接口标准,不同的操作系统,他的ABI接口是不一样的。每个种操作系统,都有对外的 ABI接口,软件要想运行,就必须符合其接口规范才可以。它为开发人员提供了在不同平台上编写、编译和执行 应用程序的一致性。
1.1.2 ABI在调用操作的时候,主要涉及到如下几个方面:
- 数据结构、数据类型等数据信息
- 底层函数调用的过程
- 目标文件的二进制格式
- 系统调用依赖的函数库
- 平台兼容性
windows 与 linux 中的 ABI 格式是不兼容的
- windows 中的是 PE (Portable Executable ) 格式
- Linux 中的是 ELF ( Executable and Linkable Format ) 格式
也就是说:
我们程序需要再两个平台运行,那么就需要各编译一次。
1.2 API
1.2.1 简介
API 即 Application Programming Interface,API可以在各种不同的操作系统上实现给应用程 序提供完全相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是 Windows系统,另一种是Linux系统。
1.2.2早期编码
由于操作系统的不同,API又分为Windows API和Linux API。在Windows平台开发出来的软件在 Linux上无法运行,在Linux上开发的软件在Windows上又无法运行。
所以,早期的程序员开发程序的时候,需要在不同的平台,需要使用各自平台的编程语言,将同一个程序 逻辑,各自编写一份,这就导致程序的开发效率非常的低下。
而对于赶工期,赶出来的程序代码,又无法进行平台的软件移植,那么为了解决程序开发的痛苦,POSIX 标准的出现就是为了解决这个问题。
1.2.3POSIX简介
POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为 应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。
POSIX为我们提供了统一且强大的接口,方便跨平台开发,POSIX 提供的接口 涵盖了以下内容:系统接 口、命令和实用程序、网络文件访问等。
Linux和windows都要实现基本的posix标准,程序就在源代码级别可移植了。
用程序员的话来说,接口是一个程序的代码与另一个程序的通信方法。接口期望程序 A 向程序 B 提供特 定类型的信息。同样地,程序 A 期望程序 B 用特定类型的数据来回答。
1.3 API和ABI的不同
解释 ABI 与 API 的概念与区别。静态链接与动态链接有何异同?在排查动态链接库丢失引起的软件运行报错时,应如何使用 ldd 命令?
静态链接和动态链接
| 对比项 | 静态链接 | 动态链接 |
|---|---|---|
| 可执行文件体积 | 大,包含全部库代码 | 小,仅存依赖记录 |
| 磁盘占用 | 多,多个程序会重复打包相同库 | 少,多个程序共享同一个.so库 |
| 内存占用 | 每个进程独占一份库代码,内存开销大 | 多进程共享内存中同一份库代码,节省内存 |
| 依赖关系 | 运行无外部依赖,移植性极强 | 运行必须存在对应.so,缺失直接报错 |
| 库更新 | 更新库必须重新编译程序,否则不生效 | 替换.so文件即可,无需重编译程序 |
| 编译参数 | gcc main.c -static -o app | 默认动态链接,gcc main.c -o app |
| 运行加载速度 | 启动快,无需加载外部库 | 启动略慢,运行时加载库 |
1. ldd 的作用
打印可执行文件 / 动态库依赖的所有
.so动态链接库,同时标记缺失、找不到的库文件,专门解决error while loading shared libraries: xxx.so类报错。2.基础使用语法
ldd 程序文件名
3. 输出标识解读(核心排查点)
正常库:输出
libxxx.so => /usr/lib64/libxxx.so (0x00007fxxxxxx)缺失库(报错根源):输出
libxxx.so => not found代表系统动态链接器找不到该库文件,软件运行直接崩溃。版本不匹配:库存在但版本不符,会提示版本缺失。
4. 完整排查流程
步骤 1:执行 ldd 查看全部依赖
ldd /usr/bin/nginx
步骤 2:筛选缺失的库
ldd /usr/bin/nginx | grep "not found"
步骤 3:根据缺失库修复
- 若系统仓库存在该库:使用
dnf/yum/apt安装对应开发 / 运行库包;- 若手动编译的自定义库:
- 将
.so放入/usr/lib64/或/lib64/;- 写入自定义库路径到
/etc/ld.so.conf.d/xxx.conf;- 更新动态链接器缓存:
ldconfig步骤 4:二次验证修复结果
ldd /usr/bin/nginx # 不再出现 "not found" 即修复完成
二、 软件包管理
2.1软件包介绍
2.1.1 基础知识
软件包
开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软 件。用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一个管理工具dpkg也就 应运而生,可用来管理deb后缀的"包"文件。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍 后Red Hat才开发自己的rpm包管理系统。
Linux系统中的软件包是Linux发行版用来组织、安装和管理软件的一种方式。它们通常以压缩包的形式 存在,包含了软件的二进制文件、库文件、配置文件、文档等必要组件。
2.1.2 软件包分类
源码包(Source Package):
- 包含软件的源代码文件、编译指令和配置文件。
- 需要用户自行编译安装,过程相对复杂,但灵活性高,可以定制安装选项。
- 文件格式通常为.tar.gz、.tar.bz2等压缩格式。
注意:软件运行所有的文件都会在同一个包文件里面
二进制包(Binary Package):
- 包含已经编译好的可执行文件、库文件、配置文件、帮助文件等,用户可以直接安装使用。
- 常见的二进制包格式有RPM包(Red Hat Package Manager)、DEB包(Debian Package)等。
注意:软件运行所有的文件分别放到相互依赖的多个包文件里面。
二进制包的格式
RPM包:Redhat Package Manager
- 主要在Red Hat、Fedora、CentOS等Linux发行版中使用。
- 包名通常包含软件名称、版本号、发布号、适用的Linux发行版标识和架构标识等信息。
- 可以通过rpm命令进行安装、卸载、查询等操作。
DEB包:Debian Binary Package
- 主要在Debian、Ubuntu等Linux发行版中使用。
- 使用dpkg命令进行安装、卸载等操作,但apt命令更为常用,因为它能自动处理依赖关系。
2.2包管理工具
2.2.1二进制包管理工具
Linux系统提供了多种软件包管理工具,用于简化软件包的搜索、安装、升级、卸载等操作,这些包管理
工具,主要有以下三种:
- apt(Debian/Ubuntu): 用于Debian及其衍生版如Ubuntu中的软件包管理,能够自动处理依赖关系,并提供丰富的软件包仓库。
- yum(CentOS/RHEL): CentOS和Red Hat Enterprise Linux(RHEL)等发行版中的软件包管理工具,同样支持自动处理依赖关系和软件包的搜索、安装、升级等操作。
- dnf(Fedora): Fedora等发行版中的新一代软件包管理工具,旨在替代yum,提供更快的软件包安装速度和更丰富的功能。
查看包的命令
Centos系统中:
- 预览包内文件:rpm2cpio 包文件|cpio -itv
- 释放包内文件:rpm2cpio 包文件|cpio -idv ".conf"
ubuntu系统中:
- 预览包内文件:dpkg -c package.deb
- 释放包内文件:dpkg-deb -x package.deb 解压目录
2.2.2rpm包管理实践
准备目录
![]()
下载文件


2.2.3包命名
基础文件名:反映软件包名称或项目名称。
版本号(可选):有时会在文件名中包含版本号,以区分不同的软件版本,样式:主版本号.次版本号.修正版
本号
扩展名:.tar表示tar归档,.gz或.bz2表示压缩格式。
源代码打包文件命名打包规则:
name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
命名示例:
nginx-1.25.4.tar.gz
---
1 major 主版本号
25 minor 次版本号
4 release 修正版本号
二进制包命名格式
命名示例:
httpd-2.4.57-15.el9.x86_64.rpm:
-----
httpd:软件包名。
- 2.4.57:包的版本号,格式为“主版本号.次版本号.修正号”。
- 15:二进制包发布的次数,表示这是第几次编译生成的。
- el9:软件发行商,表示此包是由Red Hat公司发布,适合在RHEL|Centos|Rocky 9.x上 使用。 EL是Red Hat Enterprise Linux(EL)的缩写
- x86_64:表示此包使用的硬件平台。
- rpm:RPM包的扩展名,表明这是编译好的二进制包,可以直接使用rpm命令安装。
三、包管理器rpm
rpm 命令介绍
命令格式rpm {-i|--install} [install-options] PACKAGE_FILE…常用选项-q # 检查安装软件-ivh # 安装软件-evh # 卸载软件-Uvh # 有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”-Fvh # 有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行安装操一般选项-v|verbose #显示详细信息-vv #更详细-h #显示安装进度条--oldpackage #降级--force #强制安装--test #测试安装,但不真正执行安装,即dry run模式--nodeps #忽略依赖关系--replacefiles #忽略软件包之间的冲突的文件--replacepkgs #如果软件包已经有了,重新安装软件包 -- 该选项有那么一点作用,但是不--nosignature #不检查来源合法性--nodigest #不检查包完整性--noscripts #不执行程序包脚本,相当于 --nopre --nopost --nopreun -- nopostun# --nopretrans --noposttrans--nopre #不执行程序包中安装前脚本--nopost #不执行程序包中安装前脚本--nopreun #不执行程序包中卸载前脚本--nopostun #不执行程序包中卸载后脚本--nopretrans #安装前不执行与程序同名脚本--noposttrans #安装后不执行与程序同名脚本-V #安装后有没有修改配置文件--root #在光盘救援模式下,安装软件到操作系统的所在位置路径,#假如系统位置/mnt/sysimage,则在光盘下安装 使用如下命令#rpm -ivh /path/to/file.rpm -root=/mnt/sysimage
- 不要频繁对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核- 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件, 而把旧版本文件重命名(FILENAME.rpmnew)后保留
获取软件[root@rocky9 ~]# mkdir /tmp/softs ; cd /tmp/softs下载三个软件wget https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/Packages/vsftpd-3.0.3-49.el9.x86_64.rpmwget https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/Packages/vsftpd-3.0.5-6.el9.x86_64.rpmwget https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/Packages/httpd-2.4.57-3.el9.x86_64.rpm

安装不需要依赖

卸载

如果存在软件包就卸载

包查询
命令格式:
rpm {-q|--query} [select-options] [query-options]
常用选项
-i #information
-l #查看指定的程序包安装后生成的所有文件
-f #查看指定的文件由哪个程序包安装生成
-d #查询程序的文档
常用组合:-qi、-qf、-ql、-qa
一般选项
-a #所有包
-p rpmfile #针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY #查询指定的CAPABILITY【一个具体的文件】由哪个包所提供, #前提是该文件已经安装成功,所以意义不大。类似于 -qf
--whatrequires CAPABILITY #查询指定的CAPABILITY【一个具体的文件】被哪个包所依赖
--changelog #查询rpm包的changelog 更新日志
-c #查询程序的配置文件
--scripts #程序包自带的脚
--provides #列出指定程序包所提供的CAPABILITY【一个具体的执行文件】
-R #查询指定的程序包所依赖的CAPABILITY
信息获取
获取所有包


查看软件是否安装

查看包的详细信息

根据文件的路径来反查包

配置相关文件

查看未安装包的信息


查询安装脚本信息,部分软件中会有脚本信息

查看软件登录信息

四、yum和dnf
4.1软件介绍
4.1.1yum
yum 和 dnf 都是 Linux 系统中用于软件包管理的工具【python脚本】,它们允许用户安装、更新、 删除和查询软件包。尽管它们在功能上非常相似,但它们属于不同的软件包管理系统,并且在技术实现和背后的 设计上存在一些差异。
YUM 最初是为基于 RPM 的 Linux 发行版(如 Fedora、CentOS、RHEL 等)设计的。它起源于 Yellowdog Linux 发行版,后来经过修改和扩展,成为许多主流 Linux 发行版中不可或缺的一部分。
DNF 是 Fedora 项目开发的一个新的包管理器,旨在作为 YUM 的继任者。它最初是作为 YUM 的一个 分支项目出现的,但随着时间的推移,它逐渐发展成为了一个独立且更加先进的软件包管理工具。
4.1.2dnf
DNF 提供了更加快速和灵活的包管理体验。它支持并行下载和安装软件包,从而减少了总体等待时间。此 外,DNF 还提供了更加丰富的命令行选项和输出格式,使得用户可以更轻松地获取所需的信息。DNF 已经成为 Fedora 和一些其他基于 RPM 的 Linux 发行版的默认包管理器。随着时间的推移,它有望逐渐取代 YUM, 成为更多 Linux 发行版的标准选择。而且 DNF还保留了和yum的兼容性,配置也是通用的,所以在Rocky linux9里面,他们的操作基本上是一样的。
查看rocky linux 的两条命令[root@rocky10 ~]# ll /usr/bin/yumlrwxrwxrwx. 1 root root 5 4月 14 07:20 /usr/bin/yum -> dnf-3[root@rocky10 ~]# ll /usr/bin/dnflrwxrwxrwx. 1 root root 5 4月 14 07:20 /usr/bin/dnf -> dnf-3
4.2工作原理
yum/dnf 是基于C/S 模式
- - yum 服务器存放rpm包和相关包的元数据库
- - yum 客户端访问yum服务器进行安装或查询等
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的 元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载 repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
4.3环境配置
/etc/yum.conf #为所有仓库提供公共配置/etc/yum.repos.d/*.repo #为每个仓库的提供配置文件
基础命令man 5 yum.conf获取软件源信息yum makecache清理软件源信息yum clean all查看仓库的信息yum repolistyum repolist -v # 查看更多信息
[main]gpgcheck=1 #安装包前要做包的合法和完整性校验installonly_limit=3 #同时可以安装3个包,最小值为2,如设为0或1, 为不限制clean_requirements_on_remove=True #删除包时,是否将不再使用的包删除best=True #升级时,自动选择安装最新版,即使缺少包的依 赖skip_if_unavailable=False #跳过不可用的

name=Some name for this repository #仓库名称
baseurl=url://path/to/repository/ #仓库地址
mirrorlist=http://list/ #仓库地址列表,在这里写了多个 baseurl指向的
地址
enabled={1|0} #是否启用,默认值为1,启用
gpgcheck={1|0} #是否对包进行校验,默认值为1
gpgkey={URL|file://FILENAME} #校验key的地址
enablegroups={1|0} #是否启用yum group,默认值为 1
failovermethod={roundrobin|priority} #有多个baseurl,此项决定访问规则,
#roundrobin 随机,priority:按顺序访问
cost=1000 #开销,或者是成本,
#YUM程序会根据此值来决定优先访问哪个源,默认 为1000
metadata_expire=6h #rocky-9中新增配置,metadata 过期时间
countme=1 rocky-9中新增配置,默认值false,baseurl 有多种写法,支持多种协
#附加在mirrorlist之后,便于仓库收集客户端信息
baseurl=file:///cdrom/AppStream/
baseurl=https://mirrors.aliyun.com/rockylinux/10/AppStream/x86_64/os/
baseurl=http://mirrors.aliyun.com/rockylinux/10/AppStream/x86_64/os/
baseurl=ftp://10.0.0.159/
注意:
yum仓库指向的路径一定必须是repodata目录所在目录
常见变量
$arch #CPU架构 aarch64|i586|i686|x86_64$basearch #系统基本体系结构i386|x86_64$releasever #系统版本
定制仓库

rocky9替换阿里云的
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/Rocky-*.repo dnf makecache
配置完仓库要更新一下

4.4yum命令
yum [options] COMMAND常用子命令autoremove #卸载包,同时卸载依赖clean #清除本地缓存install #包安装list #列出所有包makecache #重建缓存search #包搜索,包括包名和描述一般子命令check-update #检查可用更新downgrade #包降级group #包组相关help #显示帮助信息history #显示historyinfo #显示包相关信息reinstall #重装remove #卸载repolist #显示或解析repo源search #包搜索,包括包名和描述
仓库信息列表

显示程序包

查看自己指定安装的包

安装软件

只下载不安装
![]()
卸载软件

其他命令解释
命令格式:yum update [options] PACKAGE [...] #升级yum downgrade [options] PACKAGE [...] #降级yum check-update #检查可用升级2.4.5.2 软件更新实践2.4.5.3 软件信息查询实践命令格式:yum info [options] PACKAGE [...] #查看程序包的 information 信息yum provides [options] PROVIDE #查看文件是由哪个包提供yum search [options] KEYWORD #根据关健字搜索,范围包括包名 和描述信息yum deplist [options] PACKAGE [...] #查询包的依赖
查看可升级的包

查看的包的详细信息

根据文件反查软件包[扩展]

根据软件名字和关键字来搜索

查看依赖

拓展 软件组的查看

yum 和 dnf 失败最主要原因 解决方法yum的配置文件格式或路径错误 检查/etc/yum.repos.d/*.repo文件格式yum cache yum clean all网络不通 网卡配置
五、软件管理Ubuntu
5.1软件包管理
Debian 软件包通常为预编译的二进制格式的扩展名“.deb”,类似 rpm 文件,因此安装快速,无需编 译软件。包文件包括特定功能或软件所必需的文件、元数据和指令
package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装, 删除和构建软件包,但无法自动下载和安装软件包或其依赖项
apt: Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/ 服务器架构(c/s)

5.1.1APT
在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header) 信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服 务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。
客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到 客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后, 会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时 候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升 级的。
apt源加速
参考资料:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/https://developer.aliyun.com/mirror/ubuntu
root@ubuntu24:~# vim /etc/apt/sources.list# 定制阿里云镜像仓库deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse# 定制清华源镜像仓库deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
更新软件源
root@ubuntu24:~# mkdir /data/backup/apt_source -proot@ubuntu24:~# mv /etc/apt/sources.list.d/* /data/backup/apt_source/root@ubuntu24:~# apt update
命令解读
Debian 使用 apt 工具集来管理包系统,apt-get 是其中一个常用的命令行工具,另外一款较为流行 的命令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、 apt-cache 和 apt-config 这三条命令中。apt-get:Debian2.0/2.1 正式上线 在 2014 年apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令 解决了命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及apt-cache 和 apt-config 命令中很少用到的功能。
在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,提供管理软件包 所需的必要选项。也就是说,apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集 合。
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常有 帮助。例如:可以在使用 apt 命令安装或删除程序时看到进度条,apt 还会在更新存储库数据库时提示用户可 升级的软件包个数.
apt 命令 被取代的命令 命令的功能apt install apt-get install 安装软件包apt remove apt-get remove 移除软件包apt purge apt-get purge 移除软件包及配置文件apt update apt-get update 刷新存储库索引apt upgrade apt-get upgrade 升级所有可升级的软件包apt autoremove apt-get autoremove 自动删除不需要的包apt full-upgrade apt-get dist-upgrade 在升级软件包时自动处理依赖关系apt search apt-cache search 搜索应用程序apt show apt-cache show 显示安装细节
apt [options] command一般选项-h|--help #显示帮助-v|--version #显示版本-y|--yes #自动回答yes-q|--quiet #安静模式常见命令list #根据名称列出软件包search #搜索软件包描述show|info #显示软件包细节install #安装软件包remove #移除软件包autoremove #卸载所有自动安装且不再使用的软件包update #更新可用软件包列表,只更新索引文件,不具体更新软件upgrade #通过 安装/升级 软件来更新系统full-upgrade #通过 卸载/安装/升级 来更新系统edit-sources #编辑软件源信息文件
这个和yum或者说dnf一样在这里就不演示了
5.1.2DPKG
命令格式:dpkg [<option> ...] <command>常用选项-i|--install package.deb #安装包--unpack package.deb #解包-V|--verify packageName #检查包是否安装-l|--list [pattern] #列出当前己安装的包,类似于rpm -qa-c packageFile #列出包内文件,类似于 rpm -qpl-L|--listfiles packageName #列出属于指定软件包的文件,类似于 rpm -ql一般选项-r|--remove packageName #删除包,不建议,不自动卸载依赖于它的-P|--purge packageName #删除包(包括配置文件)--get-selections pattern #根据正则筛选包,并打出列表--set-selections #从标准输入里读出要选择的软件。--clear-selections #取消选中所有不必要的软件包。--update-avail packageFile #替换现有可安装的软件包信息。--merge-avail packageFile #把文件中的信息合并到系统中--clear-avail #清除现有的软件包信息。--forget-old-unavail #忘却已被卸载的不可安装的软件包。-s|--status packageName #显示指定软件包的详细状态,类似于 rpm - qi-p|--print-avail packageName #显示当前机器上所有可安装的包-l|--list [pattern] #列出当前己安装的包,类似于rpm -qa-S|--search pattern #根据文件查询是来自于哪个包,类似于 rpm -qf-C|--audit [pattern] #检查是否有软件包残损--yet-to-unpack #列出标记为待解压的软件包--predep-package #列出待解压的预依赖--compare-vesions v1 - b #比较版本号--force-help #显示本强制选项的帮助信息-Dh|--debug=help #显示有关出错调试的帮助信息--info packageFile #列出包相关信息-c packageFile #列出包内文件,类似于 rpm -qpl
简单实践
准备软件包

没有被安装

安装的软件包没有显示信息

安装软件

查看信息


卸载

总结
dpkg 与 apt 的层级关系
对比项 dpkg apt 层级 底层,Debian 系原生包管理核心 高层封装,基于 dpkg 开发的用户友好前端 网络功能 无网络,仅处理本地 .deb文件支持软件源联网下载包、更新索引 依赖处理 不会自动解决依赖,缺依赖直接报错 自动计算、下载、安装所有依赖包 核心职责 解压文件、注册包数据库、增删本地程序文件 拉取源索引、处理依赖、调度 dpkg 执行安装 / 卸载 典型命令 dpkg -i xxx.deb、dpkg -lapt install、apt remove、apt update
执行流程示例
执行
apt install nginx:
- apt 读取
/etc/apt/sources.list拉取软件源索引;- 自动下载 nginx 及其所有依赖的 deb 包;
- apt 批量调用底层
dpkg -i完成本地安装;- dpkg 更新本地包数据库
/var/lib/dpkg/。
apt remove /apt purge /apt autoremove 区别
功能对比表格
操作行为 apt remove 包名 apt purge 包名 apt autoremove 删除软件二进制 / 程序本体 ✅ 删除 ✅ 删除 ❌ 不删除手动安装的主程序 删除 /etc下系统全局配置❌ 保留配置 ✅ 删除全部系统配置 仅加 --purge才清理孤立依赖的配置删除用户家目录 ~/.xxx配置❌ 不处理 ❌ 不处理 ❌ 不处理 自动清理孤立无用依赖包 ❌ 不清理 ❌ 不清理 ✅ 自动清理无程序依赖的旧依赖 使用场景 临时卸载,后续重装不想重配 彻底清除软件,不留任何系统配置 卸载软件后回收冗余依赖磁盘空间 示例 apt remove nginxapt purge nginxapt autoremove


1911

被折叠的 条评论
为什么被折叠?



