Ubuntu软件包管理

ppgo8 于 2022-12-05 发布

Ubuntu软件包管理

软件包软件

​ 软件包是一种软件进行打包的方式,在不同的操作系统中安装包的形式有很大区别。在Windows操作系统中软件包一般以安装程序的形式出现,比如QQ安装包、微信安装包。

Ubuntu软件包管理简介


​ 整个Linux操作系统都是由内核加上大量的软件包构成的,因此Linux操作系统中,软件包的管理非常重要。同时,软件包之间可能存在大量依赖、冲突等关系,单纯手动管理很可能造成依赖损坏、安装冲突乃至系统崩溃。所以,Linux发行版本中都要类似的软件包管理方式。常见的软件包管理方式分为以下三类:

​ Ubuntu操作系统提供了应用商店,可以对一部分软件包进行管理,常用的软件都可以应用商店中进行安装、升级、卸载等操作。

同时,Ubuntu也可以采用类似Windows操作系统的方式,下载二进制安装包进行安装,比如前面提到WPS office软件。

软件源


​ 通常Ubuntu操作系统常用的软件包按照一定的结构存储在一组网站中,这样的网站叫做软件源。常见的Ubuntu软件源有阿里、网易、搜狐等商业公司,中国科技大学、清华大学、北京理工大学。用户可以挑选国内的软件源进行软件包管理,安装时能够获取更快、更稳定的下载速度。

​ 在Ubuntu操作系统中,软件源信息保存在/etc/apt/sources.list文件中。

​ 修改软件源直接替换上述事例中的sources.list文件的内容即可,常用的软件源可以参考Ubuntu中文网

dpkg命令

​ Ubuntu操作系统是Debian发行版中非常重要的一个分支,Debian系发行版本都会包含一个dpkg的包管理工具。

dpkg简介


​ 最初的Linux操作系统平台上,最常见的打包方式是TarBall格式,用户需要对文件进行解包、编译、安装等工作,繁琐易错。随着Debian发行版的诞生,第一款真正意义上的包管理工具dpkg随之诞生。

​ dpkg是基于Debian系发行版软件包管理器的基础,主要对用户安装、卸载、打包、解包和对软件包进行管理。

​ dpkg命令作为底层的包管理工具,提供了很多选型:

dpkg命令,常见选项:
-i:安装本地deb格式安装包
-unpack:解包本地deb格式安装包
-r:移除指定软件包
-P:彻底删除指定软件包
-p:显示指定安装包可安装的软件版本
-V:检查包完整性
-s:显示指定软件包的详细状态
-l:列出所有软件包的状态
-L:列出属于指定软件包的文件

dpkg安装软件包


​ dpkg主要用来管理deb包,比如前面提到的wps office的安装。可以直接双击使用应用商店安装,也可以使用dpkg命令进行安装。

image-20221127222849018

dpkg删除软件包


​ 使用dpkg删除软件包分为两个步骤

image-20221127224011148

apt-get命令

​ dpkg管理工具功能已经足够强大,但是其只能管理本地的软件包,而且不能很好的软件包之间的依赖关系。APT(Advanced Packing Tool)在dpkg的基础上,运用了快速、实用、高效的方法来安装软件包,当软件包更新时,还可以自动管理关联文件和维护已有配置文件。apt-get和apt都是常用的APT提供的软件包管理命令。

​ apt-get可以安装、更新、删除软件包。

apt-get简介


​ apt-get命令能够在软件源中检索到目标软件包,并处理软件包安装、卸载中产生的依赖问题。Ubuntu的应用商店在后端即使用apt-get命令对软件包进行管理。

​ apt-get采用主命令加辅助命令的方式执行,基本语法如下:

apt-get 选项 辅助命令
常用选项:
-d : 只下载软件包,不解压、不安装下载的软件包
-f : 修复已安装软件包的依赖关系
-y : 对于需要用户确定的请求,全部以yes回答
-c : 指定apt-get命令默认配置文件之外的配置文件
-o : 更改某一项或几项配置文件内容
常用辅助命令:
install : 安装一个或多个软件包
update : 同步本地和软件源之间的软件包索引
upgrade : 升级软件包
remove : 删除指定软件包
autoremove : 删除指定软件包,并处理该软件包的依赖关系
purge : 彻底删除指定的软件包,包括配置文件等内容
check : 检查软件包依赖关系是否损坏
clean : 清楚软件包本地缓存

