apt和apt-get的区别

文章目录

  • 环境
  • 问题
  • 背景
  • 区别
    • 进度条
    • 显示可更新包的数量
    • upgrade
  • 对比
  • apt-get 过时了吗
  • 使用apt还是apt-get
  • 总结
  • 参考

环境

  • RHEL 9.3
  • Docker Community 24.0.7
  • Ubuntu Docker image
    • jammy 22.04
    • lunar 23.04
  • Ubuntu 22.04

问题

aptapt-get 有一些相似之处。比如,如果想安装vim,下面两种方法都可以:

  • apt install vim
  • apt-get install vim

那么问题来了:

  • apt-getapt 有什么区别?
  • 如果二者差不多,为何还要引入 apt 呢?
  • 如果 aptapt-get 好,那还有必要继续使用 apt-get 吗,还是应该都使用 apt 呢?

背景

Debian系统(比如Ubuntu)使用Advanced Packaging Tool(APT)来管理系统里的包。注意这里的APT不是指 apt 命令。

在基于Debian的Linux系统里,有一系列工具可以和APT交互,用来安装、卸载、管理包, apt-get 就是其中一个,类似的还有 apt-cacheapt-config 等。

这些命令通常被称为“低级”(low-level)命令,它们包含很多用户不太常用的功能。另一方面,一些常用的包管理功能分散在各种 apt-xxx 命令里。

为了简化,引入了 apt 命令。 apt 包含了 apt-xxx 命令里最常用的功能,这样,用户就不再需要使用 apt-xxx 命令来管理包,而只需使用一个 apt 命令。

apt 的参数选项比 apt-xxx 少,毕竟是为了方便用户使用,只包含了最常用的功能。

此外, apt 的用户界面更加友好。

区别

接下来用几个示例展示 aptapt-get 的区别。

进度条

(注:本例测试环境为Ubuntu Docker image(jammy,22.04)。)

apt install vim 在安装过程中,会显示进度条:

在这里插入图片描述

而使用 apt-get install vim 时,则不会显示进度条。

在这里插入图片描述

可以通过配置 /etc/apt/apt.conf.d/99fancy 文件,使得 apt-get 显示进度条:

DPkg::Progress-Fancy "1";
APT::Color "1";

亲测有效。

注:可以通过配置 /etc/apt/apt.conf.d/99progressbar 文件,决定 apt 是否显示进度条:

Dpkg::Progress-Fancy"1";

但在我的测试里,无论是否有该配置, apt 都会显示进度条。我猜测这可能只对旧的Ubuntu版本有效,当时 apt 可能还没有默认显示进度条。

显示可更新包的数量

(注:使用Ubuntu Docker image(jammy,22.04)做 apt update 时,最后显示没有可更新的包。本例使用的是 ubuntu:lunar Docker image(lunar,23.04)。)

apt update 命令会在最后面,显示可更新包的数量:

apt update
Get:1 http://security.ubuntu.com/ubuntu lunar-security InRelease [109 kB]
Get:2 http://archive.ubuntu.com/ubuntu lunar InRelease [267 kB]
Get:3 http://security.ubuntu.com/ubuntu lunar-security/restricted amd64 Packages [612 kB]
Get:4 http://archive.ubuntu.com/ubuntu lunar-updates InRelease [109 kB]
Get:5 http://archive.ubuntu.com/ubuntu lunar-backports InRelease [99.9 kB]
Get:6 http://security.ubuntu.com/ubuntu lunar-security/main amd64 Packages [610 kB]
Get:7 http://security.ubuntu.com/ubuntu lunar-security/universe amd64 Packages [975 kB]
Get:8 http://archive.ubuntu.com/ubuntu lunar/restricted amd64 Packages [181 kB]
Get:9 http://security.ubuntu.com/ubuntu lunar-security/multiverse amd64 Packages [7793 B]
Get:10 http://archive.ubuntu.com/ubuntu lunar/multiverse amd64 Packages [289 kB]         
Get:11 http://archive.ubuntu.com/ubuntu lunar/universe amd64 Packages [18.7 MB]
Get:12 http://archive.ubuntu.com/ubuntu lunar/main amd64 Packages [1797 kB]                                                                                                                                                                 
Get:13 http://archive.ubuntu.com/ubuntu lunar-updates/universe amd64 Packages [1079 kB]                                                                                                                                                     
Get:14 http://archive.ubuntu.com/ubuntu lunar-updates/main amd64 Packages [712 kB]                                                                                                                                                          
Get:15 http://archive.ubuntu.com/ubuntu lunar-updates/multiverse amd64 Packages [7793 B]                                                                                                                                                    
Get:16 http://archive.ubuntu.com/ubuntu lunar-updates/restricted amd64 Packages [613 kB]                                                                                                                                                    
Get:17 http://archive.ubuntu.com/ubuntu lunar-backports/universe amd64 Packages [4201 B]                                                                                                                                                    
Fetched 26.1 MB in 12s (2207 kB/s)                                                                                                                                                                                                          
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.

