0. 问题解释

在linux系统中,使用neofetch命令可以看到现在系统中使用dpkg, flatpak, snap安装的包的数量,那么使用apt安装的包被统计在什么位置了呢,使用apt的安装流程和使用flatpak的安装流程有什么关系和区别呢?
在这里插入图片描述

1. apt 安装的包在哪里?和 neofetch 的显示有什么关系?

一句话回答:neofetch 显示的 3332 (dpkg) 这个数量,基本上就包含了所有通过 apt 安装的包。

详细解释:

在 Debian、Ubuntu、Linux Mint 等系统中,软件包管理系统是分层的:

  • dpkg (Debian Package manager): 这是底层的核心工具。它负责直接处理 .deb 软件包文件。它的功能包括:安装一个本地的 .deb 文件、卸载一个已安装的包、查询系统中已安装包的信息等。但是,dpkg 有一个巨大的“缺点”:它不会自动处理依赖关系。如果你想安装的包A需要包B,但你系统里没有包B,dpkg 就会报错并停止安装,需要你手动先去安装包B。

  • apt (Advanced Package Tool): 这是一个高层的、更智能的工具,它构建在 dpkg 之上。你可以把 apt 看作是 dpkg 的一个“智能管家”。apt 最重要的功能就是:

    • 自动解决依赖关系:当你 apt install A 时,它会自动分析出A需要B,然后帮你把A和B都下载并安装好。
    • 管理软件源 (Repositories)apt 知道去哪里(网络上的服务器)下载软件包。这些信息记录在 /etc/apt/sources.list/etc/apt/sources.list.d/ 目录下的文件中。
    • 系统更新和升级apt updateapt upgrade 可以方便地更新整个系统的所有软件包。

所以,它们的关系是:apt 是前端指挥官,dpkg 是后端执行者。

当你运行 sudo apt install firefox 时,apt 会:

  1. 找到 firefox 的最新版本。
  2. 分析出 firefox 需要的所有依赖包。
  3. 从软件源服务器上把 firefox 和它所有依赖包的 .deb 文件都下载下来。
  4. 最后,apt 会按照正确的顺序,调用 dpkg 把这些下载好的 .deb 文件一个个安装到系统里。

因此,neofetch 通过查询 dpkg 的数据库得知系统里有多少个包,这个数字自然就代表了整个 apt/dpkg 系统所管理的包的总数。

结论:aptneofetch 里的 dpkg 数量最一致。Packages: 3332 (dpkg) 就是你通过 apt (以及其他可能直接使用 dpkg 的工具如 synaptic, gdebi 等) 安装的软件包总数。


2. apt 的安装过程具体是怎样的?

sudo apt install vlc 为例,具体过程如下:

  1. 锁定数据库apt 会首先锁定 dpkg 的数据库文件,防止在你安装时,有其他软件管理程序(比如系统自动更新)同时操作,导致冲突。
  2. 读取软件源列表apt 检查 /etc/apt/sources.list 和相关文件,确定可以从哪些服务器下载软件。
  3. 解析依赖关系apt 查看本地的软件包缓存信息(通过 apt update 更新),找到 vlc 包的元数据。元数据里写明了 vlc 依赖哪些其他的包(比如 libvlc-core, vlc-plugin-base 等)以及它们需要的版本。
  4. 构建依赖树apt 会递归地检查所有依赖包的依赖,直到构建出一个完整的“需要安装/更新的软件包列表”。它会对比这个列表和当前系统已安装的包,计算出最终需要执行的操作。
  5. 用户确认apt 会在终端显示将要安装哪些新包、更新哪些包、占用多少磁盘空间等信息,并询问你是否继续 [Y/n]
  6. 下载软件包:在你确认后,apt 会从软件源服务器将所有需要的 .deb 文件下载到本地缓存目录,通常是 /var/cache/apt/archives/
  7. 调用 dpkg 安装:这是关键一步。apt 会根据之前计算好的正确依赖顺序,依次调用 dpkg -i 命令来安装所有下载好的 .deb 文件。先安装被依赖的包,再安装依赖这些包的包。
  8. 配置和收尾dpkg 在安装过程中会运行包自带的配置脚本(比如创建用户、设置服务等)。全部安装完成后,apt 解除数据库锁定,安装过程结束。

3. apt install 与自己安装 .deb 包 (dpkg -i) 的异同

这是一个非常核心的区别,直接体现了高层和底层工具的差异。

相同点
  • 最终执行者相同:无论是 apt 还是你手动用 dpkg,最终将文件解压并安装到系统里的都是 dpkg 这个程序。
  • 包格式相同:两者处理的都是 .deb 格式的软件包。
  • 安装后状态相同:一旦安装成功,包的信息都会被记录在 dpkg 的数据库中,neofetch 都能统计到,你也可以用 dpkg -lapt list --installed 查到它。
不同点
特性sudo apt install <包名>sudo dpkg -i <文件名.deb>
软件包来源自动从配置好的在线软件源下载。手动需要你先通过浏览器或其他方式下载好 .deb 文件到本地。
依赖关系处理自动处理。会自动下载并安装所有缺失的依赖包。这是其最大优势。不处理。如果缺少依赖,安装会直接失败并报错。你需要手动去寻找并安装所有依赖项。
便利性非常高。一条命令解决所有问题,是日常使用的首选。较低。通常只用于安装软件源里没有的软件(比如Google Chrome, VS Code的官网deb包)。
版本管理简单。可以通过 apt upgrade 统一更新所有通过 apt 安装的包。复杂。你手动安装的包不会被 apt upgrade 自动更新。你需要自己去官网下载新版的 .deb 文件再手动安装一次来升级。
命令对象操作的是包名(e.g., vlc)。操作的是本地文件名(e.g., vlc_3.0.18-2_amd64.deb)。

一个典型的例子:

你从官网下载了 google-chrome-stable_current_amd64.deb

  1. 你尝试 sudo dpkg -i google-chrome-stable_current_amd64.deb
  2. 系统可能会报错,提示缺少 libu2f-udev 等依赖。dpkg 安装失败。
  3. 这时,有一个绝佳的修复命令:sudo apt -f install。这个命令的作用是让 apt 介入,自动修复(fix-broken)依赖关系。apt 会发现 Chrome 已经“部分安装”但缺少依赖,于是它会自动从软件源里下载并安装 libu2f-udev 等所有缺失的依赖。依赖装好后,dpkg 会被再次调用来完成 Chrome 的配置。

希望这个详细的解释能帮助你彻底理解 aptdpkg 的关系!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92026.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92026.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92026.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YooAsset源码阅读-Downloader篇

YooAsset源码阅读-Downloader 继续 YooAsset 的 Downloader &#xff0c;本文将详细介绍如何创建下载器相关代码 CreateResourceDownloaderByAll 关键类 PlayModeImpl.csResourceDownloaderOperation.csDownloaderOperation.csBundleInfo.cs CreateResourceDownloaderByAll 方法…

豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索

摘要&#xff1a;在 AI 技术飞速发展的当下&#xff0c;各类大模型及辅助工具层出不穷&#xff0c;为开发者和创作者带来了全新的体验。2025 年 7 月 30 日厦门站的火山方舟线下 Meetup&#xff0c;为我们提供了近距离接触豆包新模型与 PromptPilot 的机会。本次重点体验了实验…

深入探讨AI在测试领域的三大核心应用:自动化测试框架、智能缺陷检测和A/B测试优化,并通过代码示例、流程图和图表详细解析其实现原理和应用场景。

引言随着人工智能技术的飞速发展&#xff0c;软件测试领域正在经历一场深刻的变革。AI技术不仅提高了测试效率&#xff0c;还增强了测试的准确性和覆盖范围。本文将深入探讨AI在测试领域的三大核心应用&#xff1a;自动化测试框架、智能缺陷检测和A/B测试优化&#xff0c;并通过…

音视频学习笔记

0.vs应用其他库配置1基础 1.1视频基础 音视频录制原理音视频播放原理图像表示rgb图像表示yuvhttps://blog.51cto.com/u_7335580/2059670 https://blog.51cto.com/cto521/1944224 https://blog.csdn.net/mandagod/article/details/78605586?locationNum7&fps1 视频主要概念…

LLM隐藏层状态: outputs.hidden_states 是 MLP Residual 还是 Layer Norm

outputs.hidden_states 是 MLP Residual 还是 Layer Norm outputs.hidden_states 既不是单纯的 MLP Residual,也不是单纯的 Layer Norm,而是每一层所有组件(包括 Layer Norm、注意力、MLP、残差连接等)处理后的最终隐藏状态。具体需结合 Transformer 层的结构理解: 1. T…

XML 用途

XML 用途 引言 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。自1998年推出以来&#xff0c;XML因其灵活性和可扩展性&#xff0c;在众多领域得到了广泛应用。本文将详细介绍XML的用途&#xff0c;帮助读者全面了解这一重要技术。 一、数据存…

亚马逊撤离Google购物广告:重构流量生态的战略博弈

战略突变&#xff1a;从渐进收缩到全面退潮的背后逻辑亚马逊在2025年7月突然全面停止Google Shopping广告投放&#xff0c;这场看似 abrupt 的决策实则经历了一年多的战略铺垫&#xff0c;从2024年Q1开始的预算削减&#xff0c;到2025年Q2美国市场支出减半&#xff0c;直至核心…

【QT】常⽤控件详解(三)常用按钮控件PushButton RadioButton CheckButton Tool Button

