Linux --- 软件包管理器
1. 什么是软件包
在 windows 系统中可以安装软件,那么在 linux 系统里是否可以安装软件呢?当然可以。在Linux下安装软件,⼀个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是有些人把⼀些常用的软件提前编译好,做成软件包(可以理解成 windows 上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。
在linux系统中安装软件的常见方式:
1. 源代码安装
基本步骤:1. 获取源代码;2. 解压源代码包;3. 配置编译选项;4. 编译软件;5. 安装软件。这种安装方式每一个步骤都需要自己来完成(非常复杂)
2. rpm 包安装 --- 这种安装方式也不简单,需要我们取找rpm包,找哪种包,找到之后,输入相关的rpm包指令
3. 包管理器安装(推荐)
重点来介绍包管理器安装,首先什么是包管理器?它就相当于我们手机上的“应用商店”(包指的是软件包)。yum 就是一种非常常用的包管理器,主要应用在 Fedora,RedHat,Centos等版本;Ubuntu 主要使用 apt 作为包管理器。包管理器提供了自动解决依赖关系,下载和安装软件包的功能。
2. linux 软件生态
想要深入的了解包管理器,必须得要了解 linux 的软件生态。
如何评估一款操作系统的好坏?
一款操作系统的好坏,不仅在于它本身,还在于其系统生态。操作系统生态由社区论坛,官网文档,软件体系,维护更新速度,操作系统自身,富有针对性的用户群体六大部分组成。
操作系统被设计出来之后,最重要的事情是什么?
最重要的事情当然是让更多的人去使用它,那么怎么让更多的人使用这个操作系统呢?
形成对应的圈子,让这个圈子越来越大,越来越好,吸引更多的人进入这个圈子
既然要让圈子变得更大更好,自然就需要管理员去维护,建立各种社区,提供一些问题解决文档,资料等
操作系统都给你开源了,自然会有人愿意基于该操作系统上,编写适应不同的群体的特定的软件
平常我们下载指令或软件时,要安装的东西并不在云服务器上,而是从远端另一台云服务器上拉取下来的:
yum/apt 可以从指定的路径,去指定的软件包服务器中,去下载对应软件。现在问题来了,包管理器是怎么知道去哪个云服务器下载软件?
我们的云服务器中会内置配置文件,内置配置文件中包含目标软件包服务器的超链接(官网IP),通过这个超链接就可以找到目标软件云服务器
我们现在使用的 Centos 和 Ubuntu 发行版都是外国人写的,所以在设置内置配置文件时,里面设置的云服务器地址都是国外的服务器。如果以正常手段去访问国外的服务器,很大程度上会访问失败的,或者网速不稳定。为了让国内的用户也可以使用,一些强大的企业或者组织会将国外的软件包服务器中的软件包镜像到国内;与此同时,国内的云服务器厂商会将国外的内置配置文件中的国外的链接替换成国内的链接,软件使用的还是国外的只是安装软件时是去国内的软件包服务器。这种将国外的配置文件替换成国内的配置文件,称之为镜像源配置(软件源配置)。镜像是什么意思?通俗来讲就是拷贝的意思。这种软件源配置的工作,不需要我们去做(想做也可以做),因为有人替我们去做了。
前面提到,包管理器提供了自动解决依赖关系的功能,那么软件的依赖关系又是什么?它就和我们之前编写的 C 或 C++ 程序,要依赖头文件和标准库中的代码,我们使用的 Linux 的软件依赖的是别人的库。就像下图所示那样:
所以若使用源代码的方式安装软件,软件依赖的每一个库都需要安装,一旦某个库未安装,软件可能就使用不了。
3. yum 的使用
在 linux 安装软件时,需要注意的几个点:
1. 必须是特权级别
2. yum/apt 安装软件只能⼀个装完了再装另⼀个,不能同时安装多个文件
3. yum/apt 正在安装⼀个软件的过程中,如果再尝试用 yum/apt 安装另外⼀个软件,yum/apt会报错
搜索,安装,卸载软件都有对应的指令:
搜索软件:yum/apt list | grep 软件名(yum/apt list --- 将指向的软件服务器中的所以软件全部拉取下来)
安装软件:yum/apt install -y 软件名
卸载软件的指令:yum/apt remove -y 软件名
可以在网上搜索一下有趣的命令,尝试下载使用。我来提供一个有趣的命令 sl ,安装指令:yum/apt install -y sl 。
输入sl指令后,会在显示器上显示从右向左运动的蒸汽火车:
用户可以根据自己的需求,需要什么功能的软件,就通过AI生成对应的软件安装指令。若你尝试安装软件,有些软件可能会安装失败,这是正常现象。
前面尝试安装的软件属于娱乐软件,不属于开发类软件。
在对应的目标软件包服务器中,有一些软件被称为基础软件,这些软件都是官方的,稳定的。
对于一个新产生的软件,它并不会直接被纳入标准的软件包服务器中,而是纳入另一个软件包服务器,这个软件包服务器叫做扩展包服务器,并且云服务器中的内置配置文件也存在这个软件包服务器的超链接。
若扩展包服务器中的某些软件使用次数多了,更稳定了,就会迁移到标准软件包服务器中。若一个服务器长久时间不更新,软件包服务器中的一些链接可能会失效。
内置文件
前面多次提到内置文件,那么我们是否可以查看内置文件中的内容?可以。
内置配置文件在哪里?
Centos:在/etc/yum.repos.d/目录中
其中标准源和扩展源的文件名分别为:CentOS-Base.repo / epel.repo
查看内置配置文件中的内容步骤:
- cd /etc/yum.repos.d/
- ls -l
- less CentOS-Base.repo/epel.repo
Ubuntu:在/etc/apt/目录中
其中标准源和扩展源的文件名分别为:sources.list / sources.list.d
查看内置配置文件中的内容步骤:
- cd /etc/apt/
- ls -l
- less sources.list/sources.list.d
若我的 yum/apt 使用的是国外的镜像源,想切换成国内的;或者使用的是国内的镜像源,但是现在访问不了了,想要更新一下软件源,应该怎么做?以 Centos 为例:
1. 备份原有的源配置文件
2.(以阿里云为例)下载阿里云的 CentOS 7 yum 源配置文件
命令为:sudo curl -o /etc/yum.repos.d/CentOSBase.repohttps://mirrors.aliyun.com/repo/Centos-7.repo
如果系统没有 curl 命令,可以先安装它,安装指令为:sudo yum install -y curl
3. 更新软件包缓存
清理旧的缓存: sudo yum clean all
建立新的缓存: sudo yum makecache