笔记78:软件包管理工具 apt 详解(包含常用 apt 命令介绍)

一、Ubuntu 的包管理工具 apt


过去,软件通常是从源代码安装的,安装步骤为:​​​​​​

  1. 在Github上下载该软件的源码文件;
  2. 查看Github上这个软件项目中提供的自述文件(通常包含配置脚本或 makefile 文件),看看这个软件想要运行,需要哪些其他的软件组件;
  3. 在本地的终端窗口中运行提供的配置脚本,下载依赖项,配置好本体软件的运行环境;
  4. 这一切做好后对下载的源码文件进行编译,即可正确安装和运行目标软件;

举例(以安装 ROS 中的一个仿真软件为例):

1.在 Github 中搜索 wpr_simulation ,进入项目空间;

2.复制源码连接,下载源码到本地的 catkin_ws/src 文件夹下;

git clone https://github.com/6-robot/wpr_simulation.git

3. 下载后我们发现在项目文件夹 catkin_ws/src/wpr_simulation 下有一个文件夹 scripts ,这个文件夹是一个脚本文件夹,需要使用里面的脚本 install_for_noectic.sh 完成对依赖软件包的安装和环境配置;

cd catkin_ws/src/wpr_simulation/scripts/
./install_for_noectic.sh

4.在 ~/catkin_ws 下 使用 catkin_make 命令编译整个项目;

cd ~/catkin_ws/
catkin_make

为了摆脱这种复杂性,Linux 各个发行版创建了自己的打包格式:

  • Linux 发行版之间的主要区别之一是包管理,Ubuntu 的包管理工具就是 apt ,为最终用户提供用于安装软件的即用型二进制文件(已经预编译的软件)以及一些元数据(版本号、描述)和依赖项;
  • 软件包管理工具 apt 在 Ubuntu 的本地维护着一个源列表文件,源列表文件里面都是一些网址信息,每一条网址就是一个软件源,而每一个软件源里面有无数个打包好的软件包;
  • 如果想通过 apt 安装软件,那么终端会逐条读取源列表文件中的网址(软件源),看哪个软件源里面有我们需要的软件包;

安装步骤简化为仅使用一行命令即可安装软件:

sudo apt-get install <package_name>
  • apt 已经将所需的软件的依赖项,元数据和软件本体全部打包好了,形成了一个以目的软件名作为软件包名的软件包;
  • 且这个软件包中的内容都是经过了预编译的,安装上以后不需要人为安装依赖项/编译,就可以直接使用;

注意:/var/cache/apt/archives 目录是在用 apt install 安装软件时,软件包的临时存放路径;


关于 apt 安装和源码安装的优劣势:

  • apt软件包管理工具优点在于方便,缺点在于如果我们想对软件的源码进行修改,则是不可能的,因为通过 apt 下载下来的软件包都是预编译好的,都是二进制文件,无法查看源码;
  • 这就是通过源码安装软件的好处,可以对源码文件进行修改,然后再编译,就可以实现对软件功能的修改和定制;

补充:

  • apt 在本地维护的源列表文件地址:
/etc/apt/sources.list
  • 可以使用文本编辑器 gedit 打开并查看:(有清华源/中科大源 ... 可用)
sudo gedit /etc/apt/sources.list

 总结:

  • 简单来说,包管理器是一个允许用户在操作系统上安装、删除、升级、配置和管理软件包的工具;通过这个包管理器可以方便的对所有软件包安装 / 卸载 / 更新 ...
  • 软件包管理工具 apt 在 Ubuntu 的本地维护着一个源列表文件,源列表文件里面都是一些网址信息,每一条网址就是一个软件源,而每一个软件源里面有无数个打包好的软件包;
  • 如果想通过 apt 安装软件,那么终端会逐条读取源列表文件中的网址(软件源),看哪个软件源里面有我们需要的软件包;

 a

a

a

a

a

二、apt 和 dpkg 之间的区别



a

a

a

a

a

三、命令 apt update 和 apt upgrade 的功能


sudo apt update 执行过程:

  • 连接软件源:这个命令会访问我们维护在 Ubuntu 本地的源列表文件(即 sources.list 文件),逐个访问里面的网址(软件源/软件仓库),读取每个软件仓库中所有软件的信息,有哪些新增的软件包?或者哪些已有软件包的新版本?
  • 更新本地的软件包列表:将这些信息全部存储在本地的 /var/lib/apt/lists 目录下(该文件夹内存储的是软件包列表);就是更新这个文件夹里面的内容,添加新软件包的描述信息 / 对有了新版本的旧软件包的描述信息的更改;
  • 检查可用更新:当本地的软件包列表文件更新完成,这个命令就会将本地 Ubuntu 上已经安装的软件包的版本信息和本地的软件包列表(即 lists 文件夹)中的信息交叉对比,以此来确定哪些软件包有新版本可用;

