本人从事IT行业已有十多年,有着丰富的实战经验,总结了大量的学习方法,更是积累了很多的学习资料,很高兴能在这里跟大家交流学习,希望能在这里跟大家共同进步和成长!

全套学习资料移步至公众号【学神来啦】更多学习资料添加扣扣资源群:661308959

本节所讲内容:

  8.1  使用rpm命令-安装-查看-卸载-rpm软件包

  8.2  yum管理软件包

  8.3  CentOS8中使用DNF管理软件包

  8.4  实战tar源码包管理-源码包安装方法

8.1  软件包的管理

软件包的类型

rpm二进制包------》已经使用GCC编译后的(二进制已经可以被操作系统直接执行了)

tar源码包-----》需要编译(源码包就是你能看懂的,基于字符的,还需要进行编译)

RPM概述:RPMRPM RedHat Package ManagerRPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、SUSE以及Turbo LinuxLinux的分发版本都有采用,可以算是公认的行业标准了。

kaili  apt install name.deb

8.1.1  rpm软件包的管理

rpm包的获取方式:

1、Centos系统镜像光盘  

2、网站rpmfind.net

3、比如安装mysql、nginx软件,我们可以去它的官方网站下载:

http://nginx.org/en/download.html

4、centos yum源上,也有rpm可以手动下载

https://www.centos.org/download/

rpm包格式的说明

例1:

[root@xuegod63 ~]# ls /mnt/BaseOS/Packages/zsh-5.5.1-6.el8_1.2.x86_64.rpm

/mnt/BaseOS/Packages/zsh-5.5.1-6.el8_1.2.x86_64.rpm

zsh     -5.       5.         1-                6.               el8.        x86_64.rpm

软件名 主版本号 次版本号 修订           release( )   操作系统版本   软件包是64位包

release(rpm自身的发行号,与程序源码的发行号无关,release还包含此包适用的系统版本)

#修订指是的第几次修改bug。   发布指的是:第几次发布。 发布时,可能只是对软件安装的默认参数做了修改,而没有其它改动。

例2:

[root@xuegod63 ~]# ls /mnt/BaseOS/Packages/atlas-3.10.3-7.el8.i686.rpm

/mnt/BaseOS/Packages/atlas-3.10.3-7.el8.i686.rpm

注: .i686 代表,此包是32位操作系统包。 64位操作系统是可以安装32位操作系统的包。 32位,安装不了64位的包。 而且在centso7开始,就没有32位操作系统。

例3:

[root@xuegod63 ~]# ls /mnt/AppStream/Packages/zsh-html-5.5.1-6.el8_1.2.noarch.rpm 

注:结尾有noarch,代表此包在32位和64位操作系统上都可以运行。 这类型包,里面通常是文本文件,如: shell脚本,html,txt 等。

root@xuegod63 ~]# uname -r  #查看内核版本。

4.18.0-193.el8.x86_64   #我的内核版本是4.18.0-193.el8,有x86_64就是64位操作系统

8.1.2  安装rpm软件

RPM工具使用分为安装、查询、验证、更新、删除等操作

命令格式:rpm [参数] 软件包

参数:

-i   是install的意思, 安装软件包

-v  显示附加信息,提供更多详细信息

-V  校验,对已经安装的软件进行校验

-h  --hash  安装时输出####标记

互动:rpm使用时,什么情况下使用软件包全名,什么时候使用软件包名?

全名:在安装和更新升级时候使用

包名:对已经安装过的软件包进行操作时,比如查找已经安装的某个包,卸载包等 ,使用包名。它默认是去目录/var/lib/rpm下面进行搜索。 当一个 rpm 包安装到系统上之后,安装信息通常会保存在本地的 /var/lib/rpm/目录下 

例1:从本地安装

[root@xuegod63 ~]# mount /dev/sr0 /mnt  #挂载,确保光盘镜像已经在虚拟机开机加载

[root@xuegod63 ~]# rpm -ivh /mnt/BaseOS/Packages/lrzsz-0.12.20-43.el8.x86_64.rpm

#本地安装lrzsz包,安装后可以使用rz和sz命令。

8.1.3  rpm查询功能

用法:rpm -q(query) 常与下面参数组合使用

-a(all)  查询所有已安装的软件包

-f(file)系统文件名(查询系统文件所属哪个软件包),反向查询

-i  显示已经安装的rpm软件包信息,后面直接跟包名

-l(list)  查询软件包中文件安装的位置

-p  查询未安装软件包的相关信息,后面要跟软件的命名

