在我们学习和生产的环境中,经常需要安装现有系统中没有的软件来满足相应的需求。debian里管理deb文件的是 dpkg包管理器,而redhat管理rpm文件的rpm包管理器,就是我们的主角了。今天阿拉就CentOS6.9与CentOS7.3的环境,跟大伙唠一下红帽经典的包管理器——rpm。当然,要说rpm,当然离不开他的老伙计yum。自然,阿拉提及的未必全面,欢迎各位补充哟。科科。


因为linux开源软件提供的都是源码。编译源码虽然并不复杂,但在生产环境中,编译后的软件包无疑更为普及,也更方便安装和使用。为了生产效率,也为了提高Linux的通用性,就有了方便安装的编译后的二进制应用包。好吧,以上这些都是阿拉信口胡扯的。总之,二进制应用程序由二进制文件、库文件、配置文件、帮助文件组成。为了管理程序包,红帽推出了名为rpm的编辑器,这也就是我们今天的话题来由。


rpm包的命名如下:

name-VERSION-release.arch.rpm


举个例子的话就比如:

tree-1.6.0-10.el7.x86_64.rpm


VERSION是源码的版本号,release对应e17,是编译号,一啊不能用来指编译的次数。arch指平台,常见的有x86_64,指64位系统,i386代表32位系统,noarch则与平台无关,即适用于任何系统。很多程序的包不止一个。按其形式大致有如下几种:

Application-VERSION-ARCH.rpm: 主包 

Application-devel-VERSION-ARCH.rpm 开发子包 

Application-utils-VERSION-ARHC.rpm 其它子包 

Application-libs-VERSION-ARHC.rpm 其它子包


因为rpm自身也是个包,我们可以以此为例:

[root@centos7 Packages]# ls rpm-* 
rpm-4.11.3-21.el7.x86_64.rpm
rpm-apidocs-4.11.3-21.el7.noarch.rpm
rpm-build-4.11.3-21.el7.x86_64.rpm
rpm-build-libs-4.11.3-21.el7.i686.rpm
rpm-build-libs-4.11.3-21.el7.x86_64.rpm
rpm-cron-4.11.3-21.el7.noarch.rpm
rpm-devel-4.11.3-21.el7.i686.rpm
rpm-devel-4.11.3-21.el7.x86_64.rpm
rpm-libs-4.11.3-21.el7.i686.rpm
rpm-libs-4.11.3-21.el7.x86_64.rpm
rpm-plugin-systemd-inhibit-4.11.3-21.el7.x86_64.rpm
rpm-python-4.11.3-21.el7.x86_64.rpm
rpm-sign-4.11.3-21.el7.x86_64.rpm


对了,使用rpm之前记得光盘或iso要挂载呦。科科,不会的小伙伴自行百度啦!光是rpm就够呛,阿拉实在无力兼顾这个啦!

总之,我们可以从上对rpm的包名有个大体的认知。一般情况下,第一个直接软件名-版本号的就够我们用的啦!但是其他的,我们也有了解,不然以后耍帅都不够格呐!


鉴于我们的废话还要再说一会,接下来我们先小窥门径,安装个软件包试试看:

[root@centos7 Packages]# rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm 
warning: gcc-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        cpp = 4.8.5-11.el7 is needed by gcc-4.8.5-11.el7.x86_64
        glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-11.el7.x86_64
        libmpc.so.3()(64bit) is needed by gcc-4.8.5-11.el7.x86_6


看运行结果,第一行看着有点懵,我们后面说,第二行,清晰晰写着error。error后面Failed dependencies是说由于依赖关系,当前软件需要安装以下几个包后才能安装。这里就要提到一个概念了。

包之间可能存在依赖关系,甚至循环依赖。


不懂,好,让我们继续刚才的。既然安装gcc需要cpp,那我们就干脆装一下好了。

[root@centos7 Packages]# rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm 
warning: cpp-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        libmpc.so.3()(64bit) is needed by cpp-4.8.5-11.el7.x86_64


这样下去要装到什么时候啊!正常人都会这样想的。

关键是,哪个libmpc.so.3的又是个什么鬼啊!装一下试试。诶,tab补全不了。嗯~硬敲!

[root@centos7 Packages]# rpm -ivh libmpc.so.3
error: open of libmpc.so.3 failed: No such file or directory


作为和linux闹脾气的结果,丫果然给报了个错。

