Linux系统软件包的管理
虽然使用源码编译安装可以具有提高速度个性化的定制等优点,但对于 Linux发行商来说,则不容易管理软件包,毕竟不是每个人都会进行源码编译的,如果能够将软件预先在相同的硬体与系统上面编译好在发布的话,不就能够让相同的 Linux 发行版,同时拥有相投的版本了吗,如果再加上简易的安装/移除/管理等机制的话,对于软体控管就会更加简单,大多数现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件,而软件通常以「包」的形式存储在仓库「repository」中,对软件包的使用和管理被称为包管理,本章我们将介绍 RedHat 系统中为我们提供的解决方案,RPM和YUM包管理机制.
目前在 Linux 界软件安装方式最常见的有两种,分别是:
● DPKG 包
这个机制最早是由 Debian Linux 社区所开发出来的,通过 dpkg 的包管理, Debian 打包软件就能够简单的安装,同时还能提供安装后的软件维护与更新,只要是衍生于 Debian 的其他 Linux 发行版都 dpkg 这个机制来管理软件的,包括 B2D,Ubuntu,Kali Linux 等.
● RPM 包
这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 Linux 发行版,就使用这个机制来作为软件安装的管理方式,包括 RedHat,Fedora,CentOS,SuSE等知名厂商都在使用它.
如前所述,不论是DPKG还是RPM,这些软件包或多或少都会有依赖关系问题,那么各大 Linux 发行商是如何解决这个问题的呢 ?
目前的 Linux 发行商,在dpkg管理机制上就开发出 APT 包管理工具, RPM 则依开发商的不同,有RedHat系统的YUM,以及SuSE系统的YOU,Mandriva系统的urpmi都在使用RPM下面我们使用的是RedHat系统,所以说使用的管理机制为 RPM 机制,所以我们使用YUM,下面就让我们来谈谈 RPM 与 YUM 的关系吧.
软件管理之RPM
RPM 全名是 “RedHat Package Manager” 简称则为 RPM 顾名思义,当初这个软件管理的机制就是由 Red Hat 这家公司开发出来的 RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制.
RPM命令是RPM软件包的管理工具,rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎,逐渐受到其他发行版的采用,RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度.
那么 RPM 包的特点有哪些呢 ?
⦁ 有专门的工具进行安装、卸载、升级和管理软件,管理起来更加方便.
⦁ 安装简洁、速度快,由于使用RPM无需编译所以安装效率非常高.
⦁ RPM包由于经过了封装,所以我们无法直接获取其源代码.
⦁ 由于经过了封装,所以其功能选择性差,功能定制不灵活.
RPM包的命名方式有哪些 ? i386,i586,i686,noarch,x86_64代表的含义是 ?
[root@localhost ~]# ls -lh |
1.软件名称:本例软件名为bind
2.软件版本:本例软件版本为9.9.4-61
3.发布次数:本例修改了61次
4.编译平台:编译平台有(el8=RHEL8,el7=RHEL7,el6=RHEL6)
5.适合平台:平台有(i386,i586,i686,noarch,x86_64)
6.打包格式:这里是rpm包,还有一种gpkg包.
好了,看了这么多内容,下面我们开始进入正题,分别来介绍这些命令的含义吧.
RPM 安装软件
因为安装软件是ROOT的工作,因此你得要是ROOT的身份才能够使用RPM这个命令的,用RPM来安装很简单,下面我们就来先看他的参数说明吧.
[root@localhost ~]# rpm --help |
一般来说RPM的安装选项与参数大约就是这些了,通常建议直接使用 -ivh 就好了,如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用 “暴力安装” ,就是通过 –force 去强制安装,因为可能会发生很多不可预期的问题,除非你很清楚的知道使用上面的参数后,安装的结果是你预期的.
RPM 查询信息
RPM在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据文件,另外RPM也可以查询未安装的RPM软件资料,下面我们先来看看可用的参数吧.
[root@localhost ~]# rpm --help |
实例1:使用rpm -qi
查看一个软件的详细说明.
[root@localhost ~]# rpm -qi tree |
实例2:使用rpm -ql
查看软件安装释放的目录.
[root@localhost ~]# rpm -ql tree |
实例3:使用rpm -qR
查看软件依赖关系.
[root@localhost ~]# rpm -qR tree |
实例4:使用rpm -qf
查看指定文件是由那个包安装的.
[root@localhost ~]# rpm -qf /bin/bash |
实例5:使用rpm -qpi
查看一个未安装软件详细信息.
[root@localhost ~]# rpm -qpi bind-9.9.4-61.el7.x86_64.rpm |
RPM 升级软件
使用 RPM 来升级真是太简单了,就以 -Uvh 或 -Fvh 来升级即可,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样的,不过 -U 与 -F 的意义还是不太一样的,下面我们来开一下它的配置信息吧.
[root@localhost ~]# rpm --help |
由上面的说明来看,如果你想要大量的升级系统旧版本的软件,使用 -Fvh 则是比较好的作法,因为没有安装的软件不会安装到你的系统,但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的机器上没有安装该软件,那么该软件并不会被安装在你的 Linux 主机上面,所以请重新以 ivh 来安装吧.
RPM 验证证书
验证(Verify)的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是使用 “/var/lib/rpm” 下面的数据库数据内容来比对目前 Linux 系统的环境下的所有软件信息,也就是说当你有文件不小心遗失,或者因为你误删除掉了某软件的文件,我们就用这个简单的方法来验证一下原本的软件系统吧,好让你了解这一阵子到底是修改到哪些文件,下面我们先来看一下它的常用参数吧.
[root@localhost ~]# rpm --help |
下面,我们通过验证一个文件,看其是否被修改过吧.
[root@localhost ~]# rpm -Vf /etc/profile |
你会发现在文件名 /etc/profile 之前有个 c 然后就是一堆奇怪的文字了,那个c代表的是配置文件,至于最前面的八个选项,我们在下面说明一下吧:
验证结果具体的信息:
s ————-> 文件大小是否改变
M ————-> 权限是否被改变
5 ————-> 文件的MD5校验和是否改变(即文件内容)
D ————-> 主从设备号是否改变(/dev/)
L ————-> 文件路径是否改变
U ————-> 文件的属主是否改变
G ————-> 文件的属组是否改变
T ————-> 文件的修改时间是否改变
文件类型具体分类:
c ————-> 配置文件
d ————-> 普通文件
g ————-> 鬼子文件,该文件不应在RPM包中
l ————-> 授权文件
r ————-> 描述文件
经过验证的功能,你就可以知道那个文件被更动过,那么如果该文件的变更是预期中的,那么就没有什么大问题,但是如果该文件是非预期的,那么是否被入侵了了呢,所以说一般配置文件被改动比较正常,要是二进制文件被改动,可能是被入侵了,我们就要提高警惕了啊,毕竟对于一个运维人员来说,背黑锅还是很不爽的啊.
谈完了程序的验证后,不知道你有没有发现一个问题,那就是,验证只能验证程序内的数据与 /var/lib/rpm/里面的数据是否对应而已,如果该程序数据库所提供的数据本身就有问题,那你使用验证的手段也无法确定该软件的正确性啊.下面就出现了数字证书的概念.
就像你自己的签名一样,我们的软件开发商原厂所推出的软件也会有一个厂商自己的证书系统,只是这个证书被数字化了而已,厂商可以生成一个专属的数字证书,并将该证书的公钥(public key) 放入其发行版中,当你要安装一个RPM时,系统会执行以下流程:
⦁ 首先必须找到原厂的公钥文件,然后进行安装
⦁ 然后安装RPM包时,会去提取RPM包中的证书信息,然后和本机安装的原厂证书进行验证
⦁ 如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告
我们 RedHat 使用的数字证书系统为 GNU 计划的 GnuPG (GNU Privacy Guard, GPG)可以通过加密运算,算出独一无二的专属金钥系统或者是数字证书系统,我们也会知道首先必须要安装原厂的GPG数位证书的公钥才行,以下是数字证书的存放位置,其有两份,操作系统中有一份,原厂光盘里也有一份.
[root@localhost ~]# ls -lh /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release |
从上面的输出结果,可知证书的位置,下面我们开始安装它.
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release |
那安装完成之后,那我们先列出金钥软件名称后,再以 -qi 的方式来查询看一下软件的信息吧.
[root@localhost ~]# rpm -qa |grep pubkey |
重点就是最后面出现的那一串乱码啦,那可是作为数字证书非常重要的一环,如果你忘记加上数字证书,很可能很多原版软件就不能让你安装,除非你利用 rpm 时选择略过证书.
RPM 卸载软件
移除的选项很简单,直接通过 -e 即可移除,不过经常发生由于软件依赖关系而无法卸载的情况,下面看一下他的参数吧
[root@localhost ~]# rpm --help |
由于 RPM 软件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的数据损坏,果真如此的话,我们可以使用 –rebuilddb 这个选项来重建一下数据库文件.
RPM 提取文件
例如提取tree目录下的文件并恢复到指定文件 |
软件管理之YUM
我们在本章一开始开始的地方谈到过 YUM 这个东西,这个 YUM 是通过分析 RPM 的标头数据后,根据各软件的相关性,制作出软件依赖解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或移除与升级的问题,事实上RedHat在放出系统时,已经搭建好了提供给全球使用的软件源,所以理论上,我们不需要处理任何设定值,只要能够连接上Intelnet,就可以使用Yum来更新数据了.
本地YUM源配置
虽然Yum工具,只需要你的主机连接互联网,就可以直接使用,但是有些时候我们需要自定义Yum源实现加速,下面我们将配置一个本地Yum源,来使用光盘中的软件,其他网络配置操作步骤相同,只是会在baseurl参数后面会有所区别.
1.首先默认情况下,我们的系统是没有给我们配置Yum源的,在这里我们需要在指定配置文件中创建一个以.repo结尾的文件.
[root@localhost ~]# cat /etc/yum.repos.d/redhat.repo |
2.第一步配置完毕以后,接下来我们来检查一下配置是否生效,和生成缓存文件.
[root@localhost ~]# yum repolist all |
到此本地Yum仓库就配置好啦,下面是一些拓展信息.
阿里云Yum源仓库地址
wget http://mirrors.aliyun.com/repo/Centos-6.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo
网易Yum源仓库地址
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
常用RPM包查询网站
curl https://centos.pkgs.org/
curl http://rpmfind.net/
curl https://dl.fedoraproject.org/pub/
网络YUM源配置
由于RedHat默认自带的YUM源需要注册才能更新,我们想不花钱也可以更新,需要将RedHat的YUM源替换成Centos的,如果你直接使用的是Centos的系统那么这一步可以跳过了,你可以直接使用官方提供的YUM仓库地址,下面我们来看一下如何替换RHEL系统的YUM文件吧.
1.查看RHEL7里面默认安装的YUM包文件,强制删除自带的YUM包,再见.
[root@localhost ~]# rpm -qa |grep "yum" |
3.下载好Centos的YUM包文件,并忽略依赖,强制安装.
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm |
4.更换YUM源地址,此处我们使用阿里云的源.
[root@localhost ~]# rm -fr /etc/yum.repos.d/* |
5.修改CentOS-Base.repo文件中的$releasever全部替换为版本号7,直接更新缓存即可.
[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo |
YUM 仓库查询
[root@localhost ~]# yum --help |
指定安装位置: 使用installroot
指定软件安装位置.
[root@localhost ~]# yum install -y --installroot=/tmp/ tree |
查软件信息: 使用yum info
命令查看软件具体信息.
[root@localhost ~]# yum info tree |
查包文件: 使用provides
通过关键字查询指定包,如下可知tree
命令是由tree-1.6.0-10.el7.x86_64
包安装的.
[root@localhost ~]# yum provides tree |
YUM 清理缓存
[root@localhost ~]# yum clean packages #清除缓存目录下的软件包 |
yum安装卸载
[root@localhost ~]# yum install [软件名] #全部安装 |
yum更新升级
[root@localhost ~]# yum update [软件名] #全部更新 |
安装图形界面
[root@localhost ~]# yum -y install xorg* |
软件管理之DPKG
“dpkg”是”Debian Packager”的简写,为”Debian”专门开发的软件管理系统,方便软件的安装、更新及移除.所有源自”Debian”的”Linux “发行版都使用”dpkg”,这个机制最早是由 Debian Linux 社区所开发出来的,通过 dpkg 的包管理, Debian 打包软件就能够简单的安装,同时还能提供安装后的软件维护与更新,只要是衍生于 Debian 的其他 Linux 发行版都 dpkg 这个机制来管理软件的,dpkg本身是一个底层的工具.上层的工具,如APT,被用于从远程获取软件包以及处理复杂的软件包关系,包括 B2D,Ubuntu,Kali Linux 等.
root@kali:~# dpkg --help |
安装软件: 通过使用-i
选项安装pack.deb
软件.
root@kali:~# dpkg -i pack.deb |
删除软件: 通过使用-rP
选项删除pack.deb
软件(包括配置文件).
root@kali:~# dpkg -rP pack.deb |
列出软件包: 通过使用-l
选项列出系统已安装的软件包.
root@kali:~# dpkg -l |
详细信息: 通过使用-s
显示指定软件详细信息.
root@kali:~# dpkg -s bash |
软件管理之APT
Advanced Package Tool又名apt-get,是一款适用于Unix和Linux系统的应用程序管理器.最初于1998年发布,用于检索应用程序并将其加载到Debian Linux系统.Apt-get成名的原因之一在于其出色的解决软件依赖关系的能力.其通常使用.deb-formatted文件,但经过修改后可以使用apt-rpm处理红帽的Package Manager(RPM)文件,Apt-get在Linux社区得到广泛使用,成为用来管理桌面、笔记本和网络的重要工具.随着Linux在企业中的普及,Windows和Mac用户了解如何使用apt-get加载应用程序有一定的好处.
root@kali:~# apt --help |
apt-get安装:
root@kali:~# sudo apt-get install package #安装包 |
apt-get删除:
root@kali:~# sudo apt-get remove package #删除包 |
apt-get更新:
root@kali:~# sudo apt-get update #更新源 |
apt-get修复:
root@kali:~# sudo apt-get source package #下载该包的源代码 |
apt-get搜索:
root@kali:~# sudo apt-cache search package #搜索软件包 |