-R 查询软件包的依赖性

例:

[root@xuegod63 mnt]# rpm -q lrzsz   --->查询指定的包是否安装

[root@xuegod63 mnt]# rpm -qa     --->查询所有已安装包

例:查看passwd文件中包括bash的行。

[root@xuegod63 ~]# grep bash /etc/passwd    #grep后面加关键字,可以查找文件中的内容。

root:x:0:0:root:/root:/bin/bash

mk:x:1000:1000:mk:/home/mk:/bin/bash

[root@xuegod63 mnt]# rpm -qa | grep lrzsz    --->查询所有已安装包中带vim关键字的包

[root@xuegod63 ~]# which find     #查看find命令的路径

/usr/bin/find

[root@xuegod63 ~]# rpm  -qf /usr/bin/find   #查询文件或命令属于哪个安装包

查询已经安装的rpm包的详细信息或作用  rpm -qi  rpm包名

[root@xuegod63 ~]# rpm -qf `which find` #反引号中可以执行shell命令

[root@xuegod63 ~]# rpm -qi lrzsz

针对没有安装的RPM包,要加参数:  -p

[root@xuegod63 ~]# rpm -qpi \

/mnt/AppStream/Packages/php-mysqlnd-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64.rpm

Summary     : A module for PHP applications that use MySQL databases  

#php使用mysql数据库的一个模块

[root@xuegod63 mnt]# rpm -qpl  \

/mnt/AppStream/Packages/nginx-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64.rpm  

#查看rpm安装后,将生成哪些文件

8.1.4  查看软件包内容是否被修改

rpm -V包名

rpm -Vf 文件路径

例:

[root@xuegod63 ~]# which  find

/usr/bin/find

[root@xuegod63 ~]# rpm -qf /usr/bin/find

findutils-4.5.11-5.el7.x86_64

注:上面两条命令,等价于以下面这条命令:

[root@xuegod63 ~]# rpm -qf `which find`   # 这是反引号。 一行命令中,如果有反引号,那么先执行反引号中的命令,把反引号中的命令的输出,作为前面命令输入。

[root@xuegod63 ~]# rpm -Vf /usr/bin/find   # 参数-Vf 后面加文件的路径,查看每个命令或文件,有没有被修改。

[root@xuegod63 ~]# echo aaa >> /usr/bin/find

[root@xuegod63 ~]# rpm -Vf /usr/bin/find

S.5....T.    /usr/bin/find

[root@xuegod63 ~]# rpm -V findutils    #检查包

S.5....T.    /usr/bin/find

注:如果出现的是点,表示测试这一项,没有被修改

出现下面的字符代表某测试的失败:

5 — MD5 校验和是否改变,你也看成文件内容是否改变

S — 文件长度,大小是否改变

L — 符号链接,文件路径是否改变

T — 文件修改日期是否改变

D — 设备

U — 用户,文件的属主

G — 用户组

M — 模式 (包含许可和文件类型)

? — 不可读文件

再后面的c 文件名,它表示的是文件类型

c 配置文件

d 普通文件

g 不该出现的文件,意思就是这个文件不该被这个包所包含

l 授权文件(license file)

r 描述文件

[root@xuegod63 ~]# rpm -V lrzsz   # -V 后面加软件包的名字,查看这个包安装的所有文件,没有被修改。

互动: 查看系统中所有的rpm包及安装的文件有没有被黑客修改

root@xuegod63 ~]# rpm -Va  > rpm_check.txt

注: 检验时参考了 /var/lib/rpm 目录下的rpm数据库信息

8.1.5  rpm包卸载和升级

用法:rpm  -e(erase) 包名

[root@xuegod63 ~]#  rpm -q lrzsz

lrzsz-0.12.20-43.el8.x86_64

[root@xuegod63 ~]# rpm -e lrzsz

[root@xuegod63 ~]# rpm -q lrzsz   #已经找不到lrzsz包了,说明卸载成功了

参数: --nodeps 忽略依赖,建议在卸载时不要用rpm去卸载有依赖关系的包,应该用yum

[root@xuegod63 ~]# rpm -e --nodeps lrzsz

升级:

[root@xuegod63 ~]# rpm -Uvh  \

 /mnt/BaseOS/Packages/lrzsz-0.12.20-43.el8.x86_64.rpm    #centos8下安装

[root@xuegod63 ~]# rpm -Uvh /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm   #centos7下升级或安装lrzsz 包  

#因为升级时会有一些依赖包要解决。 所以一般我们使用yum update包来升级。

