Ubuntu中dpkg命令和apt命令的关系与区别

devtools/2025/2/28 12:33:03/

在 Ubuntu 中,dpkg 和 apt 是软件包管理的核心工具,但二者的角色和功能有显著区别:


一、功能定位

特性​**dpkg**​​**apt**​
层级底层工具(直接操作 .deb 文件)高层工具(管理软件仓库和依赖关系)
依赖处理❌ 不自动解决依赖✅ 自动解析并安装依赖
数据源仅限本地 .deb 文件远程仓库(通过 sources.list 配置)
典型用途手动安装离线包、低级维护日常安装/更新/删除软件包

二、核心区别

1. ​依赖管理
  • dpkg
    仅安装或卸载单个 .deb 文件,若缺少依赖会报错,需手动解决。
    示例:

    sudo dpkg -i package.deb  # 安装本地包(可能失败)
    sudo apt install -f       # 修复依赖(安装后必须执行)
  • apt
    从软件仓库下载包,并自动安装所有依赖项。
    示例:

    sudo apt install package  # 自动处理依赖
2. ​软件源支持
  • dpkg
    不访问网络,仅操作本地文件。
  • apt
    依赖 sources.list 配置的远程仓库,支持搜索、更新、升级等操作。
    示例:
     
    sudo apt update         # 更新软件源列表
    sudo apt upgrade        # 升级所有可更新软件包
3. ​系统维护
  • dpkg
    提供包信息查询、文件归属检查等底层功能。
    示例:

    dpkg -l                 # 列出所有已安装包
    dpkg -L apache2         # 查看 apache2 包安装的文件路径
  • apt
    提供高级功能(如清理无用包、删除孤儿包等)。
    示例:

    sudo apt autoremove     # 删除自动安装且不再需要的依赖
    sudo apt purge package  # 彻底删除包及其配置文件

三、协作关系

  • apt 依赖 dpkg
    apt 下载软件包后,调用 dpkg 执行实际安装操作。
    https://i.imgur.com/6wU9qTQ.png

  • 修复依赖
    当 dpkg 因依赖问题安装失败时,需通过 apt 解决:

    sudo dpkg -i broken-package.deb  # 失败(提示依赖缺失)
    sudo apt install -f              # 自动安装缺失依赖

四、使用场景对比

场景适用工具示例命令
安装本地 .deb 文件dpkgsudo dpkg -i package.deb
从仓库安装软件aptsudo apt install nginx
查询包的文件列表dpkgdpkg -L apache2
升级所有软件aptsudo apt update && sudo apt upgrade
修复损坏的包状态dpkg + aptsudo dpkg --configure -a

五、总结

  • dpkg:适合处理离线包安装**、底层系统审计,但需手动管理依赖。
  • apt:适合日常软件管理,自动化解决依赖和仓库交互。
  • 协作:两者配合使用,覆盖从底层操作到高级管理的全场景需求。

http://www.ppmy.cn/devtools/163347.html

相关文章

VSCode轻松调试运行C#控制台程序

1.背景 我一直都是用VS来开发C#项目的,用的比较顺手,也习惯了。看其他技术文章有介绍VS Code更轻量,更方便。所以我专门花时间来使用VS Code,看看它是如何调试代码、如何运行C#控制台。这篇文章是一个记录的过程。 2.操作 2.1 V…

selenium爬取苏宁易购平台某产品的评论

目录 selenium的介绍 1、 selenium是什么? 2、selenium的工作原理 3、如何使用selenium? webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么? 用于Web应用程序测试的工具。可以驱动浏览…

深入探索DNS技术:互联网背后的寻址密码

目录 DNS 是什么 DNS 的工作原理 域名服务器的类型 域名解析过程 DNS 常见问题及解决方法 DNS 的未来发展趋势 总结 DNS 是什么 DNS,即域名系统(Domain Name System) ,是互联网的一项核心服务。它作为互联网的 “地址簿”&…

DavGo简单部署WebDAV服务

目录 功能特性使用方法1. 下载2. 配置 config.yaml3. 运行服务器4. 可以用来挂载WebDav的软件 反向代理 DavGo 是一个用 Go 语言实现的轻量级 WebDAV 服务器,支持动态配置多个 WebDAV 服务实例,每个实例可以独立设置根目录、认证信息和读写模式。 功能特…

【Python爬虫(69)】解锁游戏数据宝藏:Python爬虫实战攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…

Wireshark插件开发实战:扩展网络协议分析的边界

前言 在网络协议分析领域,Wireshark作为业界标杆工具,其强大的可扩展性常被低估。本文将通过实战案例,揭秘如何通过插件开发突破Wireshark的默认分析能力,打造专属协议解析利器。 一、开发环境准备 1.1 工具链配置 Wireshark 4…

本地部署 deepseek-r1 1.5B方法-ubuntu20.04 python3.10 pycharm虚拟环境

1. 环境安装 ubuntu20.04 python3.10 pycharm虚拟环境 2.拉取代码 虚拟环境下安装vllm: pip install vllm ubuntu命令窗口安装 sudo apt install git-lfs 初始化 Git LFS 安装 Git LFS 后,你需要虚拟环境命令窗口初始化它:git lfs i…

HTTP非流式请求 vs HTTP流式请求

文章目录 HTTP 非流式请求 vs 流式请求一、核心区别 服务端代码示例(Node.js/Express)非流式请求处理流式请求处理 客户端请求示例非流式请求(浏览器fetch)流式请求处理(浏览器fetch) Python客户端示例&…