浅谈Linux中的软件包管理器——基于ubuntu环境

devtools/2025/3/1 0:28:46/

文章目录

  • 1. 为什么要使用软件包管理器
    • 1.1 使用源码
    • 1.2 使用rpm安装包
    • 1.3 使用apt软件包管理器
  • 2. 如何使用apt
    • 2.1 软件的安装和卸载
    • 2.2 查找和搜素软件包
    • 2.3 更新并升级软件包
    • 2.4 清理缓存
  • 3. 从apt到系统生态

1. 为什么要使用软件包管理器

在Linux中,有三种软件安装方式。

1.1 使用源码

根据我们以往使用windows系统的经验,安装包本质上就是一个可执行文件,windows下的安装包,也就是用某个程序的源码在windows环境下编译得到的可执行程序。

类比到Linux中,我们想要安装软件,就可以拿到软件的源码,然后在Linux的环境下编译,得到一份可执行文件,然后通过运行这个可执行文件进行下载。

但是,这种方法难度过高,并不推荐,并且无法解决软件的依赖关系。
什么是软件的依赖关系呢?直白地说,软件往往不是单独存在的,一个软件的下载,往往不止下载这个软件自身,还要下载这个软件所依附的一些软件,即这个软件要借助其它的一些软件以实现其功能,这就是软件的依赖关系。

1.2 使用rpm安装包

rpm安装方式,实质上就是别人将软件的源码编译好,然后打包得到的安装包。

这种安装方式,虽然没有那么复杂,但是依然无法解决软件的依赖关系。

1.3 使用apt软件包管理器

在Linux中,使用apt软件包管理器既能下载软件本身,又能解决软件的依赖关系,是最为推荐的软件下载方式。

ubuntu中默认安装有apt软件包管理器。

在这里插入图片描述
apt软件包管理器的实质是什么呢?

在手机上,我们是如何下载应用的呢?我们打开手机的应用商店,应用商店里就提供了各种各样的软件安装包,我们要想下载某个软件,下载其中提供的软件安装包,最后安装即可。

apt软件包管理器相较于软件,就像手机上的APP之于应用商店的关系一样。
Linux中,所有的软件下载本质上都是到某些软件包服务器上进行下载,这些软件包服务器都是别人搭建好的。

使用apt软件包管理器下载某个软件时,apt就会向特定的软件包服务器发送下载请求,然后下载返回。此时,相应的软件下载好,同时软件所需的依赖关系也一并解决了。

你可能会疑惑,apt软件包管理器是如何找到这个软件包服务器的呢?实质上,apt中内置了一些软件包服务器的链接,下载软件时就会到这些链接所对应的软件包服务器上去查找相应软件,并下载。

在这里插入图片描述

2. 如何使用apt

2.1 软件的安装和卸载

使用apt时进行安装和卸载时,要么使用root账户,要么使用sudo进行权限提升,因为apt需要在某些要求管理员权限的目录下进行操作。

sudo apt install -y:后接具体要安装的软件名, -y 选项表示自动确认,无须手动确认。
sudo apt remove -y:后接具体要卸载的软件名, -y 选项表示自动确认。

2.2 查找和搜素软件包

sudo apt list : 列出所有可供安装的软件包,可以不使用sudo
sudo apt search : 后接关键字,会找到所有包含此关键字的软件包,可以不使用sudo

2.3 更新并升级软件包

sudo apt update : 用于从下载源处更新软件包索引,确保下载的软件包始终是最新版本的,但并不会实质性地更新已下载软件
sudo apt upgrade : 用于更新已下载软件,通常使用在update之后,可能无法解决某些软件更新后的新依赖关系
sudo apt full-upgrade : 对于upgrade无法解决的软件依赖的更新问题,可以使用 full-upgrade

2.4 清理缓存

在Linux中,下载的软件包通常会被存储在本地缓存中,清理缓存,实质上就是清理这些软件包,就像windows中软件安装好后,清理软件安装包一样。

通常情况下,不会将缓存全部清除,而是清理一些旧版本的软件包和一些不再被需要的依赖软件包。

