Linux软件安装:RPM、YUM

RPM软件管理程序:rpm

RPM是Red Hat Package Manager的缩写,是一种常用的Linux软件包管理系统,主要用于管理Red Hat系列的Linux发行版,例如Fedora、CentOS等。

RPM的格式为:

xxxxxxxx.rpm   # RPM的格式,已经经过编译且打包完成的rpm文件

例如rp-pppoe-3.11-5.el7.x86_64.rpm 这文件的意义?

rp-ppoe    -3.11-            5        .el7.x86_64      .rpm
软件名称   软件的版本信息   发布的次数    适合的硬件平台     扩展名
# 除了后面适合的硬件平台与扩展名外,主要是以【-】来隔开各个部分,这样子可以很清楚地发现该软件的名称、版本信息、打包次数与操作的硬件平台。

下面是RPM软件管理程序的详解:

RPM默认安装的路径

在Linux系统中,默认的RPM安装路径包括以下几个目录:

目录解释
/etc用于存放系统配置文件,如fstab、passwd等。
/usr/bin用于存放应用程序的可执行文件,如vi、gcc等。
/usr/lib一些程序使用的动态数据库
/usr/share/doc一些基本的软件使用手册与说明文件
/usr/share/man一些man page 文件

RPM安装(install)

因为安装软件是root的工作,所以你得要是root身份才能够使用rpm这个命令,用rpm来安装很简单。假设我要安装一个文件名为 rp-pppoe-3.11-5.el7.x86_64.rpm的文件,那么我可以这样:

首先将Centos 7 的安装光盘挂载到/mnt 下面

[root@localhost ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载

然后执行安装

[root@localhost ~]# rpm -i /mnt/Packages/rp-pppoe-3.11-7.el7.x86_64.rpm

不过这样安装其实无法显示安装进度,所以我们会这样执行安装命令

rpm -ivh  package_name
选项:
-i:install 安装的意思
-v:查看更详细的安装信息
-h:显示安装进度

# 示例1 使用安装光盘安装 rp-pppoe 软件
[root@localhost ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-7.el7.x86_64.rpm 
准备中...                          ################################# [100%]
        软件包 rp-pppoe-3.11-7.el7.x86_64 已经安装
        
# 示例2 一口气安装两个以上的软件
[root@localhost ~]# rpm -ivh a.rpm b.rpm *.rpm
# 后面接上多个安装文件

# 示例3 直接由网络上的某个文件地址来安装
rpm -ivh http://website.name/path/pkgname.rpm

另外,如果我们在安装的过程当中发现问题,或已经知道会发生的问题,而还是【执意】要安装这个软件时,可以使用如下的参数【强制】安装上去

--nodeps:忽略软件包的依赖关系,强制安装软件包。 使用时需要注意,可能会导致系统依赖出现问题。 
 --replacefiles: 在安装软件包时,如果有文件已存在于系统中,则替换该文件。
                  使用时需要注意,可能会覆盖系统中原有的文件,导致系统出现问题。 
--replacepkgs:在安装软件包时,如果该软件包已经安装,则覆盖已有的软件包。使用时需要注意,
              可能会导致软件无法正常工作。
--force:强制安装软件包,覆盖系统中已有的同名文件。使用时需要谨慎操作,可能会导致系统出现问题。 
--test:测试软件包的安装,但并不实际安装软件包。这个选项可以用来检查是否有依赖关系等问题。 
--justdb : 只更新软件包的数据库信息,不实际安装软件包。这个选项可以用来更新软件包的数据库信息
           但并不实际安装软件包。
--nosignature :忽略软件包的数字签名验证,强制安装软件包。使用时需要注意,可能会导致安全问题。 
--prefix 新路径 :指定软件包的安装路径。使用时需要注意,可能会导致软件无法正常工作。 
--noscripts:在安装软件包时,不执行软件包中的脚本。这个选项可以用来跳过软件包中的脚本
             但可能会导致软件无法正常工作。

RPM升级与更新(upgrade/freshen)

==-Uvh==:后面接的软件即使没有安装过,则系统予以直接安装;
          若后面接的软件有安装过旧版,则系统自动更新至新版

==-Fvh==:如果后面接的软件并未安装到你的Linux系统上,
          则该软件不会被安装;就是只有已安装至你Linux系统内的软件会被【升级】

由上面的说明来看,如果你想要大量地升级系统旧版本的软件时,使用-Fvh是比较好的做法,因为没有安装的软件才不会被不小心安装进系统中。但是需要注意的是,如果你使用的是-Fvh,偏偏你的机器上尚无这一个软件,那么很抱歉,该软件并不会安装在你的Linux主机上面,所以请重新以 ivh 来安装

RPM查询(query)

RPM查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据库文件。另外,RPM也可以查询未安装的 RPM 文件内的信息。

rpm  -qa       # 已安装软件
rpm  -q[licdR] # 已安装软件
rpm  -qf  存在于系统上面的某个文件名  # 已安装软件
rpm  -qp[licdR] 未安装的某个文件名称 # 查看RPM文件
选项:
-q  :仅查询,后面接的软件名称是否有安装
-qa :列出已经安装在本机Linux系统上面的所有软件名称
-qi :列出该软件的详细信息,包含开发商、版本于说明等
-ql :列出该软件所有的文件于目录所在完整文件名
-qc :列出该软件的所有配置文件(找出/etc/下面的文件名而已)
-qd :列出该软件的所有说明文件(找出与man有关的文件而已)
-qR :列出该软件有关的依赖文件所含的文件
-qf :由后面接的文件名,找出该文件属于哪一个已安装的软件
-q  --scripts :列出是否含有安装后需要执行的脚本文件,可以用debug查询某个RPM文件内含有的信息
-qp[icdlR] : 注意 -qp 后面接的所有参数以上面的说明一致,但用途仅在于某个RPM文件内的信息,而非已安装的软件信息。

在查询的部分,所有的参数之前都需要加上-q 才是所谓的查询。查询主要分为两部分:一个查找已安装到系统上面的软件信息,另一个则是查找某个rpm文件内容。

# 示例1 找出你的Linux是否安装logrotate这个软件
[root@localhost ~]# rpm -q logrotate
logrotate-3.8.6-19.el7.x86_64
[root@localhost ~]# rpm -q logrotating
未安装软件包 logrotating 
# 系统回去找是否有安装后面接的软件,注意,不必要加上版本,至于显示结果,一看就知道有没有安装

# 示例2 列出上题当中,属于该软件所提供的所有目录与文件
[root@localhost ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/etc/rwtab.d/logrotate
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
.....
.....
# 可以看出该软件到底提供了多少的文件与目录,也可以查找软件的数据

# 示例3 列出 logrotate 这个软件的相关说明信息
[root@localhost ~]# rpm -qi logrotate
Name        : logrotate                        # 软件名称
Version     : 3.8.6                            # 软件的版本
Release     : 19.el7                           # 发布的版本
Architecture: x86_64                           # 编译时所针对的硬件结构
Install Date: 2023年04月05日 星期三 20时08分11秒 # 这个软件安装到本系统的时间
Group       : System Environment/Base          # 软件放在哪个软件群组中
Size        : 107068                           # 软件的大小
License     : GPL+                             # 发布的授权方式
Signature   : RSA/SHA256, 2020年04月04日 星期六 05时01分10秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : logrotate-3.8.6-19.el7.src.rpm   # SPRM的文件名
Build Date  : 2020年04月01日 星期三 11时26分19秒 # 软件编译打包的时间
Build Host  : x86-02.bsys.centos.org           # 在哪台主机上编译的
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : https://github.com/logrotate/logrotate
Summary     : Rotates, compresses, removes and mails system log files
Description :                                  # 这个是详细秒数
The logrotate utility is designed to simplify the administration of
log files on a system which generates a lot of log files.  Logrotate
allows for the automatic rotation compression, removal and mailing of
log files.  Logrotate can be set to handle a log file daily, weekly,
monthly or when the log file gets to a certain size.  Normally,
logrotate runs as a daily cron job.

Install the logrotate package if you need a utility to deal with the
log files on your system.

# 示例4 分别仅找出 logrotate 的配置文件与说明文件
[root@localhost ~]# rpm -qc logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/rwtab.d/logrotate
[root@localhost ~]# rpm -qd logrotate
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz

# 示例5 若成功安装logrotate,它还需要什么文件
[root@localhost ~]# rpm -qR logrotate
/bin/sh
/bin/sh
config(logrotate) = 3.8.6-19.el7
coreutils >= 5.92
......
......
......
# 看起来,还是需要很多文件的支持才行

# 示例6 由上面的范例,找出 /bin/sh 是哪个软件提供的
[root@localhost ~]# rpm -qf /bin/sh
bash-4.2.46-34.el7.x86_64
# 这个参数后面接的可是【文件】,不像前面都是接的软件,这个功能在查寻系统的某个文件属于哪一个软件所有

# 示例7 假设我有下载一个RPM文件,想要知道该文件的还依赖哪些文件
[root@localhost ~]# rpm -qpR filename.rpm
# 加上-qpR 找出该文件依赖的文件信息

例题

  1. 我想要知道我的系统当中,以c开头的软件有几个,如何查?
[root@localhost ~]# rpm -qa |grep ^c |wc  -l
  1. 我的WWW服务器为Apache,我知道它使用的RPM文件为httpd。现在,我想要知道这个软件的所有配置文件放置在何处,如何做?
[root@localhost ~]# rpm -qc httpd
  1. 承上题,如果查出来的配置文件已被我改过,但是我忘记了曾经修改过哪些地方,所以想要直接重新安装一次该软件,该如何操作?

假设该软件的网址为: 【http://cccc/path/httpd-xxx.i386.rpm】

[root@localhost ~]# rpm -ivh http://cccc/path/httpd-xxx.i386.rpm
  1. 如果我误删除了某个重要文件,例如 /etc/crontab,偏偏不晓得它属于哪个软件,该怎么办?
[root@localhost ~]# rpm -qf /etc/crontab 

RPM验证与数字签名

验证的功能可以帮助系统管理员管理系统中的安装文件。它的作用是通过比对系统中已安装软件的文件和/var/lib/rpm数据库中的记录,来检查文件是否被误删除或修改。如果出现问题,管理员就可以及时了解到哪些文件被修改或删除,以便及时进行修复。这个功能就像是一个保险箱,可以帮助管理员保障系统的安全和稳定。

rpm   -Va
rpm   -V  已安装的软件名称
rpm   -Vp 某个RPM文件的文件名
rpm   -Vf 在系统上面的某个文件
选项:
-V  :后面跟软件名,若该软件所含的文件被修改过才会显示
-Va :列出目前系统上面所有可能被修改过的文件
-Vp :后面跟文件名,列出该软件内可能被修改过的文件
-Vf :显示某个文件是否被修改过

列出你的Linux内的logrotate这个软件是否被修改过

[root@localhost ~]# rpm -V logrotate
# 如果没用出现任何信息,那么该软件所提供的文件没用被修改过。

查询一下,你的 /etc/crontab是否有被修改过

[root@localhost ~]# rpm -Vf /etc/crontab
S.5....T.  c /etc/crontab
# 看因为有被修改过,所以会显示被修改过的信息类型

你会发现在文件名之前有个 c,然后就是一堆奇怪的内容了。这个c代表的是 configuration,就是配置文件的以上。至于最前面的几个信息是:

  • S:(file size differs)文件的容量大小是否被改变
  • M:(Mode differs)文件的类型或属性(rwx)是否被改变?如是否可执行等参数已被改变
  • 5:(MD5 sum differs)MD5这一种校验值的内容已经不同
  • D:(Device major/minor number mis-match)设备的主/次代码已经改变
  • L:(readLink(2)path mis-match)链接(Link)路径已被改变
  • U:(User ownership differs)文件的所属用户已被改变
  • G:(Group ownership differs)文件的所属用户组已被改变
  • T:(mTime differs)文件的建立时间已被改变
  • P:(caPabilities differ)功能已经被改变

所以,如果当一个配置我呢见所有的信息都被修改过,那么它的显示就会是:

SM5DLUGTP c filename

这个c代表的则是【config file】的意思,也就是文件的类型,其有下面这几类:

  • c:配置文件(config file)
  • d:数据文件(documentation)
  • g:幽灵文件(ghost file),通常是该文件不被某个软件所包含,较少发生
  • l:许可证文件(license file)
  • r:自述文件(read me)

数字签名

验证功能只能检查已安装软件的文件是否被修改,而无法检查软件本身是否存在问题。如果软件本身就存在问题,那么使用验证功能也无法解决这个问题。为了解决这个问题,我们可以使用md5检验值来验证软件的完整性。通过比对软件提供的md5检验值和我们计算出的md5检验值,来确认软件的完整性。但是,即使md5检验值也可能被篡改。为了更加保险,我们可以通过数字签名来验证软件的来源。数字签名是由软件开发者或发布者提供的签名,可以保证软件来源的真实性和完整性。因此,我们可以通过数字签名来验证软件的来源,以确保软件的安全和可信度。

就像你自己的签名一样,我们的软件开发商原厂所推出的软件也会有一个厂商自己的签名系统,只是这个签名被数字化了而已。厂商可以以数字签名系统产生一个专属于该软件的签名,并将该签名的公钥发布。当你要按照一个RPM文件时

  1. 首先你必须要先安装原厂发布的公钥文件
  2. 实际安装 RPM 软件时,rpm命令会读取 RPM 文件的签名信息并于本机系统内的签名信息比对
  3. 若签名相投则予以安装,若找不到相关的签名信息时,则给予警告并且停止安装

CentOS使用的数字签名系统是GnuPG,它可以通过哈希运算生成独一无二的密钥或数字签名。在RPM文件上,数字签名可以用来确认软件的来源和完整性。为了使用数字签名,我们需要先安装原厂发布的GPG数字签名的公钥文件。在CentOS中,数字签名的公钥文件位于:

[root@localhost ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 
-rw-r--r--. 1 root root 1690 1023 2020 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBFOn/0sBEADLDyZ+DQHkcTHDQSE0a0B2iYAEXwpPvs67cJ4tmhe/iMOyVMh9
.....
......

从上面的输出。你会知道该数字签名值其实仅是一个随机数而已,这个随机数对于数字签名有意义而已,我们看不懂。那么这个软件如何安装呢?通过如下方式

rpm --import命令可以用来安装数字签名的公钥文件。具体来说,rpm --import命令可以将一个或多个数字签名的公钥文件导入到系统中,以便后续验证软件的来源和完整性。该命令的语法为:

rpm --import <公钥文件>

其中,<公钥文件>是数字签名的公钥文件的路径。通过指定该路径,我们可以将该公钥文件导入到系统中。

由于不同版本GPG密钥文件放置的位置可能不同,不过文件名大多是包含 GPG-KEY 字样,因此你可以简单地使用 locate 或 find 来查找

不过 locate 需要安装,centos 默认没有这个命令

[root@localhost ~]# yum install -y mlocate
[root@localhost ~]# updatedb  # 加载数据库
[root@localhost ~]# locate GPG-KEY
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

find命令

[root@localhost ~]# find / -name '*GPG-KEY*'
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

安装完密钥后,通常会以 pubKey 作为软件的名称。你可以使用 -qi 命令来查询这个软件的信息,包括软件的具体名称和其他相关信息。

[root@localhost ~]# rpm -qa |grep pubkey
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-352c64e5-52ae6884
[root@localhost ~]# rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b
Name        : gpg-pubkey
Version     : f4a80eb5
Release     : 53a7ff4b
Architecture: (none)
Install Date: 2023年05月26日 星期五 11时53分24秒
Group       : Public Keys
Size        : 0
License     : pubkey
Signature   : (none)
Source RPM  : (none)
Build Date  : 2014年06月23日 星期一 18时19分55秒
Build Host  : localhost
Relocations : (not relocatable)
Packager    : CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>
Summary     : gpg(CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11.3 (NSS-3)
.....
.....
.....

在rpm安装软件的过程中,会有一个很重要的数字签名,它通常以一段难以理解的乱码形式呈现。如果你忘记加上这个数字签名,很可能无法安装很多原版软件,除非你选择忽略数字签名检查。这个数字签名是非常重要的,可以确保软件的安全性和可信度。

RPM卸载与重建数据库(erase/rebuilddb)

卸载安装的过程一定要按照从最上层往下解除的顺序进行。举个例子,rp-ppoe这个软件是根据ppp这个软件来安装的。因此,当你要卸载ppp的时候,必须先卸载rp-pppoe才可以,否则可能会出现结构上的问题。这个可以用建筑物来类比,如果你要拆除五、六楼,那么当然要从六楼开始拆,否则先拆五楼,那么上面的楼层就会悬空。

删除的选项很简单,就是通过 -e 即可删除。不过,经常发生软件属性依赖导致无法删除某些软件的问题。如下例子

# 1. 找出与pam有关的软件名称,并尝试删除pam这个软件
[root@localhost ~]# rpm -qa |grep pam
pam-1.1.8-23.el7.x86_64
[root@localhost ~]# rpm -e pam
错误:依赖检测失败:
        libpam.so.0()(64bit)(已安裝) libpwquality-1.2.3-5.el7.x86_64 需要
        libpam.so.0()(64bit)(已安裝) libuser-0.60-9.el7.x86_64 需要
        libpam.so.0()(64bit)(已安裝) util-linux-2.23.2-65.el7.x86_64 需要
        libpam.so.0()(64bit)(已安裝) systemd-libs-219-78.el7.x86_64 需要
        libpam.so.0()(64bit)(已安裝) systemd-219-78.el7.x86_64 需要
............
..........
.........
# 2. 若仅删除 pam-devel 这个之前安装的软件
[root@localhost ~]# rpm -e pam-devel   # 不会提示任何信息
[root@localhost ~]# rpm -q pam-devel
未安装软件包 pam-devel 

从上面的例子中,我们可以知道pam是提供给很多其他软件使用的函数库,因此你不能轻易删除它,除非你也删除了所有依赖于它的软件。当然,你也可以使用–nodeps选项来强制删除它,但这样一来,所有依赖于pam函数库的软件都将无法正常运行。

有时,RPM文件的安装、删除、升级等操作可能会导致RPM数据库(存储软件包信息的地方)中的文件损坏。如果真的发生了这种情况,该怎么办呢?别担心,我们可以使用–rebuilddb选项来重建数据库。具体操作方法如下:

[root@localhost ~]#  rpm --rebuilddb   <== 重建数据库

YUM在线升级功能

YUM是一款软件安装管理工具,它的作用是帮助用户自动处理软件安装、升级和删除时可能遇到的依赖属性问题。YUM能够通过分析软件包的标头数据,了解软件之间的相关性,然后制作出属性依赖的解决方案,以确保软件的安装、升级和删除不会出现问题。这样,用户就可以方便地管理各种软件,而无需手动解决依赖属性问题。

YUM虽然一款方便的软件安装管理工具,但要使用它的功能,需要找到适合YUM的服务器,也就是软件源。每个YUM服务器可能都提供许多不同的软件功能。CentOS已经制作出多个镜像站,提供给全世界的软件更新使用。因此,只要能够连接上互联网,理论上就能够使用YUM,不需要处理任何设置值。

利用YUM进行查询、安装、升级与删除功能

查询功能

yum [ list | search | providers | whatprovides ] 参数

如果想要使用 yum 来查询原版 Linux 发行版所提供的软件或已知某些软件的名称,想知道该软件的功能,可以利用 yum 相关的参数:

yum [option] [查询工作选项] [相关参数]
选项:
 [option] 主要的选项包括有:
 -y      :当yum要等待使用者输入时,这个选项可以自动提供 yes 的回应。
 --installroot=/some/path:将该软件安装在 /some/path 而不使用默认路径
 [查询工作选项] [相关参数] 这方面的参数有:
 search  :查找某个软件名称或是描述的重要关键字
 list    :列出目前 yum 所管理的所有的软件与版本,有点类似 rpm -qa
 info    :同上,不过有点类似rpm -qai的执行结果
 provides:从文件去查找软件,类似 rpm -qf 的功能

查找磁盘整列(raid)相关的软件有哪些

[root@localhost ~]# yum search raid
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile    # 找出速度最快的那一台yum服务器
 * base: mirrors.aliyun.com                   # 下面三个软件源,且来源为该服务器
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.jlu.edu.cn
=================================== N/S matched: raid ===================================
dmraid.i686 : dmraid (Device-mapper RAID tool and library)
dmraid.x86_64 : dmraid (Device-mapper RAID tool and library)
dmraid-devel.x86_64 : Development libraries and headers for dmraid.
dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting
......
......
# 在冒号(:)左边的是软件名称,右边则是在 RPM内的name设置(软件名)

找出mdadm这个软件的功能是什么

[root@localhost ~]# yum info mdadm
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.jlu.edu.cn
Available Packages
Name        : mdadm    #这个软件的名称
Arch        : x86_64   #这个软件的硬件架构
Version     : 4.1      #此软件的版本
Release     : 9.el7_9  #发布的版本
Size        : 439 k    #此软件的文件总容量
Repo        : updates/7/x86_64  #软件源的安装状态
Summary     : The mdadm program controls Linux md devices (software RAID arrays)
URL         : http://www.kernel.org/pub/linux/utils/raid/mdadm/
License     : GPLv2+
Description : The mdadm program is used to create, manage, and monitor Linux MD (software
            : RAID) devices.  As such, it provides similar functionality to the raidtools
            : package.  However, mdadm is a single program, and it can perform
            : almost all functions without a configuration file, though a configuration
            : file can be used to help with some common tasks.

列出YUM服务器上面提供的所有软件名称

[root@localhost ~]# yum list
....
.....
......
zziplib-devel.x86_64            0.13.62-12.el7                      base     
zziplib-utils.x86_64            0.13.62-12.el7                      base     
# 【软件名称  版本  在那个软件源内】

列出passwd这个命令的软件有哪些

[root@localhost ~]# yum provides passwd
....
....
passwd-0.79-6.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : base

passwd-0.79-6.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : @anaconda
# 就上面的软件提供了passwd这个命令

利用yum的功能,找出以pam为开头的软件有哪些?而其中尚未安装的又有哪些

[root@localhost ~]# yum list pam*
pam.x86_64          1.1.8-23.el7                         @base  
Available Packages      # 下面则是【可升级】或【未安装】的
pam.i686            1.1.8-23.el7                         base   
pam-devel.i686      1.1.8-23.el7                         base   
pam-devel.x86_64    1.1.8-23.el7                         base   
pam-kwallet.x86_64  5.5.2-1.el7                          epel 
.....
....

安装/升级功能

yum [option] [安装与升级的工作选项] [相关参数]
选项:
 install :后面接要安装的软件
 update  :后面接要升级的软件,若要整个系统都要升级,就直接 update 即可

将前一个练习找到的未安装的pam-devel 安装一下

[root@localhost ~]# yum install -y pam-devel
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                              | 6.8 kB  00:00:00     
 * base: mirrors.aliyun.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.jlu.edu.cn
Resolving Dependencies   # 接下来先处理【属性依赖】的软件问题
--> Running transaction check
---> Package pam-devel.x86_64 0:1.1.8-23.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved
# 由上面的检查发现到pam整个软件也需要同步升级,这样才能够安装新版 pam-devel
# 至于下面则是一个总结的表格显示
=========================================================================================
 Package              Arch              Version                    Repository       Size
=========================================================================================
Installing:
 pam-devel            x86_64            1.1.8-23.el7               base            185 k

Transaction Summary
=========================================================================================
Install  1 Package         

Total download size: 185 k   
Installed size: 528 k      
Downloading packages:
pam-devel-1.1.8-23.el7.x86_64.rpm                                 | 185 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : pam-devel-1.1.8-23.el7.x86_64                                         1/1 
  Verifying  : pam-devel-1.1.8-23.el7.x86_64                                         1/1 

Installed:
  pam-devel.x86_64 0:1.1.8-23.el7                                                        

Complete!

删除功能

yum [remove] 软件

[root@localhost ~]# yum remove pam-devel
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Resolving Dependencies     # 先解决依赖性问题
--> Running transaction check
---> Package pam-devel.x86_64 0:1.1.8-23.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================
 Package              Arch              Version                   Repository        Size
=========================================================================================
Removing:
 pam-devel            x86_64            1.1.8-23.el7              @base            528 k

Transaction Summary
=========================================================================================
Remove  1 Package   # 没用依赖性问题只删除了一个软件

Installed size: 528 k
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : pam-devel-1.1.8-23.el7.x86_64                                         1/1 
  Verifying  : pam-devel-1.1.8-23.el7.x86_64                                         1/1 

Removed:
  pam-devel.x86_64 0:1.1.8-23.el7                                                        

Complete!

YUM的配置文件

虽然yum是你的主机能够连接上互联网就可以直接使用的,但是,由于CentOS的镜像站可能会选择到距离我们较远的地方,例如我们在云南,但是CentOS的镜像站选择到了北京,这样连接到北京的速度就会非常慢。为了解决这个问题,我们可以手动修改yum的配置文件,将镜像站设置为距离我们较近的地方,这样就可以加快软件下载和更新的速度。

开源镜像站

阿里云开源镜像站:https://mirrors.aliyun.com/

网易开源镜像站:https://mirrors.163.com/

中科大开源镜像站:https://mirrors.ustc.edu.cn/

清华开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/

如果你连接到了上述的网址后,就会发现里面有一堆链接,那些链接就是这个yum服务器所提供的软件源了。所以高速网络中心也提供了 centosplus、cloud、extras、fasttrack、os、updates等软件源,最好认的软件源就是 os(系统默认的软件)与updates(软件升级版本)

image-20230531210556003

在使用YUM安装软件时,最重要的是要找到软件源的地址,这样才能够下载需要的软件。而软件源中最重要的是repodata目录,这个目录中存放着分析RPM软件后所产生的软件属性依赖数据。也就是说,当你找到一个软件源地址时,一定要确保该地址下面有一个名为【repodata的目录】,这样才能够正确地使用YUM安装软件。

image-20230531210618277

现在让我来修改配置文件

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo 
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

CentOS-Base.repo内容很多,仅列出base这个软件源内容而已,其他的软件源内容自行查看

  • [base]:代表软件源的名字,中括号一定要存在,里面的名称则可以随意取。但是不能有俩不能更改相同的软件源名称,否则yum会不知道该到哪里取找软件源相关的软件列表
  • name:只是说明一下这个软件源的意义而已,重要性不高
  • mirrorlist=:列出这个软件源可以使用的镜像站,如果不想使用,可以注释掉这行
  • baseurl:这个最重要,因为后面接的就是软件源的实际地址,mirrorlist是由YUM程序自行取识别镜像站,baseurl则是指定固定的一个软件源地址,我们刚刚找到的网址放到这里来(注意路径)
  • enable=1:就是让这个软件源被启用,如果不想启动可以使用enable=0
  • gpgcheck=1:还记得RPM数字签名吗?这就是指定是否需要查看RPM文件内的数字签名
  • gpgkey=:就是数字签名的公钥文件所在位置,使用默认值就可以。

了解完配置让我们修改整个文件内容吧,使用中科大镜像站的资源。修改方式仅列出base这个软件源而已,其他项目按照这个处理就行了

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.ustc.edu.cn/centos/7.9.2009/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.ustc.edu.cn/centos/7.9.2009/updates/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.ustc.edu.cn/centos/7.9.2009/extras/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# 默认情况下,软件源仅有这三个启用,所以这里仅修改这三个软件源的baseurl而已。

那么你肯定会说,配置的好麻烦什么的,有没有更简单的方法呢?有的,直接使用官方制作好的repo文件

使用 wget 下载,wget是一个网络下载工具

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#-O参数指定要将下载的文件输出至指定路径
#/etc/yum.repos.d/CentOS-Base.repo是指定输出路径
# https://mirrors.aliyun.com/repo/Centos-7.repo是要下载的文件的URL地址。
# 执行该命令后,系统将会使用阿里云提供的软件仓库来更新和安装软件包

接下来就是测试一下这些软件源是否正常运行

[root@localhost ~]# yum repolist all

image-20230531213010593

上面最右边写enabled才是有启用的,由于/etc/yum.repos.d/ 有多个配置文件,所以你会发现还有其他的软件源存在

修改软件源产生的问题与解决之道

如果我们想要修改YUM的配置文件,让它使用特定的镜像站而不是其他软件开发商提供的软件源,我们需要在/etc/yum.repos.d/目录下创建一个.repo的文件,这是一个特定的配置文件格式。但是需要注意的是,不同的软件源可能会有新旧版本之分,YUM会在本地/var/cache/yum目录中下载软件源的列表。如果我们修改了镜像站的网址却没有修改软件源名称(中括号内的文件),就可能导致本地的列表与YUM服务器的列表不同步,从而无法更新软件。解决方法很简单,只需要清除本地的旧数据即可。

yum clean [ packages | headers |all ]
选项:
packages:将已下载的安装文件删除
headers :将下载的安装文件头删除
all     :将所有软件源数据都删除

# 示例1 删除已下载过的所有软件源的相关数据(含软件本身与清单)
[root@localhost ~]# yum clean all

YUM的软件群组功能

通过yum来在线安装一个软件是非常简单的,但是,如果要安装的是一个大型软件?举例来说,我使用默认安装的方式安装了测试机,这台主机只有GNOME这个窗口管理器。那么我如果想要安装KDE?难道要重新安装?当然不需要,通过yum的软件群组功能即可

yum [群组功能] [软件群组]
选项:
 grouplist   :列出所有可使用的【软件群组组】,例如 Development Tools之类
 groupinfo   :后面接group name,则可了解该group内含的所有软件名
 groupinstall:这个很好用,可以按照一整组的软件群组,相当的不错

查看目前软件源与本机上面的可用与安装过的软件群组有哪些

[root@localhost ~]# yum grouplist
Available Environment Groups:   #还可以安装的系统环境软件群组
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Cinnamon Desktop
   MATE Desktop
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:               # 还能额外安装的软件群组
   Cinnamon
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Educational Software
   Electronic Lab
   Fedora Packager
   General Purpose Desktop
   Graphical Administration Tools
   Haskell
   LXQt Desktop
   Legacy UNIX Compatibility
   MATE
   Milkymist
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
   TurboGears application framework
   Xfce
Done

系统上的软件大多是以群组的方式来提供安装的,就像一个套餐一样,包含了很多相关的软件,这些软件一起工作可以完成一些特定的功能。比如,GNOME、KDE、X Windows等,这些名称其实就是软件群组的名称,包含了一系列相关的软件,安装了这些软件群组后,就可以使用这些软件来完成一些特定的功能。在安装CentOS时,我们可以选择需要安装的软件群组,也可以选择单个软件进行安装。如果你执行上述的命令之后,在【Available Groups】下面应该会看到一个【Scientific Support】的软件群组,可以使用如下命令查看详细内容

[root@localhost ~]# yum groupinfo "Scientific Support"
Group: Scientific Support
 Group-Id: scientific
 Description: Tools for mathematical and scientific computations, and parallel computing.  # 这句话的意思是用于数学和科学计算以及并行计算的工具。
 Optional Packages:
   Macaulay2
   atlas
   fftw
   fftw-devel
   fftw-static
   gnuplot
   gromacs
   gromacs-mpi
   gsl-devel
   hdf
   hdf5
   jmol
   lapack
   maxima
   .....
   .....
   .....

我们来安装看看

[root@localhost ~]# yum groupinstall "Scientific Support"

Scientific Support 里面的软件都是【可选择的】,而不是【主要的(mandatory)】,因此默认情况下,上面这些软件通通不会帮你安装。如果你想要安装上述软件,可以使用 【yum install fftw】 一个一个安装,如果你想要让groupinstall 默认安装好所有的optional软件?那么就得要修改配置文件,更改groupinstall 选择的软件选项即可,如下所示

distroverpkg=centos-release     # 找到这一行添加如下内容
group_package_types=default,mandatory,optional
# default:表示安装软件包群组时,同时安装默认类型的软件包;
# mandatory:表示安装软件包群组时,同时安装必须的软件包,如果不安装这些软件包,软件包群组将无法正常工作;
# optional:表示安装软件包群组时,同时安装可选的软件包,这些软件包并不是必须的,但是可以提供额外的功能。

通过设置group_package_types=default,mandatory,optional,yum在安装软件包群组时将同时安装默认类型、必须类型和可选类型的软件包,这样可以确保软件包群组能够正常工作,并且提供额外的功能。

然后再次执行安装命令/

[root@localhost ~]# yum groupinstall "Scientific Support"
# 你就会发现有一大堆软件的安装。

全系统自动升级

我们可以手动选择是否需要升级,那能不能让系统自动升级,让我们的系统随时保持在最新的状态呢?可以,通过【yum update -y】来自动升级,然后再通过 crontab 的功能来处理即可。

假设我每天在 3:00am 网络带宽比较好的适合进行升级

# 使用命令crontab -e打开定时任务编辑器。在编辑器中添加如下行
0 3 * * * /usr/bin/yum update -y
# 表示在每天的凌晨3:00执行yum update -y命令进行自动升级操作。 

通过以上设置,系统会在每天凌晨3:00自动执行yum update -y命令进行自动升级操作

错误解决

# 当时我安装了rhel9 的epel-realse仓库,但是不小心将/etc/yum.repos.d/epel* 全部删除了
[root@localhost ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
[root@localhost ~]# rm -rf /etc/yum.repos.d/epel*
# 导致我删也删不掉,重新安装也安装不上
[root@localhost ~]# yum remove -y epel-release-latest-9.noarch
正在更新 Subscription Management 软件仓库。
未找到匹配的参数: epel-release-latest-9.noarch
没有软件包需要移除。
依赖关系解决。
无需任何处理。
完毕!
[root@localhost ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
epel-release-latest-9.noarch.rpm                                                                                        1.1 kB/s |  19 kB     00:17    
软件包 epel-release-9-7.el9.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!
# 先看看已经安装的软件包有没有他
[root@localhost ~]# rpm -qa |grep epel-release-9-7.el9.noarch 
epel-release-9-7.el9.noarch
# 显然是有的,但是他的配置文件被我删除了,导致yum remove不掉
# 强制删除一下
[root@localhost ~]# rpm -e --nodeps epel-release-9-7.el9.noarch
警告:文件 /etc/yum.repos.d/epel.repo:移除失败:没有那个文件或目录
警告:文件 /etc/yum.repos.d/epel-testing.repo:移除失败:没有那个文件或目录
警告:文件 /etc/yum.repos.d/epel-cisco-openh264.repo:移除失败:没有那个文件或目录
# 再次安装一下
[root@localhost ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
epel-release-latest-9.noarch.rpm                                                                                        9.8 kB/s |  19 kB     00:01    
依赖关系解决。
========================================================================================================================================================
 软件包                                 架构                             版本                              仓库                                    大小
========================================================================================================================================================
安装:
 epel-release                           noarch                           9-7.el9                           @commandline                            19 k

事务概要
========================================================================================================================================================
安装  1 软件包

总计:19 k
安装大小:26 k
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                                                                         1/1 
  安装    : epel-release-9-7.el9.noarch                                                                                                             1/1 
  运行脚本: epel-release-9-7.el9.noarch                                                                                                             1/1 
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  验证    : epel-release-9-7.el9.noarch                                                                                                             1/1 
已更新安装的产品。

已安装:
  epel-release-9-7.el9.noarch                                                                                                                           

完毕!
# 安装成功了,在学习期间,遇到问题一定要想着解决而不是一味的重制系统

管理的抉择:RPM还是Tarball

如果我要升级或是全新安装一个新的软件,那么该选择RPM还是Tarball来安装?

优先选择原厂的RPM功能

在Linux系统中,软件的管理通常使用RPM(Red Hat Package Manager)来进行。RPM是一种软件包管理器,可以方便地安装、升级和卸载软件。此外,RPM还具有安全性较高的特点,因为它提供数字签名和验证功能,可以保证软件的安全性。

通过使用RPM,可以实现自动升级和维护软件,而且原厂会持续维护软件更新,因此系统可以保持在最新的状态,提高了系统的安全性。此外,使用RPM还可以方便地查询和验证软件包,使软件管理变得更加轻松和自在。

例如,RHEL和Centos每个版本都至少提供五年以上的维护期,这意味着这些系统的软件会持续得到更新和维护,能够保证系统的稳定性和安全性。同时,yum作为RPM的一个工具,也可以自动升级软件包,提高了系统的安全性和稳定性。

因此,在Linux系统中,使用RPM来管理软件是首选的方式,因为它具有安全性高、易于管理和维护等优点,能够保证系统的稳定性和安全性。

选择软件官网发布的RPM或是提供的软件源地址

虽然原厂提供了很多软件和更新,但是并不可能包含所有的软件和功能。举例来说,CentOS并没有提供NTFS相关的驱动模块。如果需要安装这些特殊的软件,就需要自行寻找软件源并进行安装。

可以通过到官网上查找是否有提供相关的RPM文件来安装特殊软件。如果软件源网址已经提供,可以通过下载该软件源的YUM配置文件,将其加入到系统中,就能够方便地自动安装和升级该软件。

因此,在使用RPM来管理软件时,也需要注意到原厂提供的软件并不是万能的,可能会有一些特殊的软件需要自行寻找软件源来进行安装。

使用Tarball安装特殊软件

某些特殊用途的软件,可能并没有提供RPM文件来进行安装。虽然可以制作SRPM来转成RPM进行安装,但是对于只有一台主机的情况,这样做并没有什么实际意义。

如果要管理相同的多台主机,制作RPM文件就会变得很有价值,因为可以方便地在多台主机上进行安装和升级。但是如果只是单机版的特殊软件,例如学术网络常用的MPICH、PVM等并行计算函数库,建议使用Tarball进行安装即可,不需要特别去查找RPM进行安装。

因此,在使用RPM来管理软件时,也需要注意到对于某些特殊用途的软件,可能并没有提供RPM文件来进行安装。在这种情况下,可以使用Tarball等方式进行安装,而不必特别去制作RPM文件。

使用Tarball测试新版软件

有时候我们需要使用新版的某些软件,但是原厂仅提供旧版软件。在这种情况下,可以使用Tarball安装新软件到 /usr/local/ 目录下面,这样就能够同时安装两个版本的软件在系统上了。大多数软件安装多个版本时不会相互干扰,可以用来测试新软件。

不过,在使用多个版本的软件时,需要注意使用的命令是新版软件还是旧版软件。可以通过在命令前加上完整的路径来指定使用哪个版本的软件,例如 /usr/local/bin/xxx。也可以通过修改环境变量来设置默认使用哪个版本的软件。

需要注意的是,使用新版软件可能会产生问题,因此在安装新版软件之前应该备份原有的软件,以便需要回到原有软件时可以恢复。

总结

RPM和Tarball各有各的优缺点,需要根据具体情况选择合适的方式进行安装。

对于已经提供RPM文件的软件,使用RPM进行安装可以方便地管理和升级软件。而且RPM可以解决依赖性问题,可以自动安装相关的依赖软件包。因此,如果有RPM文件的话,优先考虑使用RPM进行安装。

但是对于某些软件,可能没有提供RPM文件,或者软件的架构差异性太大,或者无法解决依赖属性问题,使用Tarball进行安装可能更为方便。通过使用Tarball安装,可以避免依赖性问题,同时也可以方便地安装新版本的软件。

因此,在选择使用RPM还是Tarball进行软件安装时,需要根据具体情况进行选择,权衡各自的优缺点,选择最合适的方式进行安装。

基础服务案例:以APache为例

在默认的情况下,你无需修改服务的配置文件,都通过系统默认值来处理你的服务即可。有个江湖默认口诀你可以将他背下来,这样你在处理服务的时候就不会窘迫了

  1. 安装:yum install (你的软件)
  2. 启动:systemctl start (你的软件)
  3. 开机启动:systemctl enable (你的软件)
  4. 防火墙:firewall-cmd --add-service=“(你的服务)”;firewall-cmd --permanent --add-service=“(你得服务)”
  5. 测试:用软件查看你得服务正常与否

下面让我们来做一下实验

  1. 安装所需的软件
[root@localhost ~]# yum install -y httpd php mariadb-server php-mysql
  1. 启动与开机启动,这两个步骤记得一定要进行
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2023-06-01 14:40:15 CST; 10s ago
     Docs: man:httpd(8)
  1. 防火墙
[root@localhost ~]# firewall-cmd --add-service="http"
success
[root@localhost ~]# firewall-cmd --permanent --add-service="http"
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens34
  sources: 
  services: dhcpv6-client http ssh      #这个启动才是重点
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  1. 测试

在最后的测试中,进入浏览器中,在网址输入自己的IP地址就会出现如下界面,那就代表成功了。你的Linux已经是Web服务器了

image-20230601144455399

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值