linux发行版本不同于其他系统的最大的一个点就是软件包管理器。这里您将了解到什么是软件包,什么是软件包管理器,它们是如何工作的,以及现有的可用的软加包管理器。
Linux中的软件包管理器是什么?
简单的解释就是,软件包管理器能够让用户在开源系统中对软件进行安装,删除,更新,配置以及管理等操作的工具。软件包管理器可以是图形应用就像是软件中心,也可以是命令行工具就像是apt-get或者pacman。
什么是软件包?
软件包通常指的就是应用程序,但是也可以是图形界面程序,命令行工具或者软件库(被其他的软件所依赖的),一个软件包本质上包含了二进制执行文件,配置文件有时候会有依赖信息的封装文件。
在早年间,软件的安装通常是通过源码完成的,您可能需要参考一个文件(通常被命名为readme)然后瞅瞅需要什么软件组件以及二进制文件的位置。一般来说包含配置脚本文件以及生成文件,您需要自己编译软件有时候还需要自己解决依赖问题(有些软件的安装是需要其他软件配合)。
为了解决这个麻烦事,linux的发行版本创造了独特的软件安装形式,为想要安装有元数据(版本号,描述)以及依赖的软件的用户,提供了可直接使用的二进制文件(提前编译好的)
一个形象的比喻就是,你想吃蛋糕,你可以自己买原材料做一个,但也可以直接买现成的。
大概在九十年代中期,debian创造了.deb(DEB)为后缀的软件安装包,red hat创造了.rpm(RPM)后缀的软件安装包。编译源码的安装方法仍然存在,但是已经变成了一个选项,而且不是必选项。
软件包管理器如何工作
提前说明白了,软件包管理是一个通用的概念,并不是linux独有的,对于不同的软件和编程语言你都可以找到软件包管理器,就比如pip就是python的软件包管理,甚至是Atom文本编辑器都有自己的软件包管理器。
上图看看软件包管理器如何工作(基于SUSE)
几乎所有的linux的发行版本都有软件库,这个库基本上就是软件的集合。是的,因为linux的版本多,所以软件库已经不止一个了,在软件库里,一般都包含一个软件的不同版本。
软件库里面还有一些元数据文件,这些文件一般包括软件包的一些信息(软件包的名字,版本号,描述性文件以及库的名字等等)
您的软件包管理器首先会与元数据进行交互,之后会在您的系统里生成一个元数据的本地缓存,当你运行软件包管理器的更新指令的时候(就比如apt update命令),它就会通过软件库中的元数据来更新本地的元数据缓存。
当您运行安装命令时(就比如apt install),管理器就会自动指向之前的本地元数据缓存,如果它能够在缓存中找到安装包的信息,它就会使用网络连接去链接到合适的软件库,并会在您的系统上安装这个软件之前首先下载这个软件包。
一个软件包可能会有一些依赖,这意味着您需要安装一些其他的软件包,软件包管理器会注意到这些依赖,之后自动安装您要安装的软件。
相似地,当您要使用软件包管理器删除软件时,它会自动删除,或者告诉您系统里哪些是可以删除的未被使用的包。
除了安装,删除软件的基本功能以外,管理器还可以根据您自己的需求配置和管理软件包。例如,您可以控制一些软件的日常的更新版本,软件包管理器还可以干很多的事情。
软件包管理器的不同种类
不同的系统可能会有不同的软件包管理器,但是一个系统也可以拥有不止一个软件包管理器。
例如,对于rpm文件的使用就可以通过yum或者dnf软件包管理器,而对于deb文件,您具有基于apt-get以及aptitude的命令行软件包管理器。
软件包管理器并不是说一定要基于命令行,你还可以选择图形界面软件包管理器工具就像是Synaptic,您使用的发行版本自带的软件中心也是软件包管理器,即使它在背后运行apt-get或者DNF命令。
源:https://itsfoss.com/package-manager/
翻译:daxuxu
排版:daxuxu
公众号:archlinux
多多关注