Linux:软件包管理器 - yum
- Linux的软件安装方式
- 源代码安装
- rpm包安装
- yum安装
- yum三板斧
- yum list
- yum install
- yum remove
- yum生态
- yum源
Linux的软件安装方式
源代码安装
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序
源代码安装是最初的安装方式,在安装一个程序的过程中,我们要经历以下过程:
- 找到所需的源代码
- 挑选自己合适的版本
- 自己对代码编译运行(如果代码兼容性差,还要自己改)
可见该方法安装一个软件包代价有的多高,因此现在几乎不使用这种方法安装。
rpm包安装
把一些常用的软件提前编译好, 做成软件包放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装
这种的rpm包,就是已经把代码编译好了,我们可以直接下载下来然后进行安装。但是这也会遇到问题,比如这个编译好的rpm包运行时可能需要其它的库,比如C语言库,C++库等,如果你的Linux上面没有这种库,那就要额外地下载。或者有软件之间的依赖关系,一个软件想要运行,必须同时有其他的软件。
yum安装
与之前两种安装方式不同的是,yum的安装是全自动化的,完全不需要你操心任何一个过程,其可以自动判断一个软件要去哪个地方下载,自动下载好配套软件。因此yum是当前主流的软件安装方式。
接下来我先讲解yum的基础指令,然后再深入yum相关的生态体系。
yum三板斧
yum list
如果我们直接使用yum list
,会列出所有可以下载的软件,这会导致大量刷屏。一般而言,我们会有目的的下载某一个软件,比如我现在要下载一个叫做lrzsz
的软件。我们要用grep
进行筛选,选出带有lrzsz
字段的软件。
在此我输入yum list | grep lrzsz
:
我们就搜到了自己想要的软件,x86_64
表示该软件在64位计算机中运行。 0.12.20-36.el7
是版本号,el
表示CentOS
,el7
就表示CentOS7
。base
表示软件的提供方。
一般而言,软件的提供方有两种,base
和epel
。
base
:基本软件源,这里面的软件都是经过筛选,比较稳定的软件epel
:扩展软件源,一般都是新软件,这些软件刚发布需要经过一定时间的测试,来发现一些问题,当epel
内部的软件经过一定时间后变得稳定了,而且比较好用,就会进入base
yum install
当我们找到一个软件,就可以进行下载了。语法为yum install xxx
,也就是下载xxx
软件。
我这里下载lrzsz
,执行yum install lrzsz
:
其没有直接给我们下载,而是向我们展示了这个软件的相关信息,比如版本,名称,软件也,大小等等,然后向我们确认是否安装此软件。
如果你不希望它询问,那么就输入-y
选项,这样就会直接下载了,yum install -y lrzsz
:
最后显示complete!
就说明下载成功了
yum remove
如果你想删掉一个软件,那就执行yum remove xxx
命令。
比如我要删掉lrzsz
,执行yum remove lrzsz
:
同样的,会向你展示该软件的信息,然后向你确认是否删除。如果不希望它询问,直接删除,加上-y
选项即可。
yum生态
在使用yum时,你可以从别人的服务器上下载各种软件,那么你有没有想过,这些服务是谁提供的?为什么你可以免费的使用别人的服务?
一个系统用的人越多,其社区的活跃度就越高,存在的问题就越容易暴露出来。而因为人多,问题暴露出来就会有更多的人去解决问题。同样的,人多的操作系统软件就更加全面,专业人士也更多。相应的,当一个操作系统的人越来越多,那么也就会吸引越来越多的人,公司,组织去使用这一款操作系统。
而为了吸引不同的人去使用一款操作系统,很多操作系统都有自己的特点。比如说当前Linux的版本就有Ubuntu,CentOS,Debian等等,它们的Linux内核几乎没有差别,区分开它们的是社区。比如说Ubuntu大部分被学生使用,CentOS大部分被公司以及开发者使用。那么Ubuntu社区中的人们,就会更加广泛的提出以及解决学习方面的问题,而CentOS社区更注重实际开发方面的问题。久而久之各个版本的操作系统之间社区就建立了起来,一个用户选择操作系统时,就会去了解这个社区,比如这个人对网络安全感兴趣,对实际开发感兴趣,那么他就会选择不同的系统。
一个社区的既得利益者,比如公司,组织,学生,开发者。他们都不希望自己的社区倒下,公司为了让自己的系统更加稳定,开发者为了自己写的代码可以被看到,学生为了自己的问题可以及时被解决。于是他们就会想办法来维护社区,让社区越来越好,这样自己也就能从中获取更多的利益。
那么回到最初的问题,我们的yum要去别人的服务器中下载软件,服务器谁提供的?这有很多种形式,比如开源组织自己购置的,公司为了维护社区提供的,等等。总而言之就是为了让社区存活下去,既得利益者会提供这样的服务。那么开源组织明明开源,那就应该不收费啊,为什么还有钱来购置服务器?对,我们使用Linux这样的系统是不收钱的,从中下载软件也不要钱,开源组织不从我们手上收钱。很多使用Linux的公司,它们希望Linux可以发展的越来越好,那么他们就会向开源组织捐赠。开源组织不对他们提供的服务收费,但是他们可以接收捐赠,因此开源组织是有钱的,甚至是盈利的。
服务器的来源知道了,那么软件又是谁提供的呢?Linux社区这么多人,自然就有人愿意出来提供开源服务,把自己写的软件进行开源。另外的,Linux有多个版本,多个社区。如果有一天Ubuntu推出了一个很好用的软件,CentOS社区的用户看到了,发现CentOS没有这样的软件。于是CentOS社区的人直接把Ubuntu的该软件的代码拷贝过来,改改就变成了可以在CentOS下运行的软件,然后发行到CentOS上。反正都是开源项目,我们社区直接抄你们社区的代码也是合法合规的。因此很多软件只要一个Linux版本下出现了,其他版本也很快就会有对应的软件。再比如现在很多开源网站,知名的清华源等,它们也是直接拷贝一些国外的开源代码,方便国内的用户使用,反正都是开源的,我就算把所有的资料都拷贝走,也是合法合规的。
yum源
那么yum是如何知道要去哪里下载软件的呢?
我们可以找到/etc/yum.repos.d/
下面的文件:
repos
表示仓库,d
表示目录,在改目录下,会存储大量的网址,yum会到对应的网址内部查找软件,并且筛选合适的版本自动下载到你Linux主机上。
比如这是CentOS-Base.repo
内部:
可以看到内部有很多的连接,Linux就是到这些连接内部下载软件的。
这些称为yum源
,在此常用的软件源有阿里云
,网易
,清华源
等等,在此我为大家示范一个yum源的更新。环境为CentOS,使用的yum源是阿里云,这里需要root
权限。
首先跳转到yum源所处目录下:cd /etc/yum.repos.d/
先把我们当前的CentOS-Base.repo
进行备份,备份为CentOS-Base.repo.backup
,以免后续还需要进行恢复。
cp CentOS-Base.repo CentOS-Base.repo.backup
然后从阿里云下载新的yum源:
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
此时我们目录下的CentOS-Base.repo
文件就已经被更新了。
更新yum源后,需要清除yum缓存,以便系统能够识别新的yum源文件。可以使用以下命令清除yum缓存:
yum clean all
清除yum缓存后,需要更新yum缓存,以便系统能够识别新的yum源文件中的软件包信息。可以使用以下命令更新yum缓存:
yum makecache
更新yum源后,可以使用以下命令测试新的yum源是否可以正常工作:
yum list
如果没有出现错误,并且软件包列表与预期一致,则表示新的yum源已经更新成功。
更新yum源是维护CentOS系统安全和稳定性的重要步骤。在更新yum源之前,应该备份当前的yum源,以防止出现问题。同时,应该从可靠的站点下载新的yum源文件,并清除和更新yum缓存,以保证系统能够正常使用更新的yum源文件。