Linux系统软件包的管理

该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

虽然使用源码编译安装可以具有提高速度个性化的定制等优点,但对于 Linux发行商来说,则不容易管理软件包,毕竟不是每个人都会进行源码编译的,如果能够将软件预先在相同的硬体与系统上面编译好在发布的话,不就能够让相同的 Linux 发行版,同时拥有相投的版本了吗,如果再加上简易的安装/移除/管理等机制的话,对于软体控管就会更加简单,大多数现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件,而软件通常以「包」的形式存储在仓库「repository」中,对软件包的使用和管理被称为包管理,本章我们将介绍 RedHat 系统中为我们提供的解决方案,RPM和YUM包管理机制.

由于自由软件的蓬勃发展,加上大型 Unix-Like 主机的强大性能,让很多软件开发者将他们的软件发布出来,后来 Linux 发展起来后,由一些企业或社区打包成为特定的发行版,RedHat就是这方面的龙头老大,但后来发现这些发行版的软件管理机制相当的混乱,没有一种统一的管理方式,这时候各大厂商开始着力研究如何有效的管理这些文件,RedHat提出了rpm和Yum仓库的解决方案,时至今日Yum已成为服务器上使用最多的软件管理工具.此外还有一种dpkg格式的软件安装包,是社区来维护的,下面我们来具体介绍这两种软件包吧.

目前在 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
total 3.1M
-r--r--r--. 1 root root 1.8M Jan 17  2018 bind-9.9.4-61.el7.x86_64.rpm
-r--r--r--. 1 root root 1.2M Jan  8  2018 httpd-2.4.6-80.el7.x86_64.rpm

bind      .9.9.4    -61    .el7    .x86_64    .rpm
↑           ↑        ↑       ↑        ↑        ↑
①           ②        ③       ④        ⑤        ⑥

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 [选项] 包名称 ]

        -i              #安装一个新的rpm软件包
        -v              #显示安装详细过程
        -h              #以"#"号显示安装的进度

        --nodeps        #不检测依赖安装
        --force         #强制安装,不管软件是否存在,都强制重新安装(修复软件)
        --test          #测试安装,不真正安装,检测软件依赖关系
        --prefix        #指定安装路径,不按照默认路径安装
        --replacefiles  #以覆盖写入方式安装
        --replacepkgs   #重复安装软件
        --justdb        #更新软件在数据库内的相关信息
        --nosignature   #忽略数字证书检测
        --noscripts     #禁止软件安装过程中执行某些命令

一般来说RPM的安装选项与参数大约就是这些了,通常建议直接使用 -ivh 就好了,如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用 "暴力安装" ,就是通过 --force 去强制安装,因为可能会发生很多不可预期的问题,除非你很清楚的知道使用上面的参数后,安装的结果是你预期的.

◆RPM 查询信息◆

RPM在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据文件,另外RPM也可以查询未安装的RPM软件资料,下面我们先来看看可用的参数吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

[查询已安装软件]

        -q 软件名        #查看指定软件是否安装
        -qa              #查看系统中所有已安装的软件
        -qi 软件名       #查看指定软件的详细信息
        -qc 软件名       #列出软件所以设置文件
        -qd 软件名       #列出软件所以帮助文件
        -ql 软件名       #查看指定软件安装的目录和文件列表
        -qR 软件名       #查看指定软件的依赖关系
        –qf 文件或目录   #查询文件或者目录,是由哪个软件包安装产生的

[查询未安装软件]

        -qpi 包全名      #查看指定未安装软件的详细信息
        -qpl 包全名      #查看指定未安装软件的默认安装位置(预览)
        -qpR 包全名      #查看指定未安装软件的依赖关系

实例1:使用rpm -qi查看一个软件的详细说明.