apt-get安装软件包


​ apt-get命令可以直接从软件源中下载软件包并完成安装,在安装的过程中必须保证Ubuntu操作系统处在联网状态。

​ 下面以Chromium浏览器为例演示如何使用apt-get完成软件包的管理。Chromium是Chrome浏览器的开源版本,所有Chrome功能都会首先在Chromium上进行测试。

image-20221127231150272

apt-get更新软件包


​ 由于apt-get使用的是本地软件包索引,而且该索引通常不会自动更新,所以在进行软件更新之前,需要先更新本地软件包索引

image-20221201104551288

​ 软件包索引更新完毕后,可以使用upgrade辅助命令更新系统软件包。

image-20221127232043627

apt-get删除软件包


​ 使用apt-get命令删除软件包有多个辅助命令可以使用,最常用的是autoremove和purge两个命令。autoremove可以自动处理依赖关系,尽量保证软件包删除后对系统中的其他软件包共用的依赖造成的危害小;而purge则可以彻底将软件包删除,包括配置文件等内容。

image-20221127232927690

snap包管理工具

​ 为了解决日益严重的软件依赖问题,Ubuntu基金会开发了一种新的包管理模式,即snap包管理方式。

snap简介


​ snap是一种全新的软件包管理方式。snap类似一个容器,这个容器包含一个应用程序所有的文件和库并且各个应用程序之间完全独立。使用snap的好处就是解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是占用更多的磁盘空间。

​ snap使用软件商店(snap store)管理软件包,同时提供了用户登录功能。登录后的用户将获得更多的功能支持。比如可以直接管理其安装的snap软件包,而不需要使用root权限进行管理。不登录的情况下必须使用root软下才可以对软件包进行安装和删除。

​ snap的安装包拓展名是.snap。管理snap包使用的是snap命令,与常见的软件包管理工具相同,snap工具也包含搜索、安装、更新、删除等功能。snap不同功能的实现同样依靠丰富的辅助命令。

find :    搜索指定软件包
list :    列出系统中已经安装的snap软件包
install : 安装指定的软件包
refresh : 更新指定的软件包,如果没有指定软件包名称,则更新所有软件包
revert :  还原软件包到上一个版本
remove :  删除指定的软件包
login :   登录
logout :  退出
buy :     购买指定的软件包

snap安装软件包


​ 使用snap命令安装软件包和apt-get命令类似,需要使用install辅助命令,同时会在snap store中搜索指定的安装包。这里以“hello” 软件包为例,演示软件包的安装。“hello”软件包可以输出Hello,world!字符串。

snap更新软件包


​ snap命令可以直接使用refresh辅助命令更新某个软件包,在不指定安装包时,也可以一次性更新所有软件包。

snap删除软件包


​ snap同时可以删除软件包,但是只能删除snap包,比如上述安装的hello包。

image-20221201120640874

TarBall格式软件包

​ Ubuntu等发行版都提供了方便的包管理工具,但是作为最原始的软件管理方式,TarBall依然活跃在当前所有的Linux平台之上。

源代码及可执行文件


​ 程序员编写的程序通常以文本文件的格式进行存储,这些文本文件就是软件的源代码。

​ 源代码通过编译后可以生成可执行文件。可执行文件是指系统可以运行的程序,通常是二进制文件。在Windows平台上,可执行文件一般以.exe为后缀;在Linux平台上,可执行文件并没有固定的后缀,甚至没有后缀,而是看该文件在当前用户下是否有可执行权限。

gcc编译工具


​ gcc(GUN Complier Collection,GNU编译器套件)是由GUN开发的编程语言编译器,是GNU计划的关键部分。gcc原本作为GNU操作系统的官方编译器,现已被大多数类UNIX操作系统采纳为标准的编译器,gcc同样适用于微软的Windows。

​ 首先需要安装gcc,在使用apt-get安装gcc时报错,无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。参考链接解决上述问题,成功安装。

TarBall格式软件包安装


​ 以python源码安装为例延时如何使用TarBall进行源代码编译安装。以python 3.9.1为例,从源码安装软件包大约需要如下几步: