linux软件包管理

一、软件相关概念

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

  1. 主要在Red Hat、Fedora、CentOS等Linux发行版中使用。
  2. 包名通常包含软件名称、版本号、发布号、适用的Linux发行版标识和架构标识等信息。
  3. 可以通过rpm命令进行安装、卸载、查询等操作。

DEB包:Debian Binary Package

  1. 主要在Debian、Ubuntu等Linux发行版中使用。
  2. 使用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.rpm
wget https://mirrors.aliyun.com/centos-stream/9-
stream/AppStream/x86_64/os/Packages/vsftpd-3.0.5-6.el9.x86_64.rpm
wget 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/yum
lrwxrwxrwx. 1 root root 5  414 07:20 /usr/bin/yum -> dnf-3
[root@rocky10 ~]# ll /usr/bin/dnf
lrwxrwxrwx. 1 root root 5  414 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 repolist
yum repolist -v # 查看更多信息
[main]
gpgcheck=1                 #安装包前要做包的合法和完整性校验
installonly_limit=3         #同时可以安装3个包,最小值为2,如设为01, 为不限制
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                   #显示history
   info                     #显示包相关信息
   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 故障处理
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 multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
# 定制清华源镜像仓库
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse

更新软件源

root@ubuntu24:~# mkdir /data/backup/apt_source -p
root@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 的层级关系

对比项dpkgapt
层级底层,Debian 系原生包管理核心高层封装,基于 dpkg 开发的用户友好前端
网络功能无网络,仅处理本地 .deb 文件支持软件源联网下载包、更新索引
依赖处理不会自动解决依赖,缺依赖直接报错自动计算、下载、安装所有依赖包
核心职责解压文件、注册包数据库、增删本地程序文件拉取源索引、处理依赖、调度 dpkg 执行安装 / 卸载
典型命令dpkg -i xxx.debdpkg -lapt installapt removeapt update

执行流程示例

执行 apt install nginx

  1. apt 读取 /etc/apt/sources.list 拉取软件源索引;
  2. 自动下载 nginx 及其所有依赖的 deb 包;
  3. apt 批量调用底层 dpkg -i 完成本地安装;
  4. 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值