[root@localhost ~]# rpm -qi tree

Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: Thu 15 Nov 2018 07:18:16 AM EST
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, Wed 02 Apr 2014 05:33:48 PM EDT, Key ID 199e2f91fd431d51
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : Mon 27 Jan 2014 12:29:58 PM EST
Build Host  : x86-020.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.

实例2:使用rpm -ql查看软件安装释放的目录.

[root@localhost ~]# rpm -ql tree

/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

实例3:使用rpm -qR查看软件依赖关系.

[root@localhost ~]# rpm -qR tree

libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

实例4:使用rpm -qf查看指定文件是由那个包安装的.

[root@localhost ~]# rpm -qf /bin/bash
bash-4.2.46-30.el7.x86_64

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64

实例5:使用rpm -qpi查看一个未安装软件详细信息.

[root@localhost ~]# rpm -qpi bind-9.9.4-61.el7.x86_64.rpm

warning: bind-9.9.4-61.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Name        : bind
Epoch       : 32
Version     : 9.9.4
Release     : 61.el7
Architecture: x86_64
Install Date: (not installed)
Group       : System Environment/Daemons
Size        : 4556343
License     : ISC
Signature   : RSA/SHA256, Wed 17 Jan 2018 05:28:47 AM EST, Key ID 199e2f91fd431d51
Source RPM  : bind-9.9.4-61.el7.src.rpm
Build Date  : Wed 17 Jan 2018 04:15:44 AM EST
Build Host  : x86-034.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://www.isc.org/products/BIND/
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
Description :
BIND (Berkeley Internet Name Domain) is an implementation of the DNS
(Domain Name System) protocols. BIND includes a DNS server (named),
which resolves host names to IP addresses; a resolver library
(routines for applications to use when interfacing with DNS); and
tools for verifying that the DNS server is operating properly.

◆RPM 升级软件◆

使用 RPM 来升级真是太简单了,就以 -Uvh 或 -Fvh 来升级即可,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样的,不过 -U 与 -F 的意义还是不太一样的,下面我们来开一下它的配置信息吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -v              #显示安装详细过程
        -h              #以"#"号显示安装的进度
        -U              #升级安装,若没安装,则直接安装,若安装有旧版本,则升级安装
        -F              #升级安装,若没安装,则不安装,必须有旧版本,才进行升级安装

由上面的说明来看,如果你想要大量的升级系统旧版本的软件,使用 -Fvh 则是比较好的作法,因为没有安装的软件不会安装到你的系统,但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的机器上没有安装该软件,那么该软件并不会被安装在你的 Linux 主机上面,所以请重新以 ivh 来安装吧.

◆RPM 验证证书◆

验证(Verify)的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是使用 "/var/lib/rpm" 下面的数据库数据内容来比对目前 Linux 系统的环境下的所有软件信息,也就是说当你有文件不小心遗失,或者因为你误删除掉了某软件的文件,我们就用这个简单的方法来验证一下原本的软件系统吧,好让你了解这一阵子到底是修改到哪些文件,下面我们先来看一下它的常用参数吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -V 软件名        #验证指定软件安装后的完整性,及文件的元数据是否发生变化
        -Va             #列出目前系统上所有被改动过的文件
        -Vf 文件名       #验证指定文件是否被修改过
        -Vp 文件名       #列出该软件内可能被改动过的文件

下面,我们通过验证一个文件,看其是否被修改过吧.

[root@localhost ~]# rpm -Vf /etc/profile

S.5....T.      c           /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

-rw-r--r--. 1 root root 3.2K Feb 28  2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[root@localhost ~]# ls -lh /mnt/RPM-GPG-KEY-redhat-release

-r--r--r--. 1 root root 3.2K Feb 28  2018 /mnt/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
gpg-pubkey-2fa658e0-45700c69
gpg-pubkey-fd431d51-4ae0493b