文章目录前言一、PushButton1.1 QAbstractButton1.2 添加图标的按钮1.3 给按钮添加快捷键1.4 代码⽰例:按钮的重复触发二、 RadioButtion2.1简介2.2 几个槽函数 click,press,release, toggled 的区别2.2 模拟分组点餐三、 CheckBox四、Tool Button&#x1f6a9;总结前言 一、P…

数据结构:反转链表(reverse the linked list)

目录 通过交换元素值实现反转&#xff08;reverse by swapping elements&#xff09; 滑动指针&#xff08;sliding pointers&#xff09; 使用滑动指针反转链表&#xff08;Reversing a Linked List using Sliding Pointers&#xff09; 对比分析 如何用递归&#xff08;R…

【C#】基于SharpCompress实现压缩包解压功能

1.SharpCompress安装 在vs的nuget下搜索安装SharpCompress&#xff0c;如图所示2.解压缩包功能实现 /// <summary> /// 解压压缩包 /// </summary> /// <param name"filePath">压缩包文件路径</param> /// <param name"directoryPat…

mybatis连接PGSQL中对于json和jsonb的处理方法

pgsql数据库表字段设置了jsonb格式&#xff1b;在java的实体里使用String或者对象转换会一直提示一个错误&#xff1a; Caused by: org.postgresql.util.PSQLException: ERROR: column “xx” is of type jsonb but expression is of type character varying 需要加一个转换方法…

Spring AI Alibaba Graph 深度解析:原理、架构与应用实践

1. 引言概述 1.1 什么是 Spring AI Alibaba Graph Spring AI Alibaba Graph 是阿里云团队基于 Spring AI 生态开发的一个强大的工作流编排框架&#xff0c;专门用于构建复杂的 AI 应用。它采用声明式编程模型&#xff0c;通过图结构来定义和管理 AI 工作流&#xff0c;让开发…

C++少儿编程(二十一)—软件执行流程

让我们将以下程序视为用C编写的示例程序。步骤1&#xff1a;预处理器将源代码转换为扩展代码。当您运行程序时&#xff0c;源代码首先被发送到称为预处理器的工具。预处理器主要做两件事&#xff1a;它会从程序中删除注释。它扩展了预处理器指令&#xff0c;如宏或文件包含。它…

精通Webpack搭建Vue2.0项目脚手架指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;在Web应用程序开发中&#xff0c;Vue 2.0因其虚拟DOM、单文件组件、增强的生命周期钩子和Vuex及Vue Router状态管理与路由解决方案&#xff0c;成为了提高开发效率和代码组织性的关键。Webpack作为必不可少的模…

无偿分享120套开源数据可视化大屏H5模板

数据可视化跨越了语言、技术和专业的边界&#xff0c;是能够推动实现跨界沟通&#xff0c;实现国际间跨行业的创新的工具。正如画家用颜料表达自我&#xff0c;作者用文字讲述故事&#xff0c;而统计人员用数字沟通 ...... 同样&#xff0c;数据可视化的核心还是传达信息。而设…

Qt按键响应

信号与槽机制是一个非常强大的事件通信机制&#xff0c;是 Qt 最核心的机制之一&#xff0c;初学者掌握它之后&#xff0c;几乎可以做任何交互操作。信号&#xff08;Signal&#xff09; 是一种“事件”或“通知”&#xff0c;比如按钮被点击、文本改变、窗口关闭等。 槽&#…

【Git】常见命令整理

Git分区与操作关系&#xff1a;Working Directory&#xff08;工作区&#xff0c;对于本地的编辑和修改在此进行&#xff09;->Staging Area&#xff08;暂存区/Index&#xff0c;在工作区进行git add操作后的位置&#xff09;->Git Repository&#xff08;本地仓库&…

Linux-Shell脚本基础用法

1.变量定义变量命名规则&#xff1a;可以包含字母&#xff0c;数字&#xff0c;下划线&#xff0c;首字母不能用数字开头&#xff0c;中间不能又空格&#xff1b;为变量赋值等号之间不能为空格&#xff1b;变量命名不能使用标点符号&#xff0c;不能使用bash的关键字&#xff1…

JS中的Map和WeakMap区别和联系

JavaScript 中 Map 与 WeakMap 的区别、联系及示例核心区别特性MapWeakMap键的类型允许任意类型的键&#xff08;对象、原始值&#xff09;键必须是对象&#xff08;非原始值&#xff09;垃圾回收强引用键 → 阻止垃圾回收弱引用键 → 不影响垃圾回收可遍历性支持遍历&#xff…

Linux 环境 libpq加载异常导致psql 连接 PostgreSQL 库失败失败案例

文章目录局点现象定位结论局点环境补充知识点如下库文件加载顺序关键事实&#xff1a;您系统中的证据&#xff1a;优先级对比表&#xff1a;解决方案强化&#xff1a;最终检查&#xff1a;本局点解决方法局点现象 数据库 mdm 升级失败检查日志, 发现是由于 psql 连接数据库报错…