安装软件的方法

在RPM(红帽软件包管理器)公布之前,要想在Linux系统中安装软件,只能采取编译源码包的方式。所以,早期安装软件是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供自身的源代码,还需要运维人员编译代码后自行解决软件之间的依赖关系。因此要安装好一个服务程序,运维人员不仅需要具备丰富的知识、高超的技能,还要有良好的耐心,这其中的艰辛将会在本书第20章让大家亲自感受一下。

总而言之,早期的Linux系统在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、卸载、查询、升级等软件操作时难度都非常大。RPM机制则正是为了解决这些问题而设计的。

RPM有点像Windows系统中的控制面板,会建立统一的数据库,详细记录软件信息并能够自动分析依赖关系。表1-1所示为一些常用的RPM软件包命令,此时还不需要记住它们,大致混个“脸熟”就足够了。

表1-1                                                 常用的RPM软件包命令

命令

作用

rpm -ivh filename.rpm

安装软件

rpm -Uvh filename.rpm

升级软件

rpm -e filename.rpm

卸载软件

rpm -qpi filename.rpm

查询软件描述信息

rpm -qpl filename.rpm

列出软件文件信息

rpm -qf filename

查询文件属于哪个RPM

但是,尽管RPM能够帮助用户查询软件之间的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件依然很繁琐。Yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。Yum软件仓库的技术拓扑图如图1-49所示。

Linux就该这么学_linux

图1-49  Yum软件仓库的技术拓扑图

Yum软件仓库中的RPM软件包可以是由红帽官方发布的,也可以是由第三方发布的,当然也可以是自己编写的。本书随书提供的系统镜像(需在本书配套站点中下载)内已经包含了大量可用的RPM红帽软件包,既用于安装系统,也用于配置软件仓库,后面会详细说明。表1-2所示为一些常见的Yum命令,当前只需对它们有一个简单印象即可。

表1-2                                                      常见的Yum命令

命令

作用

yum repolist all

列出所有仓库

yum list all

列出仓库中所有软件包

yum info 软件包名称

查看软件包信息

yum install 软件包名称

安装软件包

yum reinstall 软件包名称

重新安装软件包

yum update 软件包名称

升级软件包

yum remove 软件包名称

移除软件包

yum clean all

清除所有仓库缓存

yum check-update

检查可更新的软件包

yum grouplist

查看系统中已经安装的软件包组

yum groupinstall 软件包组

安装指定的软件包组

yum groupremove 软件包组

移除指定的软件包组

yum groupinfo 软件包组

查询指定的软件包组信息

原本以为故事到此就要结束了,可是人们发现Yum虽然解决了软件的依赖关系问题,但仍然还是存在分析不准确、内存占用量大、不能多人同时安装软件等硬伤。终于,在2015年随着Fedora 22系统的发布,红帽又给了我们一个新的选择—DNF。DNF实际上就是解决了上述问题的Yum软件仓库的提升版,行业内称之为Yum v4版本。

作为Yum软件仓库v3版本的接替者,DNF特别友好地继承了原有的命令格式,且使用习惯上也保持了一致。大家不用担心不会操作,我们来看一个例子。以前,安装软件用的命令是“yum install软件包名称”,那么现在则是“dnf install软件包名称”(也就是说,将yum替换成dnf即可)。

当然RHEL 8系统也照顾到了老用户的习惯问题,同时兼容并保留了yum和dnf两个命令,大家在实际操作中随意选择就好。甚至这两个命令的提示信息都基本一样,感知不到什么区别。

1.5 系统初始化进程

Linux系统的开机过程是这样的,即先从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统启动后的第一个正式服务,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。同学们可以将初始化进程粗犷地理解成从我们按下开机键到看见系统桌面的这个过程。初始化进程完成了一大半工作。

红帽RHEL 7/8系统替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。原本以为这对大家的日常使用影响不大,但许多服务管理命令都被替换了,因此如果您之前学习的是RHEL 5或RHEL 6系统,可能真有点不习惯。

Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(unit),systemd用目标(target)代替了System V init中运行级别的概念,这两者的区别如表1-3所示。

表1-3                                   systemd与System V init的区别以及作用

System V init运行级别

systemd目标名称

systemd 目标作用

0

poweroff.target

关机

1

rescue.target

单用户模式

2

multi-user.target

多用户的文本界面

3

multi-user.target

多用户的文本界面

4

multi-user.target

多用户的文本界面

5

graphical.target

多用户的图形界面

6

reboot.target

重启

emergency

emergency.target

救援模式

如果想要将系统默认的运行目标修改为“多用户的文本界面”模式,可直接用ln命令把多用户模式目标文件链接到/etc/systemd/system/目录:

[root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

如果有读者之前学习过RHEL 5/6系统,或者已经习惯使用service、chkconfig等命令来管理系统服务,那么现在就比较郁闷了,因为在RHEL 7/8系统中是使用systemctl命令来管理服务的。表1-4和表1-5所示为新老版本系统的对比,您可以先大致了解一下,后续章节中会经常用到它们。

表1-4                                   服务的启动、重启、停止、重载、查看状态等常用命令

老系统命令

新系统命令

作用

service foo start

systemctl start httpd

启动服务

service foo restart

systemctl restart httpd

重启服务

service foo stop

systemctl stop httpd

停止服务

service foo reload

systemctl reload httpd

重新加载配置文件(不终止服务)

service foo status

systemctl status httpd

查看服务状态

表1-5                                   服务开机启动、不启动、查看各级别下服务启动状态等常用命令

老系统命令

新系统命令

作用

chkconfig foo on

systemctl enable httpd

开机自动启动

chkconfig foo off

systemctl disable httpd

开机不自动启动

chkconfig foo

systemctl is-enabled httpd

查看特定服务是否为开机自启动

chkconfig --list

systemctl list-unit-files --type=httpd

查看各个级别下服务的启动与禁用情况