[root@localhost ~]# rpm -qi gpg-pubkey-2fa658e0-45700c69
Name        : gpg-pubkey
Version     : 2fa658e0
Release     : 45700c69
Architecture: (none)
Install Date: Thu 15 Nov 2018 09:39:17 AM EST
Group       : Public Keys
Size        : 0
License     : pubkey
Signature   : (none)
Source RPM  : (none)
Build Date  : Fri 01 Dec 2006 06:05:13 AM EST
Build Host  : localhost
Relocations : (not relocatable)
Packager    : Red Hat, Inc. (auxiliary key) <security@redhat.com>
Summary     : gpg(Red Hat, Inc. (auxiliary key) <security@redhat.com>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11.3 (NSS-3)

mQGiBEVwDGkRBACwPhZIpvkjI8wV9sFTDoqyPLx1ub8Sd/w+YuI5Ovm49mvvEQVT
VLg8FgE5JlST59AbsLDyVtRa9CxIvN5syBVrWWWtHtDnnylFBcqG/A6J3bI4E9/A
UtSL5Zxbav0+utP6f3wOpxQrxc+WIDVgpurdBKAQ3dsobGBqypeX6FXZ5wCgou6C
=d/bm
-----END PGP PUBLIC KEY BLOCK-----

重点就是最后面出现的那一串乱码啦,那可是作为数字证书非常重要的一环,如果你忘记加上数字证书,很可能很多原版软件就不能让你安装,除非你利用 rpm 时选择略过证书.

◆RPM 卸载软件◆

移除的选项很简单,直接通过 -e 即可移除,不过经常发生由于软件依赖关系而无法卸载的情况,下面看一下他的参数吧

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -e        #卸载软件(注意卸载顺序)
        --nodeps  #不检测依赖卸载

由于 RPM 软件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的数据损坏,果真如此的话,我们可以使用 --rebuilddb 这个选项来重建一下数据库文件.

◆RPM 提取文件◆

例如提取tree目录下的文件并恢复到指定文件

[root@localhost ~]# ls -l
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm

[root@localhost ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv     #提取tree包中的文件
./usr/bin/tree
./usr/share/doc/tree-1.6.0
./usr/share/doc/tree-1.6.0/LICENSE
./usr/share/doc/tree-1.6.0/README
./usr/share/man/man1/tree.1.gz
177 blocks

[root@localhost ~]# ll
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm
drwxr-xr-x 4 root root    30 Sep 20 05:17 usr

## 软件管理之YUM

我们在本章一开始开始的地方谈到过 YUM 这个东西,这个 YUM 是通过分析 RPM 的标头数据后,根据各软件的相关性,制作出软件依赖解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或移除与升级的问题,事实上RedHat在放出系统时,已经搭建好了提供给全球使用的软件源,所以理论上,我们不需要处理任何设定值,只要能够连接上Intelnet,就可以使用Yum来更新数据了.

◆本地YUM源配置◆

虽然Yum工具,只需要你的主机连接互联网,就可以直接使用,但是有些时候我们需要自定义Yum源实现加速,下面我们将配置一个本地Yum源,来使用光盘中的软件,其他网络配置操作步骤相同,只是会在baseurl参数后面会有所区别.

1.首先默认情况下,我们的系统是没有给我们配置Yum源的,在这里我们需要在指定配置文件中创建一个以.repo结尾的文件.

[root@localhost ~]# cat /etc/yum.repos.d/redhat.repo

[server]
name="redhat yum"
baseurl=file:///mnt
enabled=1
gpgcheck=0

>>[server]   ----------> 代表容器的名称,可以随便写
>>name       ----------> 给容器起的名字,可自定义
>>mirrorlist ----------> 列出容器可以使用的镜像站点,不用可屏蔽
>>baseurl    ----------> 默认镜像地址,可写本地地址,也可写FTP地址
>>enabled=1  ----------> 就是让容器启动
>>gpgcheck=0 ----------> 关闭证书检测
>>gpgkey     ----------> 证书保存位置

2.第一步配置完毕以后,接下来我们来检查一下配置是否生效,和生成缓存文件.

[root@localhost ~]# yum repolist all
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
repo id   repo name                                               status
Server   "rhel7"                                                  enabled: 5,099
repolist: 5,099

[root@localhost ~]# yum makecache
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                             | 4.3 kB  00:00:00
Metadata Cache Created

到此本地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"
yum-rhn-plugin-2.0.1-10.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-3.4.3-158.el7.noarch

[root@localhost ~]# rpm -qa |grep "yum" |xargs rpm -e --nodeps
[root@localhost ~]# rpm -qa |grep "python-urlgrabber" |xargs rpm -e --nodeps
[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
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-50.el7.noarch.rpm
[root@localhost ~]# wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/python-urlgrabber-3.10-9.el7.noarch.rpm

[root@localhost ~]# ls -lh
total 1.6M
-rw-r--r-- 1 root root 109K Nov 12 10:19 python-urlgrabber-3.10-9.el7.noarch.rpm
-rw-r--r-- 1 root root 1.3M Nov 12 10:27 yum-3.4.3-161.el7.centos.noarch.rpm
-rw-r--r-- 1 root root  28K Jul  4  2014 yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
-rw-r--r-- 1 root root  34K Nov 12 10:27 yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
-rw-r--r-- 1 root root 122K Nov 12 10:27 yum-utils-1.1.31-50.el7.noarch.rpm

[root@localhost ~]# rpm -ivh --nodeps *.rpm

4.更换YUM源地址,此处我们使用阿里云的源.

[root@localhost ~]# rm -fr /etc/yum.repos.d/*
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

5.修改CentOS-Base.repo文件中的$releasever全部替换为版本号7,直接更新缓存即可.

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo

:%s/$releasever/7/g

[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache

◆YUM 仓库查询◆

[root@localhost ~]# yum --help

命令语法:[ yum [选项] 包名称 ]

        -y              #自动化安装,无需应答
        installroot     #安装时指定安装位置
        search          #搜索指定包文件
        list            #显示全部可用列表
        info            #显示软件相关信息
        grouplist       #查询所有已安装和可安装的软件组
        groupinfo       #列出软件组中包含的软件
        provides        #通过关键字查找安装包

指定安装位置: 使用installroot指定软件安装位置.

[root@localhost ~]# yum install -y --installroot=/tmp/ tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                                  | 4.3 kB  00:00:00
(1/2): Server/group_gz                                                  | 145 kB  00:00:00
(2/2): Server/primary_db                                                | 4.1 MB  00:00:00
Package tree-1.6.0-10.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]#

查软件信息: 使用yum info命令查看软件具体信息.

[root@localhost ~]# yum info tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Installed Packages
Name        : tree
Arch        : x86_64
Version     : 1.6.0
Release     : 10.el7
Size        : 87 k
Repo        : installed
From repo   : Server
Summary     : File system tree viewer
URL         : http://mama.indstate.edu/users/ice/tree/
License     : GPLv2+
Description : The tree utility recursively displays the contents of directories in a
            : tree-like format.  Tree is basically a UNIX port of the DOS tree
            : utility.

查包文件: 使用provides通过关键字查询指定包,如下可知tree命令是由tree-1.6.0-10.el7.x86_64包安装的.

[root@localhost ~]# yum provides tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : Server

tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : @Server

◆YUM 清理缓存◆

[root@localhost ~]# yum clean packages       #清除缓存目录下的软件包
[root@localhost ~]# yum clean headers        #清除缓存目录下的 headers
[root@localhost ~]# yum clean oldheaders     #清除缓存目录下旧的 headers

[root@localhost ~]# yum clean all            #清除下载的临时软件包和缓存
[root@localhost ~]# yum makecache            #建立软件包缓存,提高查询速度
[root@localhost ~]# yum update               #更新所有需要更新的软件&内核

◆yum安装卸载◆

[root@localhost ~]# yum install [软件名]              #全部安装
[root@localhost ~]# yum groupinsall [软件组名]        #安装程序组

[root@localhost ~]# yum  remove [软件名]              #删除软件
[root@localhost ~]# yum  groupremove [软件组名]       #删除软件组

◆yum更新升级◆

[root@localhost ~]# yum update [软件名]              #全部更新
[root@localhost ~]# yum check-update                #检查可更新的程序
[root@localhost ~]# yum upgrade [软件名]             #升级指定程序包
[root@localhost ~]# yum groupupdate [组软件名]       #升级程序组

◆安装图形界面◆

[root@localhost ~]# yum -y install xorg*
[root@localhost ~]# yum -y groupinstall "X Window System"
[root@localhost ~]# yum -y groupinstall Desktop
[root@localhost ~]# yum -y groupinstall "Chinese Support"
[root@localhost ~]# startx  

## 软件管理之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

命令语法:[ dpkg [选项] 包名称 ]

        -i              #安装软件包
        -r              #删除软件包
        -P              #删除软件包的同时删除其配置文件
        -L              #显示软件包文件列表
        -l              #显示已安装软件包列表
        -c              #显示软件包内文件列表
        -s              #显示指定软件包的详细状态
        --unpack        #解开软件包
        --confiugre     #配置软件包

安装软件: 通过使用-i选项安装pack.deb软件.

root@kali:~# dpkg -i pack.deb
root@kali:~# dpkg --install pack.deb

删除软件: 通过使用-rP选项删除pack.deb软件(包括配置文件).

root@kali:~# dpkg -rP pack.deb
root@kali:~# dpkg --remove pack.deb

列出软件包: 通过使用-l选项列出系统已安装的软件包.

root@kali:~# dpkg -l

详细信息: 通过使用-s显示指定软件详细信息.

root@kali:~# dpkg -s bash
root@kali:~# dpkg -I 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 [选项] 包名称 ]

        -i              #安装软件包
        list            #根据名称列出软件包
        search          #搜索软件包描述
        show            #显示软件包细节
        install         #安装软件包
        remove          #移除软件包
        autoremove      #卸载所有自动安装且不再使用的软件包
        update          #更新可用软件包列表
        upgrade         #通过安装/升级软件来更新系统

apt-get安装:

root@kali:~# sudo apt-get install package             #安装包
root@kali:~# sudo apt-get install package --reinstall #重新安装包
root@kali:~# sudo apt-get -f install                  #修复安装
root@kali:~# sudo apt-get bulid-dep package           #安装相关的编译环境

apt-get删除:

root@kali:~# sudo apt-get remove package              #删除包
root@kali:~# sudo apt-get remove package --purge      #完全删除包
root@kali:~# sudo apt-get -f autoremove               #把软件附加项也删掉
root@kali:~# sudo apt-get autoremove --purge software #删除的更彻底些

apt-get更新:

root@kali:~# sudo apt-get update                       #更新源
root@kali:~# sudo apt-get upgrade                      #更新已安装的包
root@kali:~# sudo apt-get dist-upgrade                 #升级系统

apt-get修复:

root@kali:~# sudo apt-get source package                  #下载该包的源代码
root@kali:~# sudo apt-get clean && sudo apt-get autoclean #清楚无用的包
root@kali:~# sudo apt-get check                           #检查是否有损坏的依赖
root@kali:~# sudo dpkg -i package                         #安装后缀是deb的

apt-get搜索:

root@kali:~# sudo apt-cache search package                #搜索软件包
root@kali:~# sudo apt-cache show package                  #获取软件包信息
root@kali:~# sudo apt-cache depends package               #了解使用该包依赖哪些包
root@kali:~# sudo apt-cache redepends package             #查看该包被哪些包依赖

参考文献:Linux鸟哥私房菜,Linux运维之道

原文地址:https://www.cnblogs.com/LyShark/p/10221786.html