注意1:文件夹 lists 的内容是从所有软件源读取到的所有软件包的描述信息(版本信息/依赖信息 / 下载地址),不管是当前系统中已安装的软件包或是未安装的软件包;

注意2:这个命令只是更新我们在本地存储的描述信息,而不会更新任何一个软件包,也不会安装任何一个软件包;

sudo apt update 执行结果:

  • 命中:意味着该软件源网址自上次访问以来里面的软件包信息没有更改,因此它被认为是最新的并且不需要再次下载;
  • 获取:在某个软件源网址内 下载了新软件包的描述信息 / 更新了旧软件包的描述信息;
  • 忽略:就是指这个软件源网站无更新 / 更新无关紧要;

sudo apt update 执行过程:

  • 检查可用更新:这个命令会把本地已安装的软件,与刚下载的软件列表里对应软件地址的软件进行对比,如果发现已安装的软件版本太低 / 某些软件需要其他新软件包作为依赖,就会提示你选择 Y/N ,然后对本地安装的软件进行更新 / 安装新依赖项;
  • 更新/安装软件:如果你的软件都是最新版本,会提示:升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级;

sudo apt update 执行结果:


总结:

  • update 的作用:​​update​​​ 命令只会获得系统上所有包的最新信息,并不会下载或者安装任何一个包;
  • upgrade 的作用:​apt upgrade​​ 命令是用来把这些包下载和升级到最新版本;

a

a

a

a

a

四、apt 和 apt-get 命令之间的区别



a

a

a

a

a

五、如何更换 apt 的软件源(文件 sources.list 中的网址)


  • 备份原来的源:将以前的软件源备份一下,以防以后可以用的到;
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  • 添加新源:打开 /etc/apt/sources.list 文件,在前面添加如下条目,并保存;
sudo vim /etc/apt/sources.list(可将vim更换为自己熟悉的编辑器,如gedit)
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse

注意:可以通过 # 来禁注释掉原软件源,添加需要添加的软件源;

  • 更新源 + 更新软件:
sudo apt-get update
sudo apt-get upgrade

a

a

a

a

a

六、apt 常用命令


更新软件列表: apt-get update

更新安装的软件: apt-get upgrade

搜索软件: apt-cache search package_name

软件列表: apt list

已安装软件: apt list --installed

安装软件: apt install package_name

安装软件包的时候指定安装具体的版本: apt install nginx=1.14.0-0ubuntu1.6

修复软件依赖: apt install -f

升级软件: apt upgrade package_name

卸载软件: apt remove package_name

卸载软件及依赖: apt autoremove package_name

删除配置: apt purge package_name

安装本地软件包: dpkg -i your_deb_file.deb

推荐文章:

  1. apt命令之软件仓库管理使用一览表-腾讯云开发者社区-腾讯云
  2. Linux系统 apt-get 命令的使用:安装、更新、卸载软件包-腾讯云开发者社区-腾讯云
  3. apt 常用命令_apt查看源里的软件信息-CSDN博客

a

a

a

a

a


参考文献:

  1. What is a Package Manager in Linux?
  2. https://www.quora.com/What-do-GET-HIT-and-IGN-mean-when-I-run-an-apt-get-update-on-Ubuntu
  3. sudo apt-get update和sudo apt-get upgrade命令的区别_apt-get update和upgrade-CSDN博客
  4. apt 的 update 和 upgrade 命令的区别是什么?-51CTO.COM
  5. What is a Package Manager in Linux?
  6. Ubuntu20.04软件源更换 - 知乎

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

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

相关文章

Harbor二次开发前端环境搭建

1 前端开发环境搭建 &#xff08;1&#xff09;拉取分支代码 &#xff08;2&#xff09;前端开发推荐使用VsCode编辑器打开项目 打开 harbor\src\portal 文件夹&#xff0c;该文件夹为Harbor对应的前端代码所在位置 &#xff08;3&#xff09;在portal文件夹下创建名为 pro…

【Springer出版 · EI检索】| 第二届先进无人飞行系统国际会议(ICAUAS 2024)

会议简介 Brief Introduction 2024年第二届先进无人飞行系统国际会议(ICAUAS 2024) 会议时间&#xff1a;2024年6月14日-16日 召开地点&#xff1a;中国南昌 大会官网&#xff1a;ICAUAS 2024-2024 2nd International Conference on Advanced Unmanned Aerial Systems2024 2nd …

java SSM汽车租赁管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM汽车租赁管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

江大白 | 万字长文,算法工程师的深度经验总结!(建议阅读收藏!)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;万字长文&#xff0c;算法工程师的深度经验总结&#xff01; 以下文章来源于知乎&#xff1a;机智的叉烧 链接&#xff1a;https://zhuanlan…

JAVA实战开源项目:智能停车场管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

opengl 学习(三)-----纹理

纹理就是贴图 分类前提demo效果解析 分类 前提 需要使用一个库来处理图片&#xff1a;#include <stb_image.h> https://github.com/nothings/stb 你下载好了之后&#xff0c;把目目录包含了就好 然后再引入 #define STB_IMAGE_IMPLEMENTATION #include "stb_i…