8.1.6  解决rpm依赖关系:

[root@xuegod63 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-tools-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64.rpm  

报错:

我们需要把依赖包安装上,才可以。

[root@xuegod63 ~]# rpm -ivh /mnt/AppStream/Packages/apr-1.6.3-9.el8.x86_64.rpm

[root@xuegod63 ~]# rpm -ivh /mnt/AppStream/Packages/apr-util-1.6.1-6.el8.x86_64.rpm

[root@xuegod63 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-tools-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64.rpm  

现在就可以安装成功了。

3《《

8.2  YUM的使用

yum(全称为 Yellow dog Updater, Modified)是一个前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记

YUM:解决依赖关系问题,自动下载软件包,它是基于C/S架构

C=client S=ftp\http\file

8.2.1  配置yum源

1、挂载镜像:

先确定虚拟机光驱中有加载系统镜像

[root@xuegod63 Packages]# mount /dev/cdrom /mnt/

[root@xuegod63 Packages]# ls /mnt/

2、本地配置yum源文件:

centos8本地YUM源配置:

在centos8当中,本地光盘中的安装包被分别放在了两个路径下。假设挂载路径为/mnt,那么两个Package路径分别为:/mnt/AppStream/Packages和/mnt/BaseOS/Packages。

因为IOS镜像内的设置,所以导致了在编辑本地yum源的时候需要分别写两个路径在配置文件中。同时网络yum源也被分别写到了两个配置文件内。所以就需要把两个网络yum源配置文件改名。

#centos8与之前版本不同的是增加了一个CentOS-AppStream.repo文件,CentOS-AppStream.repo和CentOS-Base.repo文件都需要移除目录或者改名。

BaseOS类似于原来的软件仓库,主要提供了系统的基础组件,提供的是RPM形式的包,它支持与之前版本兼容

AppStream:它提供的是系统以外的应用程序,如httpd,nginx,php,mariadb-server等

(1)首先挂载光盘:

[root@localhost ~]# mount /dev/sr0 /mnt/

mount: /mnt: WARNING: device write-protected, mounted read-only.

(2)创建一个本地yum配置文件centos8.repo

[root@bogon ~]# vim /etc/yum.repos.d/centos8.repo   #写入以下内容

[c8-media-BaseOS]

name=CentOS-BaseOS-$releasever - Media

baseurl=file:///mnt/BaseOS

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[c8-media-AppStream]

name=CentOS-AppStream-$releasever - Media

baseurl=file:///mnt/AppStream

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

#添加修改完两个区域后保存退出。

注:如果 gpgcheck=1 ,需要导入rpm公钥。方便后期校对rpm包。一般情况,写为0. 工作就写成1并导入公钥。这样安全。

[root@xuegod63 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

(3)移动网络yum源配置文件位置:

[root@bogon ~]# mv /etc/yum.repos.d/C*   /opt

#将网络yum配置文件移动到任意位置,使其不被yum所识别。

[root@bogon ~]# yum list

注:在centos8版本当中可以继续使用yum命令进行安装包管理。

[root@xuegod63 ~]# ll /usr/bin/yum

lrwxrwxrwx. 1 root root 5 4月  25 03:57 /usr/bin/yum -> dnf-3

注:但是我们执行的yum命令是一个软连接,它被链接到了dnf-3命令上。

使用DNF管理软件包,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面内容。

3.网络yum源

Centos8使用阿里网络源:

centos镜像-centos下载地址-centos安装教程-阿里巴巴开源镜像站

[root@xuegod63 ~]# wget -O /etc/yum.repos.d/Centos-8.repo http://mirrors.aliyun.com/repo/Centos-8.repo 

[root@xuegod63 ~]# rpm --import https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official

#导入阿里的公钥

例:安装centos epel扩展yum源。

注:epel源是对centos系统中自带的 base源的扩展。(因为不是所有包都放在base源里,base源你可以理解成是光盘镜像)

[root@xuegod63 ~]# yum -y install epel-release 

[root@xuegod63 ~]# ls /etc/yum.repos.d/epel.repo   #这就是安装的epel源

epel源我们在讲第四阶段时下载docker,openstack等经常会用到。

阿里epel源安装

epel镜像-epel下载地址-epel安装教程-阿里巴巴开源镜像站

8.2.2  yum使用

yum常用操作:

[root@xuegod63 ~]#  yum -y install httpd   #安装软件包, -y 直接安装

[root@xuegod63 ~]#  yum  update    #升级软件包,改变软件设置和系统设置,系统版本内核都升级。这里选择:n ,先不升级,因为升级需要的下载的包太多

[root@xuegod63 ~]#  yum  upgrade   

#升级软件包,不改变软件设置和系统设置,系统版本升级,内核不改变。工作中推荐使用这种升级方式。

[root@xuegod63 ~]#  yum info  httpd     #查询rpm包作用  

[root@xuegod63 ~]#  yum provides /usr/bin/find   #查看命令是哪个软件包安装的  

注: 发现find命令是findutils包中的文件

[root@xuegod63 ~]#  yum -y remove  包名     #卸载包

例:[root@xuegod63 ~]# yum -y remove httpd-tools

[root@xuegod63 ~]#  yum search keyword    #在软件包的包名和详细描述信息中搜索包括指定字符串的软件包

例:[root@xuegod63 ~]#  yum search httpd    #查找包括httpd字符的软件包

yum报错,注意的几个小问题:

1、确定光盘是否链接,光盘是否挂载

2、配置文件中格式是否正确,字母,符号有没有少写,挂载点和配置文件中设置的是否一致

3、网络源需要联网,操作和RPM类似,只是会自动安装依赖项。

8.2.3  yum安装开发工具软件包组

[root@xuegod63 ~]#  yum grouplist   #查看有哪些软件包组

语法:yum groupinstall GROUPNAME

yum grouplist  #显示中文,如果想变成英文,则执行以一下命令

[root@bogon Packages]# echo $LANG

zh_CN.UTF-8     

[root@bogon Packages]#LANG=en_US.UTF-8

yum grouplist

[root@localhost Packages]# yum grouplist

测试:

当你最小化安装系统后,在源码编译安装软件包时,觉得很需要安装很多依赖包,很痛苦,可以先安装好这个Development tools开发工具软件包组。

[root@xuegod63 ~]# yum groupinstall 'Development tools'   #安装开发工具软件包组。

8.3  CentOS8中使用DNF管理软件包-了解

DNF:Dandified YUM,是基于RPM的Linux发行版的软件包管理器。它用于在Fedora / RHEL / CentOS操作系统中安装,更新和删除软件包。 它是Fedora 22,CentOS8和RHEL8的默认软件包管理器。 DNF是YUM的下一代版本,并打算在基于RPM的系统中替代YUM。 DNF功能强大且具有健壮的特征。DNF使维护软件包组变得容易,并且能够自动解决依赖性问题。

Dandified  [ˈdændɪfaɪd]  打扮时髦; 打扮得华丽的;

注:目前DNF命令和YUM命令相互兼容,软件包仓库依旧使用YUM仓库。

已安装软件包

[root@xuegod63 ~]# dnf list installed

查找软件包

[root@xuegod63 ~]# dnf search httpd

安装软件包

[root@xuegod63 ~]# dnf install httpd -y

卸载软件包

[root@xuegod63 ~]# dnf remove httpd -y

下载软件包

[root@xuegod63 ~]# dnf download httpd

查看软件包信息

[root@xuegod63 ~]# dnf info httpd

检查系统中可更新软件包

[root@xuegod63 ~]# dnf check-update

更新所有软件包

[root@xuegod63 ~]# dnf update

或者

[root@xuegod63 ~]# dnf upgrade

更新指定软件包

[root@xuegod63 ~]# dnf update httpd

列出软件包组

[root@xuegod63 ~]# dnf grouplist

安装软件包组

[root@xuegod63 ~]# dnf groupinstall '开发工具'

更新软件包组

[root@xuegod63 ~]# dnf groupupdate '开发工具'

清空所有缓存

在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。并且软件仓库中的软件包依赖也会被清空,再次安装软件时则重新下载软件包依赖信息。

[root@xuegod63 ~]# dnf clean all

[root@xuegod63 ~]# yum clean all

重新创建新的软件包依赖关系

[root@xuegod63 ~]# dnf makecache

或直接

[root@xuegod63 ~]# yum makecache

我喜欢使用 :

[root@xuegod63 ~]# yum clean all

[root@xuegod63 ~]# yum list   #当清空后, 列出软件列表时,会自动创建新的软件包依赖关系

8.4  实战tar源码包管理-源码包安装方法

8.4.1  源码安装nginx

1. 编译环境如gcc和 gcc-c++编译器,make

2. 准备软件 : nginx-1.18.0.tar.gz

部署Nginx

安装nginx源码编译,需要的依赖包:

[root@xuegod63 ~]# yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel   

软件包说明:
gcc           c 语言编译器。
gcc-c++       c++ 语言编译器。
make 用于 configure 和 make 编译的工具。
zlib :nginx 提供 gzip 模块,需要 zlib 库支持。
openssl :nginx 提供 ssl 功能。
pcre包作用是让nginx支持正则表达式,地址重写rewrite
开始安装:

源码编译3把斧:./configure  , make  ,make install

[root@xuegod63 ~]# tar zxvf nginx-1.18.0.tar.gz

[root@xuegod63 ~]# cd nginx-1.18.0

[root@xuegod63 nginx-1.18.0]# ./configure  --prefix=/usr/local/nginx

[root@xuegod63 ~]#  make -j 4    

[root@xuegod63 ~]#  make install

3. 详解源码安装3把斧 配置(configure)、编译(make)、安装(make install)

# ./configure

a. 指定安装路径,例如 --prefix=/usr/local/nginx

b. 启用或禁用某项功能, 例如 --enable-ssl,--disable-filter

c. 和其它软件关联,例如--with-pcre --with-http_ssl_module

d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求

最终生成:Makefile

# make  -j 4   #把源代码文件编译成可执行的二进制文件,按Makefile文件编译,可以使用-j 4指定4核心CPU编译,提升速度

# make install  #按Makefile定义的文件路径安装

# make clean //清除上次的make命令所产生的objectMakefile文件。使用场景:当需要重新执行configure时,需要先执行make clean。如下:

[root@xuegod63 nginx-1.18.0]# make clean (仅仅清除之前的可执行文件及配置文件)

rm -rf Makefile objs

[root@xuegod63 nginx-1.18.0]# ./configure  --prefix=/usr/local/nginx  #重新进行配置

8.4.2  删除源码包:

安装完,删除源码包:

有时删除不干净,所以建议大家安装时,在configure步骤添加一个: --prefix  参数。这样删除或备份时,直接对删除--prefix指定的安装目录操作就可以了。

[root@xuegod63 ~]# rm -rf /usr/local/nginx/

8.4.3  实战2:源码编译出错的5种完美解决方法

[root@xuegod63 extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2

[root@xuegod63 ~]# cd extundelete-0.2.4

#安装则解决依赖。

[root@xuegod63 extundelete-0.2.4]# ./configure   #检查系统安装环境

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library

源码编译出错后,常见解决方法:

共5种方法

方法1:

[root@xuegod63 Packages]# cd /mnt/BaseOS/Packages 

[root@xuegod63 Packages]# rpm -ivh ext2fs^C

#切到本地软件包所在路径,按两下tab键。 一般情况,ext2fs就是要安装的软件包的名字开头。如果存在 自动补全

方法2:[root@xuegod63 Packages]# ls *ext2fs*   #查找完整关键字

方法3:[root@xuegod63 Packages]# ls *2fs*    #查找部分关键字

方法4:  终极大招

http://www.rpmseek.com/index.html

方法5:  使用yum去搜索,推荐使用这个方法

[root@xuegod63 Packages]# yum search ext2fs

安装库:

[root@xuegod63 ~]# cd /mnt/BaseOS/Packages/

[root@xuegod63 Packages]# rpm -ivh e2fsprogs-libs-1.45.4-3.el8.x86_64.rpm

Verifying...                          ################################# [100%]

Preparing...                          ################################# [100%]

package e2fsprogs-libs-1.45.4-3.el8.x86_64 is already installed

互动:这里显示库已经安装,但是configure时又说找不到。怎么办?

解决:安装了库,却显示找不到。 这种情况: 需要安装库的开发文件

[root@xuegod63 Packages]# rpm -ivh e2fsprogs-devel-1.45.4-3.el8.x86_64.rpm

devel = development (开发)

扩展:技巧

查看rpm包安装后生成的文件:

[root@xuegod63 Packages]#rpm -qpl e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm | more

注:可以看到很多.h结尾的文件,这些文件叫头文件。有了这些头文件, ./configure 通过.h头文件,才能找到对应的库文件。所以库文件和devel开发包都要安装。

[root@xuegod63 extundelete-0.2.4]# make  -j 4  

这个软件只能在centos6上安装成功,这里只是为了方便学习寻找依赖库的几种方法

总结,软件安装方法特点:

rpm+yum:方便,软件版本低。稳定性好、管理方便。性能稍差。

源码编译安装:麻烦,软件版本新,可以定制。稳定性稍差、管理稍差。性能好。

源码编译安装:主要是安装LAMP或LNMP 架构时,我们会用

更多精彩内容请移步至公众号【学神来啦】