笔记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.mfbz.cn/a/442888.html

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

相关文章

比较JavaScript中的for...in和for...of循环

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Unity 让角色动起来(动画控制器)

下载素材&#xff1a; 导入后&#xff0c;找到预制体和动画。 新建动画控制器&#xff0c;拖动到预制体的新版动画组件上。 建立动画关系 创建脚本&#xff0c;挂载到预制体上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public c…

git分布式管理-头歌实验搭建Git服务器

一、Git服务器搭建 任务描述 虽然有提供托管代码服务的公共平台&#xff0c;但是对一部分开发团队来说&#xff0c;为了不泄露项目源代码、节省费用及为项目提供更好的安全保护&#xff0c;往往需要搭建私有Git服务器用做远程仓库。Git服务器为团队的开发者们&#xff0c;提供了…

netty草图笔记

学一遍根本记不住&#xff0c;那就再学一遍 public static void test_nettyFuture() {NioEventLoopGroup group new NioEventLoopGroup();log.info("开始提交任务");Future<String> future group.next().submit(() -> {log.info("执行异步任…

【操作系统概念】第11章:文件系统实现

文章目录 0.前言11.1 文件系统结构11.2 文件系统实现11.2.1 虚拟文件系统 11.3 分配方法11.3.1 连续分配11.3.2 链接分配11.3. 3 索引分配 11.5 空闲空间管理11.5.1 位图/位向量11.5.2 链表11.5.3 组 0.前言 正如第10章所述&#xff0c;文件系统提供了机制&#xff0c;以在线存…

计算机设计大赛 疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据全国疫情数据分析与3D可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff0…

Halcon深度学习,异常值缺陷检测

前言 halcon深度学习分为常见的4大类。分类&#xff0c;语义分割&#xff0c;异常值检测&#xff0c;深度OCR。本篇主要针对halcon的异常值检测&#xff0c;如何训练和部署&#xff0c;并通过图像预处理的方式实现对异常值缺陷检测的精准实现。 异常值检测不同于语义分割的项目…

【python】异常处理

前言 省略各种废话&#xff0c;直接快速整理知识点 try-except 基础 作用 程序不可能永远都是对的&#xff0c;当7除a&#xff0c;a由用户输入时&#xff0c;用户输入0就会报错。try-except就是解决这些问题。 结构 多分支自定义错误类型 上方的exception是一个错误类型…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用&#xff0c;可能添加脚本后要手动拖动&#xff0c;这样如果有大量的脚本拖动也是不小的工作量 实例 例如&#xff1a;我的脚本需要添加一个Bone的列表&#xff0c;一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

Python 3 教程(2)

Python3 基础语法 编码 默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码&#xff1a; # -*- coding: cp-1252 -*- 上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码&…

JavaSec 基础之 URLDNS 链

文章目录 URLDNS 链分析调用链复现反序列化复现 URLDNS 链分析 URLDNS是ysoserial里面就简单的一条利用链&#xff0c;但URLDNS的利用效果是只能触发一次dns请求&#xff0c;而不能去执行命令。比较适用于漏洞验证这一块&#xff0c;而且URLDNS这条利用链并不依赖于第三方的类…

幕译--本地字幕生成与翻译--Whisper客户端

幕译–本地字幕生成与翻译 本地离线的字幕生成与翻译&#xff0c;支持GPU加速。可免费试用&#xff0c;无次数限制 基于Whisper&#xff0c;希望做最好的Whisper客户端 功能介绍 本地离线&#xff0c;不用担心隐私问题支持GPU加速支持多种模型支持&#xff08;中文、英语、日…

web服务,C/S框架,单设备登陆实现方案

背景: 原登陆接口,校验密码通过后,使用springsession记录会话信息,将信息存入在redis中 基于原逻辑进行多设备登陆开发,默认的时候多设备登陆开关开启,即按原来逻辑处理,只要密码登陆校验成功之后,都会将当前的会话信息存入redis中. 当多设备开关关闭时候,同一个账号同一时间只…

Vue.js+SpringBoot开发高校大学生创业管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…

【Spring Boot 源码学习】BootstrapContext的实际使用场景

《Spring Boot 源码学习系列》 BootstrapContext的实际使用场景 一、引言二、往期内容三、主要内容3.1 BootstrapContext3.2 BootstrapRegistry 初始化器实现3.3 BootstrapContext 的实际使用场景3.3.1 早期启动时3.3.2 环境配置准备完成时3.3.3 应用上下文准备完成后关闭 Boot…

Normalizer(归一化)和MinMaxScaler(最小-最大标准化)的区别详解

1.Normalizer&#xff08;归一化&#xff09;&#xff08;更加推荐使用&#xff09; 优点&#xff1a;将每个样本向量的欧几里德长度缩放为1&#xff0c;适用于计算样本之间的相似性。 缺点&#xff1a;只对每个样本的特征进行缩放&#xff0c;不保留原始数据的分布形状。 公式…

Linux--gdb(调试工具)

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 命令 gdb binFile 退出&#xff1a; ctrl d 或 quit 调试命令&am…

如何压缩PDF文件大小?看完这篇文章,即可实现无损压缩!

平时工作或生活中&#xff0c;很多小伙伴是不是经常喜欢用PDF格式进行文件的保存&#xff0c;毕竟它具有较高的兼容性&#xff0c;且在不同设备中打开也不会出现排版错乱的情况。不过有时候PDF文件会因为内容过大&#xff0c;占用的内存过多&#xff0c;从而导致电脑卡顿的情况…

深入理解MySQL中的MVCC(多版本并发控制)

在MySQL中&#xff0c;MVCC是一种用于提供并发控制的技术&#xff0c;它允许数据库系统在事务并发执行的情况下保持数据的一致性&#xff0c;同时提高了数据库的并发性能。MVCC背后的理念是允许每个事务可以看到一个一致性的快照&#xff0c;从而避免了读取操作被写入操作所阻塞…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…