git删除comimit提交的记录

文章目录 本地的删除远程同步修改上次提交更多详情阅读 本地的删除 例如我的提交历史如下 commit 58211e7a5da5e74171e90d8b90b2f00881a48d3a Author: test <test36nu.com> Date: Fri Sep 22 20:55:38 2017 0800add d.txtcommit 0fb295fe0e0276f0c81df61c4fd853b7a00…

基于java的企业设备管理系统设计与实现

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

Maya人物建模

【MAYA人物建模】超详细讲解人物嘴巴、鼻子、眼睛、耳朵、头发、帽子等布线细节&#xff0c;零基础人物头部布线教程_哔哩哔哩_bilibili 原始图像凑合用&#xff0c;视屏中截图 图像导入过程技巧总结 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视…

Python学习日记之学习turtle库(上 篇)

一、初步认识turtle库 turtle 库是 Python 语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横 轴为 x、纵轴为 y 的坐标系原点&#xff0c;(0,0)位置开始&#xff0c;它根据一组函数指令的控制&#xff0c;在这个平面 坐标系中移动&#xff0…

基于华为atlas的unet分割模型探索

Unet模型使用官方基于kaggle Carvana Image Masking Challenge数据集训练的模型。 模型输入为572*572*3&#xff0c;输出为572*572*2。分割目标分别为&#xff0c;0&#xff1a;背景&#xff0c;1&#xff1a;汽车。 Pytorch的pth模型转化onnx模型&#xff1a; import torchf…

探索Web中的颜色选择:不同取色方法的实现

在Web开发中&#xff0c;提供用户选择颜色的功能是很常见的需求。无论是为了个性化UI主题&#xff0c;还是为了图像编辑工具&#xff0c;一个直观且易用的取色器都是必不可少的。本文将介绍几种在Web应用中实现取色功能的方法&#xff0c;从简单的HTML输入到利用现代API的高级技…

计算机设计大赛 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

掌握Java建造者模式:逐步构建复杂对象的艺术与实践

建造者模式的主要目的是将一个复杂对象的构建过程封装起来&#xff0c;使得客户端代码不需要知道对象创建的细节。这种模式特别适用于那些具有多个组成部分、创建过程复杂、对象属性多且大多数属性可选的场合。 在Java中&#xff0c;建造者模式通常涉及以下几个角色&#xff1…

Android Studio Iguana | 2023.2.1版本

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统基于 Gradle&#xff0c;并且 Android Gradle 插件 (AGP) 添加了一些特定于构建 Android 应用程序的功能。下表列出了每个版本的 Android Studio 所需的 AGP 版本。 如果特定版本的 Android Studio 不支持…

如何将MathType嵌入到word中 word打开MathType显示错误

当我们编辑好mathtype公式以后&#xff0c;有时候需要将这个公式导入到word中&#xff0c;但是有不少用户们不清楚mathtype如何嵌入到word中。今天小编就给大家说明一下mathtype公式导入word的两种不同方法&#xff0c;有需要的用户们赶紧来看一下吧。 一、mathtype如何嵌入到…

C++流行的开源框架和库总结

目录 引言&#xff1a; 标准库 框架C通用框架和库 人工智能与机器人学习 异步事件循环 音视频多媒体 压缩压缩和归档库 并发性并发执行和多线程 容器 密码学 数据库&#xff0c;SQL服务器&#xff0c;ODBC驱动程序和工具 游戏引擎 图形与图像 国际化 Json 日志…

Java - JVM

文章目录 一、JVM1. JVM的作用2. JVM、JRE、JDK的关系3. JVM的组成4. JVM工作流程5. 运行时方法区Runtime Data Area 二、深入JVM内存模型&#xff08;JMM&#xff09; 一、JVM 1. JVM的作用 Java代码编译成java字节码后&#xff0c;运行在JVM中&#xff0c;只要针对不同的系统…

保姆级讲解 Stable Diffusion

目录 本文讲解思路介绍 一、引入 二、Diffusion Model 三、原文的摘要和简介 四、Stable Diffusion 4.1、组成模块 4.2、感知压缩 4.3、条件控制 五、图解 Stable Diffusion 5.1、潜在空间的扩散 5.2、条件控制 5.3、采样 5.4、Diffusion Model 与 Stable Diffusion …

OnlyFans如何微信支付?订阅Onlyfans虚拟卡?OnlyFans订阅推荐指南教程

OnlyFans 订阅教程&#xff0c;手把手教你使用虚拟信用卡订阅 大家好&#xff0c;大家都在关心OnlyFans如何订阅怎么订阅&#xff0c;能不能用微信或者支付宝来订阅&#xff0c;首先微信是不行的&#xff0c;本文教大家如何在 Onlyfans 订阅和支付&#xff08;虚拟信用卡&#…