sudo apt clean : 用于清理所有缓存
sudo apt autoclean : 用于清理旧版本的软件包
sudo apt autoremove : 用于清理不再需要的依赖包

3. 从apt到系统生态

通过前面的介绍,我们可以知道,apt这个软件包管理器,实质上是到相应的软件包服务器上去下载相应的软件包。而软件包服务器是需要维护的,软件包是需要不断更新的,而linux系统是开源的,并不是闭源的盈利性系统,那为什么会有人愿意自发地去进行维护呢?

这实际上设计到系统的生态问题。看一个系统优不优秀,并不是单单看这个系统本身,还要看与之相联系的许多东西。

在这里插入图片描述
所以,发展一个操作系统,实质上就是发展这个操作系统的生态,而软件体系,是操作系统生态中非常重要的一环。

一个操作系统的生态越好,使用这个操作系统的人便会越多,对这个操作系统的依赖性便会越强。

在这样的情况下,如果一个维护该操作系统生态的团队因为Linux开源的非盈利特性,而无以为继,这时,习惯并依赖于这个操作系统的个人、社会组织乃至公司,就会采用募捐等方式为这个团队筹集资金,使之能够继续维护该操作系统的生态。

所以,Linux的开源,本质上也是一种商业模式,并不会因为开源而导致操作系统的生态无人维护和发展。

在这里插入图片描述


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

相关文章

Python学习第十七天之PyTorch保姆级安装

PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网,找到安装指令 5. 验证pytorch是否安装成功 四、…

火语言RPA--Excel设置列宽

【组件功能】:为Excel内指定列设置列宽 配置预览 列名 支持T或# Excel文档的列名,从字母A开始。 列宽样式 指定列宽:指定列宽数值 内容自适配:根据内容自动设置列宽 列宽 支持T或# 列宽值单位字符宽度,一个汉字两…

【deepseek】本地部署+RAG知识库挂载+对话测试

文章目录 前言一、Deepseek模型下载(以7B为例)二、RAG本地知识库挂载三、创建本地对话脚本四、结果展示 前言 本文主要涵盖Deepseek在ubuntu系统中的部署全流程,包括模型的下载、系统部署、本地文档向量化、向量列表存储、RAG知识库挂载、对话测试等内容 一、Deeps…

二、IDE集成DeepSeek保姆级教学(使用篇)

各位看官老爷好,如果还没有安装DeepSeek请查阅前一篇 一、IDE集成DeepSeek保姆级教学(安装篇) 一、DeepSeek在CodeGPT中使用教学 1.1、Edit Code 编辑代码 选中代码片段 —> 右键 —> CodeGPT —> Edit Code, 输入自然语言可编辑代码,点击S…

CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用

话不多说直接上图举例: 像在 ResNet 的 Bottleneck 结构 中,1x1 卷积 被放置在 3x3 卷积 的前后,这种设计有以下几个关键作用和优势: 1. 降低计算复杂度 问题:直接使用 3x3 卷积计算量较大,尤其是当输入和…

Selenium 不同语言绑定版本的官方操作文档获取途径(科学上网)

Selenium 不同语言绑定版本的官方操作文档获取途径 Selenium 是一个强大的自动化测试工具,支持多种编程语言绑定。以下为你详细介绍不同语言绑定版本的官方操作文档获取途径。 一、Python 语言绑定 1.1 官方文档 地址:Selenium Python 官方文档内容概…

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-Docker助力-模型部署 “光速” 指南

一、前言 在人工智能的浪潮里,大语言模型不断迭代更新,DeepSeek-R1-Distill-Qwen-7B 模型凭借出色的表现,吸引着无数开发者的目光。然而,想要将这个强大的模型顺利部署并投入使用,过程却并不轻松。传统的部署方式仿佛布满荆棘,从底层环境搭建到各种依赖项的适配,每一步都…

【leetcode hot 100 238】移动零

一、暴力解法&#xff1a;循环数组&#xff0c;如果0则放到最后 class Solution {public void moveZeroes(int[] nums) {int k0; // 0的个数// k为已经发现0的个数&#xff0c;只要将已经找出的0的前面的数for(int i0; i<nums.length-k;){if(nums[i]0){// 移动k;// k为已经…