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

文章目录

  • [1. 为什么要使用软件包管理器](#1. 为什么要使用软件包管理器)
    • [1.1 使用源码](#1.1 使用源码)
    • [1.2 使用rpm安装包](#1.2 使用rpm安装包)
    • [1.3 使用apt软件包管理器](#1.3 使用apt软件包管理器)
  • [2. 如何使用apt](#2. 如何使用apt)
    • [2.1 软件的安装和卸载](#2.1 软件的安装和卸载)
    • [2.2 查找和搜素软件包](#2.2 查找和搜素软件包)
    • [2.3 更新并升级软件包](#2.3 更新并升级软件包)
    • [2.4 清理缓存](#2.4 清理缓存)
  • [3. 从apt到系统生态](#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的开源,本质上也是一种商业模式,并不会因为开源而导致操作系统的生态无人维护和发展。

相关推荐
小麦嵌入式41 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
刘若水43 分钟前
Linux: 进程信号初识
linux·运维·服务器
阳小江2 小时前
Docker知识点
运维·docker·容器
只是橘色仍温柔3 小时前
xshell可以ssh连接,但vscode不行
运维·vscode·ssh
IT里的交易员3 小时前
【系统】换硬盘不换系统,使用WIN PE Ghost镜像给电脑无损扩容换硬盘
运维·电脑
共享家95273 小时前
深入剖析Linux常用命令,助力高效操作
linux·运维·服务器
大刘讲IT3 小时前
制造业数字化转型:流程改造先行还是系统固化数据?基于以MTO和MTS的投资回报分析
运维·经验分享·生活·产品经理·数据可视化
跳跳糖炒酸奶3 小时前
第四章、Isaacsim在GUI中构建机器人(1): 添加简单对象
人工智能·python·ubuntu·机器人
Zfox_3 小时前
【C++项目】从零实现RPC框架「四」:业务层实现与项目使用
linux·开发语言·c++·rpc·项目
吃旺旺雪饼的小男孩4 小时前
Ubuntu 22.04 安装和运行 EDK2 超详细教程
linux·运维·ubuntu