Linux软件的安装和管理
为了不增加入门难度,本节掌握yum的用法就可以了,其他知识作为阅读扩展。
Linux下的软件包基本分为两种,源码包和二进制包。
源码包就是编写好的源代码,若在系统上运行则需要编译成二进制文件后才能运行。
这也是最原始的Linux应用安装方式。
所以,有一些门槛,不过现在一般有二进制包的软件,都会有编译安装的说明,
按说明操作即可,并不难。
但编译的过程就比较耗时了,具体时间和软件大小、硬件性能有关,不好预测。
这样的大问题当然是要解决的呀!
前辈们在对Linux不断的完善和优化中趟出一条路。
就是用标准环境下编译的二进制包。
二进制包,就是将编译后的二进制文件打包
估计有同学想了,不就是编译后的文件打包么,多大点事儿!
那么我们来看下这个问题。
编译安装有一个好处:
就是在你当前使用的系统环境下编译和使用,一定可用的,不用去考虑环境的兼容性。
但如果你将你的这个编译好的二进制文件拷贝到其他电脑,并不是一定就可以运行的。
其他电脑的系统版本和系统里面的一些库文件,不一定和你的电脑一样。
在上面一运行就会产生大量错误,缺少一大堆文件,还有一些版本不支持信息。
而很多文件还是系统运行依赖的文件,你就没法去更改,说不定改完,系统就无法启动了。
可能折腾大半天,最后还是得重新编译安装。
但如果所有人都通过编译安装来在Linux上面安装软件的话,
每个人所耗费的时间暂且不说,还耗费了大量的算力,耗费算力也就意味着耗费电力,
耗电也就意味着耗费能源,能源在如今这个时代的重要性自然不用多说。
而我个人觉得最大的浪费还是在时间上,每个人都在这个上面耗费一点时间,
那加起来将是非常非常非常多的时间。
那么现在,如果是你,你会如何解决这个问题呢?可以思考下。
事实上,也没有什么巧妙的方法,还是要去编译二进制包。
在每个发布Linux标准的版本环境下面去编译,编译完成后打包放到系统镜像里面。
前面我们推荐系统版本的时候,看到了一个系统版本发布的时候会有很多镜像文件。
为什么我们选这个DVD版本,而不选其他版本呢?
就是因为DVD是标准版本,里面包含大量的常用软件包。
注意
这里只是包含 并不是安装系统就会被安装。
而其他,除了Everything版本里面包含更多的软件包以外,基本被标准版本囊括在内了。
因此,系统镜像里面不仅有系统,还有很多编译打包好的常用的软件的二进制安装包。
这么多的安装包,如何管理自然就成了问题,前辈们就开发了二进制包管理系统。
目前主要有 2 大主流的二进制包管理系统:
- RPM 包管理系统:功能强大,安装、升级、査询和卸载都非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
- DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
两种二进制包管理系统基本大同小异,这里就不分别介绍了。
我们使用的是CentOS,所以,本章节就以此为出发点来介绍CentOS下的软件安装和管理。
RPM包管理系统中,二进制包文件主要以 .rpm 后缀结尾,
命名的一般格式如下:
包名-版本号-发布次数-发行商-Linux系统版本-适合的硬件平台-包扩展名
RPM包的基础命令是:
rpm
大家需要的话,可以通过 --help 参数 或 搜索引擎去了解详细用法。
这里我们来讲一个基于RPM包,但比rpm命令更好用的命令,就是本篇开头要掌握的命令:
yum
yum命令能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 语法
yum [options] [command] [package ...]
- options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
- command:要进行的操作。
- package:安装的包名。
yum常用命令
列出所有可更新的软件清单命令:
yum check-update
更新所有软件命令:
yum update
仅安装指定的软件命令:
yum install <package_name>
仅更新指定的软件命令:
yum update <package_name>
列出所有可安裝的软件清单命令:
yum list
删除软件包命令:
yum remove <package_name>
查找软件包命令:
yum search <keyword>
清除缓存命令:
yum clean
清除缓存目录下的软件包及旧的 headers
yum clean all
yum 源
yum源是指我们使用yum命令安装软件时使用的软件包所在的地址。
设置文件为在/etc/yum.repos.d/ 目录下,包含CentOS-Base.repo 和其他 repo 文件
默认文件内容如图:
我们可以看到有两个变量的设置的带有链接的,分别是mirrorlist 和 baseurl ,
但 baseurl 被 # 注释了。我们先看下mirrorlist 这个链接:
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
我们用rpm命令查询的系统版本:rpm -qi centos-release
release是系统的Version,$releasever值应该是 7
arch是Architecture,$basearch的值应该是x86_64
infra好像没看到相关信息,先不管了,现在链接变成了:
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=$infra
把链接粘到浏览器里打开:
我们看到了一列地址,除了网址不同,结尾基本都是/centos/7.9.2009/os/x86_64/
随便选中一行,右键,“转到、、、” 打开链接
如果你打开过下载的CentOS系统iso镜像,你就会发现这不就是镜像里面的内容么。
但这个版本为什么这是7.9呢?
这是因为在7这个大版本里面,7.9是最新的系统版本。
系统默认软件源一般都是默认大版本中最新的版本,就像我们windows系统更新一样。
但是,Linux下的软件包非常多,而且很多包之间会有依赖关系。
就好像你在windows下安装有些游戏时需要安装VC++运行环境和DirectX一样。
而且,一些软件依赖对版本也有一定的要求。
主要就是因为 Linux系统版本一直在不断的发展、完善和迭代,
这导致了各个软件包开发和在适配系统的过程中版本也需要不断的更新迭代。
所以,现如今几乎每个系统版本都对应了一个版本的软件包。
系统版本相差不多的时候大部分情况下还是比较通用的,基本是兼容的。
但有一些关键的软件包,对版本要求是很严格的。
一旦遇上了这种问题,通常都会很麻烦。
如:很多软件都依赖的一些基础软件包,版本对不上你要安装的软件就安装不了,
会报依赖错误,而卸载更换版本又会导致已经安装的软件出现问题,
甚至一不小心把系统弄崩了,又搞不清楚问题在哪里,就只能重装系统了。
所以,为了稳定性,生产环境一般都是不能随意更新升级软件包的。
但网络源都是最新的系统镜像源啊,那怎么办呢?
其实也是有旧版本的系统镜像源的,
比如在安装方式总结那篇找到阿里云的那个镜像地址就是我们当前使用系统版本的镜像源地址。
https://mirrors.aliyun.com/centos-vault/7.8.2003/os/x86_64/
另外,除了网络源,我们还可以搭建本地源。
我们已经知道,yum源就是系统镜像中的文件。
那么,我们就可以将iso镜像挂载到本地使用了呀!
那如何配置呢?
首先是挂载系统镜像:
然后,怎么被yum所使用呢?
有两种方式:
- 像网络源一样,搭建一个本地的web服务器,来访问这些文件,这种方式适合集群。
- 直接用文件路径来访问,适合单机使用。
先来了解用文件路径的方式:
我们再来看下 /etc/yum.repos.d/ 文件下的内容:
这里我们看下 CentOS-Media.repo 这个文件:
这个文件里面的内容就是用 file:// 加文件路径,那么我们知道如何设置了。
为了避免其他repo文件有干扰,我们将其他文件转移到其他文件夹,只保留一个repo文件。
清除下缓存:
yum clean all
然后可以用命令:
yum list
再看下软件列表,这里只截取结尾部分:
看到结尾软件源是我们在CentOS-Media.repo文件中设置的名称,大功告成!
还有一个问题就是,我们挂载的镜像,系统一重启就没咧,需要重新挂载。
怎么解决呢?
我们可以将挂载命令写到开机脚本中:
然后,根据文件中的提示设置运行权限:
chmod +x /etc/rc.d/rc.local
reboot,重启,
df -h
查看,自动挂载成功。
OK,本篇内容就到这里了,内容有点多,但如果你看到了这里,恭喜你!
你可以在使用linux系统的过程中,可以少踩一些坑。