apt-get update 命令则不显示可更新包的数量:

apt-get update
Get:1 http://archive.ubuntu.com/ubuntu lunar InRelease [267 kB]
Get:2 http://security.ubuntu.com/ubuntu lunar-security InRelease [109 kB]
Get:3 http://archive.ubuntu.com/ubuntu lunar-updates InRelease [109 kB]
Get:4 http://archive.ubuntu.com/ubuntu lunar-backports InRelease [99.9 kB]            
Get:5 http://security.ubuntu.com/ubuntu lunar-security/multiverse amd64 Packages [7793 B]
Get:6 http://archive.ubuntu.com/ubuntu lunar/main amd64 Packages [1797 kB]
Get:7 http://security.ubuntu.com/ubuntu lunar-security/main amd64 Packages [610 kB]
Get:8 http://archive.ubuntu.com/ubuntu lunar/universe amd64 Packages [18.7 MB]
Get:9 http://security.ubuntu.com/ubuntu lunar-security/universe amd64 Packages [975 kB]  
Get:10 http://security.ubuntu.com/ubuntu lunar-security/restricted amd64 Packages [612 kB]
Get:11 http://archive.ubuntu.com/ubuntu lunar/multiverse amd64 Packages [289 kB]                                                                                                                                                            
Get:12 http://archive.ubuntu.com/ubuntu lunar/restricted amd64 Packages [181 kB]                                                                                                                                                            
Get:13 http://archive.ubuntu.com/ubuntu lunar-updates/restricted amd64 Packages [613 kB]                                                                                                                                                    
Get:14 http://archive.ubuntu.com/ubuntu lunar-updates/universe amd64 Packages [1079 kB]                                                                                                                                                     
Get:15 http://archive.ubuntu.com/ubuntu lunar-updates/multiverse amd64 Packages [7793 B]                                                                                                                                                    
Get:16 http://archive.ubuntu.com/ubuntu lunar-updates/main amd64 Packages [712 kB]                                                                                                                                                          
Get:17 http://archive.ubuntu.com/ubuntu lunar-backports/universe amd64 Packages [4201 B]                                                                                                                                                    
Fetched 26.1 MB in 9s (3041 kB/s)                                                                                                                                                                                                           
Reading package lists... Done

upgrade

(注:本例测试环境为Ubuntu 22.04(非Docker image)。)

查看 aptapt-get 的帮助:

  • man apt

upgrade is used to install available upgrades of all packages currently installed on the system from the sources configured via sources.list(5). New packages will be installed if required to satisfy dependencies, but existing packages will never be removed. If an upgrade for a package requires the removal of an installed package the upgrade for this package isn’t performed.

  • man apt-get

upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded; under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. New versions of currently installed packages that cannot be upgraded without changing the install status of another package will be left at their current version. An update must be performed first so that apt-get knows that new versions of packages are available.

简而言之:

  • 共同点:二者都不会删除已安装的包
  • 不同点:如果升级时发现有被依赖的新包,则 apt upgrade 会安装新包,而 apt-get upgrade 则不会安装新包

例如:

apt --simulate upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-5.15.0-91 linux-headers-5.15.0-91-generic linux-image-5.15.0-91-generic linux-modules-5.15.0-91-generic linux-modules-extra-5.15.0-91-generic
The following packages have been kept back:
  python3-update-manager update-manager-core
The following packages will be upgraded:
  binutils binutils-common binutils-x86-64-linux-gnu cryptsetup cryptsetup-bin cryptsetup-initramfs curl distro-info distro-info-data irqbalance kpartx libbinutils libc-bin libc6 libcryptsetup12 libctf-nobfd0 libctf0 libcurl3-gnutls libcurl4
  libsqlite3-0 libssh-4 linux-firmware linux-generic linux-headers-generic linux-image-generic locales multipath-tools openssh-client openssh-server openssh-sftp-server python3-cryptography python3-distro-info python3-software-properties
  software-properties-common systemd-hwe-hwdb tar vim vim-common vim-runtime vim-tiny xxd