好吧,还记得我们提过的二进制应用程序由二进制文件、库文件、配置文件、帮助文件组成的概念吗?这个libmpc开头的,是一个库文件啦!库文件里一般存放算法和函数、变量或类之类可供程序调用的信息。你可以简单的将其理解为仓库。


包的依赖关系很是麻烦,于是解决依赖包的管理工具yum也就应运而生了。类似的linux常用包管理器有:

yum:rpm包管理器的前端工具 

apt-get:deb包管理器前端工具 

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具 


关于库文件相关的命令则如下:

ldd /PATH/TO/BINARY_FILE 查看二进制程序所依赖的库文件 

ldconfig 加载库文件 

/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件 名及文件路径映射关系 

相关配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 

相关缓存文件:/etc/ld.so.cache 


现在再来重申概念实在微妙。不过我们事先熟悉了部分理念,现在不来总结实在浪费。嘛嘛,阿拉会用尽量精简的言语啦!

 包管理器的功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作

包文件组成 (每个包独有):RPM包内的文件;RPM的元数据,如名称版本依赖性描述等;安装或卸载时运行的脚本 

数据库(公共):/var/lib/rpm (程序包名称及版本、依赖关系、功能说明、包安装后生成的各文件路径及校验码信息)

[root@centos7 Packages]# ls /var/lib/rpm 
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5


要获取rpm可直接安装的包非常容易啦!我们可以从本地ISO镜像直接安装,当然镜像可以自官网得到,地址为https://www.centos.org/download/。官网上提供有阿里云、搜狐等的国内链接,在国内下载更快呦。 另外Fedora-EPEL和Rpmforge也是官方及其推广的网站。不过第三方的包还是要仔细检查下其合法性及完整性哟,不然丢失数据就得不偿失啦!

同时,rpm我们是可以自己制作的,此处不再细说。其实阿拉还没学到啦,科科。


终于要真实的说到rpm啦!啦啦啦,让我们先瞅瞅这个能够进行安装、卸载、升级、查询、校验、数据库维护的家伙的用法!

安装:

rpm {-i|--install} [install-options] PACKAGE_FILE… 安装完成不提示,安装失败会报错

    -v: (verbose)安装完成后显示包名 

    -vv: 显示详细安装过程(基本不用,但可以看到安装包的详细步骤)

    -h: 以#显示进度 

    rpm -ivh PACKAGE_FILE ... 经典安装包命令

    rpm包安装 [install-options] 

        --test: 测试安装,但不真正执行安装,即dry run模式 

        --nodeps:忽略依赖关系         

         --replacepkgs 已安装过的包重装。

         --replacefiles 其他已安装的RPM包的文件,与即将装的RPM中的文件冲突时,则覆盖文件并安装。(如新旧版本软件冲突时)

        --nosignature: 不检查来源合法性 

       --nodigest:不检查包完整性 

       --noscripts:不执行程序包脚本 

            %pre: 安装前脚本; --nopre 

            %post: 安装后脚本; --nopost 

            %preun: 卸载前脚本; --nopreun 

            %postun: 卸载后脚本; --nopostun

