Linux dpkg 命令

更多资料下载,冲击月薪过万,一线经验工程师录制, 干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com

deb包

.deb 是 Debian Linux 系统及其衍生系统(如 Ubuntu)使用的软件包格式。理解 .deb 包的格式和目录结构有助于软件的打包、安装、管理和维护。.deb 包本质上是一个经过压缩和归档的文件,它包含了软件运行所需的文件、配置信息以及安装脚本等。.deb 包通常由三个主要部分组成:

  • 控制信息(Control Information):包含软件包的元数据,如软件包名称、版本号、依赖关系、描述等,以及安装和卸载脚本。
  • 数据文件(Data Files):包含软件实际的二进制文件、库文件、配置文件、文档等,这些文件在安装时会被复制到系统的相应目录中。
  • 归档信息(Archive Information):包含一些用于标识和验证软件包的元数据,如软件包的大小、校验和等。

使用 ar 命令(ar 是一个用于创建、修改和提取归档文件的工具)解压 .deb 包来查看其内部结构。例如,对于一个名为 test.deb 的软件包,可以执行以下命令进行解压:

# ar x test.deb

解压后会得到两个文件:data.tar.xz 和 control.tar.gz

control.tar.gz 文件

control.tar.gz 是一个压缩文件,解压后会得到一个 control 目录,其中包含以下文件:

  • control 文件:包含软件包的元数据,如:
    Package: test        # 软件包名称
    Version: 1.0           # 软件包版本号
    Section: utils         # 软件包所属的类别
    Priority: optional     # 软件包的优先级
    Maintainer: wit <wit@test.com>  # 维护者信息
    Installed-Size: 1024   # 安装后的大小(单位:KB)
    Depends: libc6 (>= 2.14), libsqlite3-0 (>= 3.7.15)  # 依赖关系
    Description: This is an Test package.  # 软件包描述
    
  • preinst 脚本:在软件包安装前执行的脚本,通常用于检查系统环境、备份配置文件等。
  • postinst 脚本:在软件包安装后执行的脚本,通常用于初始化配置、启动服务等。
  • prerm 脚本:在软件包卸载前执行的脚本,通常用于停止服务、清理临时文件等。
  • postrm 脚本:在软件包卸载后执行的脚本,通常用于删除残留文件、恢复备份的配置文件等。

data.tar.xz 文件

data.tar.xz 是一个压缩文件,解压后会得到软件包的数据文件,其目录结构与系统的目录结构相对应,例如:

  • /usr/bin/ 目录:包含软件的可执行二进制文件。
  • /usr/lib/ 目录:包含软件依赖的库文件。
  • /etc/ 目录:包含软件的配置文件。
  • /usr/share/doc/ 目录:包含软件的文档文件,如 README、手册页等。

解压一个 data.tar.xz 文件,可能会包含以下目录和文件:

./usr/
./usr/bin/
./usr/bin/example
./usr/lib/
./usr/lib/libexample.so
./etc/
./etc/example.conf
./usr/share/
./usr/share/doc/
./usr/share/doc/example/
./usr/share/doc/example/README

使用 dpkg 安装 deb包

基本语法如下:

# sudo dpkg -i test.deb

安装过程中,dpkg 会将软件包中的文件复制到系统的相应目录,并执行 control.tar.gz 中的 postinst 脚本(如果存在)来完成一些安装后的配置工作。

如果要卸载名为 test 的软件包,可执行:

# sudo dpkg -r test

在卸载过程中,dpkg 会执行 control.tar.gz 中的 prerm 和 postrm 脚本(如果存在)来完成一些卸载前和卸载后的操作。

如果想查看安装的软件包的信息,可以使用下面的命令:

# dpkg -s package_name          查看软件包的名称、版本、状态、依赖关系
# dpkg -L package_name          查看软件包文件列表
# dpkg --configure -a           修复软件包依赖
# dpkg --configure test         重新执行软件包的 postinst 脚本,完成重新配置操作

注意

dpkg 不会自动处理软件包的依赖关系,当安装的软件包存在依赖问题时,可能需要手动安装依赖的软件包,或者使用 apt 工具来解决依赖问题,因为 apt 是基于 dpkg 开发的,它可以自动处理软件包的依赖关系。

《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客