41 upgraded, 5 newly installed, 0 to remove and 2 not upgraded.
apt-get --simulate upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic python3-update-manager update-manager-core
The following packages will be upgraded:
  binutils binutils-common binutils-x86-64-linux-gnu cryptsetup cryptsetup-bin cryptsetup-initramfs curl distro-info distro-info-data irqbalance kpartx libbinutils libc-bin libc6 libcryptsetup12 libctf-nobfd0 libctf0 libcurl3-gnutls libcurl4
  libsqlite3-0 libssh-4 linux-firmware locales multipath-tools openssh-client openssh-server openssh-sftp-server python3-cryptography python3-distro-info python3-software-properties software-properties-common systemd-hwe-hwdb tar vim
  vim-common vim-runtime vim-tiny xxd
38 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.

注: --simulate 表示模拟操作,并没有真正升级。

对比可见, apt upgrade 安装了5个新包。这是因为,升级Linux kernel版本,实际上是安装了新的Linux kernel,其包名是不同的,所以对于系统来说,相当于安装了新的包。 apt-get upgrade 不会安装新包。如果想用 apt-get 更新kernel,需要用 dist-upgrade 选项。

对比

虽然 aptapt-get 有一些相似的命令选项,但 apt 并没有设计为向后兼容 apt-get 。这就意味着如果把 apt-get xxx 里的 apt-get 替换为 apt ,则无法保证修改后的命令是正确的。

aptapt-xxx 的简单对比如下:

apt 命令替代的 apt-xxx 命令功能
apt installapt-get install安装包
apt removeapt-get remove卸载包
apt updateapt-get update更新仓库索引
apt upgradeapt-get upgrade更新所有可更新的包
apt autoremoveapt-get autoremove卸载不想要的包
apt full-upgradeapt-get dist-upgrade更新包并自动处理依赖
apt searchapt-cache search查找包
apt showapt-cache show显式包详细信息

apt 也有一些新的选项:

新的 apt 命令功能
apt list包列表以及是否已安装,是否可升级等信息
apt edit-sources编辑 sources.list 文件

apt-get 过时了吗

没有迹象表明 apt-get 过时了,它仍然比 apt 提供了更多的功能。

对于底层的操作,比如脚本、开发处理APT的CLI工具等, apt-get 仍然会被用到。

使用apt还是apt-get

优先使用 apt ,对于 apt 不包含的功能,再使用 apt-xxx

总结

  • aptapt-xxx 的子集
  • apt 简化了使用,并且对用户更加友好
  • 优先使用 apt

参考

  • https://itsfoss.com/apt-vs-apt-get-difference
  • https://www.baeldung.com/linux/apt-vs-apt-get

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/307217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在VS Code中安装Copilot与安装其他扩展的方法一样,只需简单几步

GitHub Copilot是由OpenAI和GitHub开发的人工智能工具。它的目的是通过自动完成代码来帮助开发人员使用集成开发环境(IDE),如Visual Studio Code。它目前仅作为技术预览版提供,因此只有在候补名单上被认可的用户才能访问它。对于用…

Spark避坑系列一(基础知识)

大家想了解更多大数据相关内容请移驾我的课堂: 大数据相关课程 剖析及实践企业级大数据 数据架构规划设计 大厂架构师知识梳理:剖析及实践数据建模 剖析及实践数据资产运营平台 Spark作为大数据领域离线计算的王者,在分布式数据处理计算领域有着极高的处理效率,而Python作为…

智能商品管理系统相比传统商品管理在自动化程度上有哪些优势?

智能商品管理系统相比传统商品管理模式,在自动化程度上具有以下具体优势: 1、数据自动采集:智能商品管理系统通过传感器、物联网等技术,可以自动采集商品的销售数据、库存情况、市场趋势等信息,无需人工干预。这样可以…

Qrcode生成中间带log的二维码图片