#普通情况下安装包
[root@centos7 Packages]# rpm -ivh screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm 
warning: screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:screen-4.1.0-0.23.20120314git3c29################################# [100%]
#忽略依赖关系强制安装gcc包
[root@centos7 Packages]# rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm --nodeps 
warning: gcc-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:gcc-4.8.5-11.el7                 ################################# [100%]
#安装一个已安装过的包会提示
[root@centos7 Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
        package tree-1.6.0-10.el7.x86_64 is already installed
#强制覆盖重装已安装过的包
[root@centos7 Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm --replacepkgs 
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.6.0-10.el7                ################################# [100%]


升级(升级在生产环境中要谨慎使用):

rpm {-U|--upgrade} [install-options] PACKAGE_FILE... 

rpm {-F|--freshen} [install-options] PACKAGE_FILE... 

rpm -Uvh PACKAGE_FILE ... 当有旧的版本的包时,则卸载旧包再装新包,如没有旧包,直接装新包

rpm -Fvh PACKAGE_FILE ...  当有旧的包时,卸载旧包装新包,无旧包时,do nothing

--oldpackage:降级 

--force: 强制安装(相当于--replacepkgs  --replacefiles  --oldpackage的全部功能)


升级注意项: 

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此 ,同时保留旧版本内核为宜

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本 的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留(不适用于所有程序包)

哈哈,光升级软件多没意思,这次的例子阿拉来装个双内核给你们玩!CentOS7.3以外的7系列iso镜像不太好下,那我们就用CentOS6.8与6.9来玩。

#第一件事,我们在装系统的时候已经做过。铛铛铛铛,当然是把新的镜像文件添加到设备中了。
#这个过程在vmware上设置,不会的自行百度vmware上CentOS系统的搭建。
#首先,我们用uname -r查看一下当前内核版本。记住这个数字哦!
[root@CentOS6 ~]# uname -r
2.6.32-696.el6.x86_64
#其次,以防万一,我们来备份一个小玩意,这个文件是开机用的。嗯~看一眼这个文件然后暂且把它忘了吧
[root@CentOS6 ~]# cp /boot/grub/grub.conf /boot/grub/grub.conf.bak
[root@CentOS6 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=3a7f425f-d1ed-4f9c-9037-4df7275720b4 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-696.el6.x86_64.img
#遗憾的事阿拉在做这个实验的时候出了点小麻烦,是关于网络配置的。那就只能草草的说明一下了,抱歉啊!
#下面的结果没办法粘出来了,ssh用不了,呜呜
#把镜像添加好之后可能需要重启,光盘才会加载出来
#使用mount将两个光盘挂载起来(记得搞清对应关系呦)
[root@CentOS6 ~]# mount /dev/sr0 /media/CentOS6.8
[root@CentOS6 ~]# mount /dev/sr1 /media/CentOS6.9
#强制卸载内核,其实这一步不是必须的啦,但为了刺激,我们就这么干
[root@CentOS6 ~]# rpm -e kenrel --nodeps
#安装6.8的内核。记住,这之前绝对不要重启。科科,断电这种情况阿拉不管哟。科科,真到那步之能救援模式见咯
[root@CentOS6 ~]# cd /media/CentOS6.8/Packages
[root@CentOS6 Packages]# rpm -ivh kenrel-2.6.32-642.el6.x86_64
#安装完成后我们再去看一下刚开始的/boot/grub/grub.conf文件,会发现它的内容还是和之前一样
#为了能够正常启动,我们要把里面的2.6.32-696.el6.x86_64改为2.6.32-642.el6.x86_64
[root@CentOS6 Packages]# cd /boot/grub
[root@CentOS6 grub]# vim grub.conf
#在编辑模式下,执行:%s/-696.e16/-642.e16/g,然后wq退出
#这样就可以正常启动了。怎样,6.9的系统上装了个6.8的内核是不是觉得自己酷酷哒!(呀呸,版本更低了有什么得意的?!)
#咳咳,开机了我们就继续了啊。不把下面的进行完,要出去秀可是会被打的!
#总之,呃,例行挂载。
[root@CentOS6 ~]# mount /dev/sr0 /media/CentOS6.8
[root@CentOS6 ~]# mount /dev/sr1 /media/CentOS6.9
#废话不多说,准备装6.9内核
[root@CentOS6 ~]# cd /media/CentOS6.9/Packages
#用uname -a查询会发现内核版本还是6.8的kenrel-2.6.32-642.el6.x86_64
#用-Uvh的话,科科,可以一试呦。不过是覆盖罢了,从头开始就可以了哟。对了,记得grub.conf的设置呦
#阿拉这里就只用下面这个咯。
[root@CentOS6 Packages]# rpm -ivh kenrel-2.6.32-696.el6.x86_64
#装过之后也没有完成的提示。那么,装上没有呢?让我们去/boot/grub/grub.conf瞅一瞅
[root@CentOS6 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=3a7f425f-d1ed-4f9c-9037-4df7275720b4 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-696.el6.x86_64.img
title CentOS 6 (2.6.32-642.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=3a7f425f-d1ed-4f9c-9037-4df7275720b4 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-642.el6.x86_64.img
#因为我们先装的旧版本,所以这里不需要加--什么的选项。如果先装6.8再装6.9的话要加--oldpackage或--force哦
#默认会进入上面的系统了,想要开机自动进入6.8系统的话要把二者的位置换一下哟。


下面是包查询:

rpm {-q|--query} [select-options] [query-options] 

-q 软件包名  查询已安装过的软件包名。

-qa 列出所有的已安装过的rpm包

            -qa "name*"

            -qa |grep name

        -qf 查询一个文件来自于哪一个rpm包 (已安装的rpm)

        -q --changelog 版本更新日志

        -qc 查询软件包的配置文件(不是所有包都有配置文件)

        -qd 查询软件包的帮助文档

        -qi 查询软件包的详细信息

        -ql 查询软件包所安装到系统当中的所有文件路径

        -q --scripts 查询软件包自带的脚本

        -q --provides 查询自身的功能

        -qR 查询实现自身的功能需要什么能力

        -qp[licd] rpm包 查看未安装的rpm包的各项信息

#查询安装软件的包名
[root@centos7 ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64
#-qf后跟文件名,查询文件来源于哪个包
[root@centos7 ~]# rpm -qf `which pwd`
coreutils-8.22-18.el7.x86_64
#查询screen在系统中的所有文件路径,下面太长阿拉省略了哦
[root@centos7 ~]# rpm -ql screen
/etc/pam.d/screen
/etc/screenrc
/usr/bin/screen
/usr/lib/tmpfiles.d/screen.conf
...


包卸载(咳咳,这个就不用演示了吧):

rpm -e 软件名

    --nodeps 忽略依赖性。强制卸载


包校验,即验证包来源合法性及完整性。软件有公钥和私钥一说,这个在没学过操作系统和数据结构的阿拉理解起来也真心迷茫。简而言之,公钥负责加密,私钥负责解密私钥负责签名,公钥负责验证。

还记得我们安装软件时一直出现的warning这一行吗?

[root@centos7 Packages]# rpm -ivh screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm 
warning: screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
        package screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64 is already installed


"Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY"这部分就设计到包校验了。包校验相关命令如下: 

rpm -K|checksig rpmfile 检查包的完整性和签名 

    --import GPG-KEY....  导入公钥

    -qa "gpg-pubkey*"   显示所有已导入的公钥

    -e gpg-pubkey....

    -K rpm包 验证某rpm签名是否合法

下面我们就来玩玩看。

[root@centos7 Packages]# rpm -K tree-1.6.0-10.el7.x86_64.rpm 
tree-1.6.0-10.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5)


也许这里你就会纳闷了,诶,怎么是NOT OK呢?我用的镜像就是从官网上下载的啊???

别急别急,毕竟我们还没有导入公钥。

#在挂载后的光盘里,我们可以看到一个RPM-GPG-KEY-CentOS-7的文件
[root@centos7 media]# ls
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              p_w_picpaths    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TB
#file一下这个文件,显示为公钥
[root@centos7 media]# file RPM-GPG-KEY-CentOS-7
RPM-GPG-KEY-CentOS-7: PGP public key block
#导入公钥
[root@centos7 media]# rpm --import RPM-GPG-KEY-CentOS-7
#用-qa查询,会发现这个文件生成了个软件包。(不服气的-e删除,再-qa看看能不能查看到)
[root@centos7 media]# rpm -qa "gpg-pubkey*"
gpg-pubkey-f4a80eb5-53a7ff4b
#再用-K查询,就各方面都OK啦!
[root@centos7 media]# cd Packages/
[root@centos7 Packages]# rpm -K tree-1.6.0-10.el7.x86_64.rpm 
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


然后就到rpm数据库了。

数据库重建: /var/lib/rpm 

rpm {--initdb|--rebuilddb} 

    initdb: 初始化 如果事先不存在数据库,则新建之。否则,不执行任何操作 

    rebuilddb:重建已安装的包头的数据库索引目录 

有心的小伙伴可以试试把这个库清空,再-qa哟。阿拉就不做这个实验啦,科科。记得提前备份哟。


呜哇,终于说完小兔崽子rpm了。幸好yum懂事,不然妈妈非得累死不行。

YUM全名Yellowdog Update Modifier,这小黄狗能干的事情多着咧。他既不需要你一步步找到软件包的位置,也无需兼顾各种包间的依赖性。之所以人家有特殊的跑分,当然离不开性能和油库库存啦。性能而言,yum是用python语言写的,简短精悍,而说到油库,就是指yum仓库了。

yum repository,即yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下) 

yum客户端配置文件: 

/etc/yum.conf:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置 


/etc/yum.conf是公共配置,所以我们一般都是在/etc/yum.repos.d/下新建.repo结尾的文件啦。其格式如下:

[repositoryID] 

name=Some name for this repository 

baseurl=url://path/to/repository/ ( http:// https:// ftp:// file:// )

enabled={1|0}

gpgcheck={1|0} 

gpgkey=URL 

enablegroups={1|0} 

failovermethod={roundrobin|priority} 

roundrobin:意为随机挑选,默认值 

priority:按顺序访问 

cost= 默认为1000 


yum的repo配置文件中可用的变量有: 

$releasever: 当前OS的发行版的主版本号 

$arch: 平台,i386,i486,i586,x86_64等 

$basearch:基础平台;i386, x86_64 

$YUM0-$YUM9:自定义变量 

例如:

baseurl=http://server/centos/$releasever/$basearch/ 

baseurl=http://server/centos/7/x86_64 

baseurl=http://server/centos/6/i384 30 


下面我们自己写一个.repo的文件(为了使文件效果可见,建议原/etc/yum.repos.d/下文件下转移到别的文件夹):

[root@centos7 yum.repos.d]# vim ala.repo
[base]
name=Centos $releasever repo
baseurl=http://172.17.0.1/centos/$releasever/
gpgcheck=0
[epel]
name=Centos $releasever epal repo
baseurl=http://172.16.0.1/fedora-epel/$releasever/$basearch
gpgcheck=0

配置完成之后yum clean all清除缓存,yum makecache新建缓存,yum install 包名就可以安装啦。


除此之外我们还可以从网上下载yum的仓库配置文件。

阿里云repo文件: http://mirrors.aliyun.com/repo/ 

CentOS系统的yum源(可以自己配置的哟)

阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/ 

EPEL的yum源: 

阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64 


下面是yum命令详解及一些可能用到用到的命令:

yum命令的用法: yum [options] [command] [package ...] 

yum-config-manager --disable “仓库名" 禁用仓库  

yum-config-manager --enable “仓库名” 启用仓库 yum-config-manager 

显示仓库列表: yum repolist [all|enabled|disabled] 

显示程序包: 

    yum list 

    yum list [all | glob_exp1] [glob_exp2] [...] 

    yum list {available|installed|updates} [glob_exp1] [...] 

安装程序包: 

yum install package1 [package2] [...] 

yum reinstall package1 [package2] [...] 

升级程序包: 

yum update [package1] [package2] [...] 

yum downgrade package1 [package2] [...] (降级) 

检查可用升级: yum check-update 

卸载程序包: yum remove | erase package1 [package2] [...]

查看程序包information: yum info [...] 

查看指定的特性(可以是某文件)是由哪个程序包所提供: yum provides | whatprovides feature1 [feature2] [...]  

清理本地缓存: 

清除/var/cache/yum/$basearch/$releasever缓存 

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]  

构建缓存: yum makecache

搜索:yum search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息 

查看指定包所依赖的capabilities: yum deplist package1 [package2] [...] 


查看yum事务历史: 

yum history [info|list|packages-list|packages-info| 

summary|addon-info|redo|undo| 

rollback|new|sync|stats] 

yum history 

yum history info 6 

yum history undo 6 

日志 :/var/log/yum.log 

安装及升级本地程序包: 

yum localinstall rpmfile1 [rpmfile2] [...] (用install替代) 

yum localupdate rpmfile1 [rpmfile2] [...] (用update替代) 


包组管理的相关命令: 

yum groupinstall group1 [group2] [...] 

yum groupupdate group1 [group2] [...] 

yum grouplist [hidden] [groupwildcard] [...] 

yum groupremove group1 [group2] [...] 

yum groupinfo group1 [...] 

yum的命令行选项: 

--nogpgcheck:禁止进行gpg check 

-y: 自动回答为“yes” 

-q:静默模式 

--disablerepo=repoidglob:临时禁用此处指定的repo 

--enablerepo=repoidglob:临时启用此处指定的repo 

--noplugins:禁用所有插件 


最后是系统光盘配置为yum仓库。需要知道的是安装系统时默认配置的yum仓库为官网链接,所以平常我们可以把系统光盘上的rpm包设置为本地yum仓库。配置如下:

(1) 挂载光盘至某目录,例如/media/cdrom 

# mount /dev/cdrom /media/cdrom 

(2) 创建配置文件 

[CentOS7] 
name=Centos media
baseurl=file:///media/cdrom 
gpgcheck=1 
enabled=1


配置完成后创建yum仓库: createrepo [options]


最后的yum写的少了点。喂喂,rpm都掌握了的话,这点都不在话下啦。迷惑是思考的圆圈,哦不,源泉。好啦,阿拉去B站溜达了,加纳!