Qrcode生成中间带log的二维码图片 1.引入依赖 <dependency><groupId>com.swetake.util</groupId><artifactId>QRCode</artifactId><version>3.0</version></dependency>2.测试 public class QRCodeUtil {public static int …

LeetCode 94. 二叉树的中序遍历

94. 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&…

cctalk录屏去水印翻录过检测教程

最近在上cctalk的网课时候&#xff0c;遇到了这种情况&#xff0c;无法打开录屏工具&#xff0c;打开了录屏软件会被播放器检测&#xff0c;无法正常播放网课视频&#xff0c;可以用这个工具&#xff0c;就可以随便录了&#xff0c;而且可以去用户名水印。 使用方法也很简单&a…

springboot+java+bootstrap商场摊位商铺租赁管理系统

商铺租赁管理系统分为管理员&#xff0c;房东&#xff0c;用户三种角色。 &#xff08;1&#xff09;管理员功能&#xff1a;管理员管理房东&#xff0c;管理公告&#xff0c;管理商铺出租&#xff0c;租赁合同等信息。 &#xff08;2&#xff09;房东功能&#xff1a;房东审核…

参数小,性能强!开源多模态模型—TinyGPT-V

安徽工程大学、南洋理工大学和理海大学的研究人员开源了多模态大模型——TinyGPT-V。 TinyGPT-V以微软开源的Phi-2作为基础大语言模型&#xff0c;同时使用了视觉模型EVA实现多模态能力。尽管TinyGPT-V只有28亿参数&#xff0c;但其性能可以媲美上百亿参数的模型。 此外&…

0基础学习VR全景平台篇第136篇:720VR全景,认识无人机

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 无人驾驶飞行器&#xff0c;简称“无人机”&#xff0c;英文缩写为“UAV”。是利用无线电控制设备和自备程序控制操纵的不载人飞机。 &#xff08;一&#xff09;无人机介绍 较…

vue element plus 安装

环境支持# Element Plus 可以在支持 ES2018 和 ResizeObserver 的浏览器上运行。 如果您确实需要支持旧版本的浏览器&#xff0c;请自行添加 Babel 和相应的 Polyfill 。 由于 Vue 3 不再支持 IE11&#xff0c;Element Plus 也不再支持 IE 浏览器。 Edge ≥ 79Firefox ≥ 78C…

信号-进程间通信

信号 1. 信号概述 在 Linux 操作系统中&#xff0c;信号是一种进程间通信的机制&#xff0c;用于通知进程发生了某个事件。信号可以由内核、其他进程&#xff0c;或者进程自身发送。每个信号都对应一个特定的事件或异常&#xff0c;例如进程终止、CtrlC 中断等。 本质上是一…

使用AUTOSAR来开发汽车基础软件的优点

1、高质量。以前我们采用手写代码的方式&#xff0c;是几个工程师在战斗。现在我们采用平台&#xff0c;BSW代码都是供应商提供的&#xff0c;我们相当于后面还有一个团队陪着我们在战斗。 2、低成本。大家都说采用AUTOSAR平台好贵&#xff0c;但是从长远来看是值得的&#xff…

利用虾皮Shopee API (shopee.item_get)提升电商平台用户转化率与客单价

在当今的电商环境中&#xff0c;用户转化率和客单价是衡量电商平台成功与否的关键指标。虾皮Shopee作为一个领先的电商平台&#xff0c;提供了丰富的API服务&#xff0c;其中shopee.item_get接口允许商家根据商品ID获取详细的商品信息。通过合理利用这一API&#xff0c;商家可以…

glusterFS

一. 概念 1. 介绍 gluster是一个横向扩展的分布式文件系统&#xff0c;可将来自多个服务器的磁盘存储资源整合到一个全局名称空间中&#xff0c;可以根据存储消耗需求快速调配额外的存储。它将自动故障转移作为主要功能. 分布式存储系统.集群式NAS存储.无集中式元数据服务,采…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案&#xff0c;用于录制、转换和流式传输音频和视频。 EasyDarwin软件&#xff1a;Download Easy…

激活函数整理

sigmoid函数 import torch from d2l import torch as d2l %matplotlib inline ​ xtorch.arange(-10,10,0.1,requires_gradTrue) sigmoidtorch.nn.Sigmoid() ysigmoid(x) ​ d2l.plot(x.detach(),y.detach(),x,sigmoid(x),figsize(5,2.5)) sigmoid函数连续、光滑、单调递增&am…

java数据结构与算法刷题-----LeetCode343. 整数拆分(TODO)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

C++力扣题目226--翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,1]示例 3&#x…

【算法与数据结构】746、LeetCode使用最小花费爬楼梯

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以从0阶或者1阶台阶开始&#xff0c;每次爬楼梯所需的花费是之前的花费dp[i]从本层向上爬所需的…

入门实战丨Python小游戏经典案例

文章目录 写在前面判断与循环小游戏猜数游戏龙的世界 写在后面 写在前面 本期内容&#xff1a;两个个简单的Python小游戏入门案例。 实验需求&#xff1a;python 实验目标&#xff1a;掌握基本的判断与循环语句。 判断与循环 判断与循环是编程中非常重要的两个概念&#x…