0
点赞
收藏
分享

微信扫一扫

linux软件包:RPM包、源码包、yum在线

敬亭阁主 2022-04-08 阅读 31
linux

文章目录

软件包

软件包简介

软件包分类:

  • 源码包,这种安装包一般都是c语言写的,我们需要编译

    • 脚本包
  • 二进制包(也称RPM包、也称系统默认包),这种安装包就是编译之后的安装包

二进制包安装起来速度很快,缺点就是我不能够再看到源代码

源码包的优点:

  • 开源,如果能力强可以修改源代码
  • 可以自由选择所需的功能
  • 软件是编译安装的,所以更加适合字自己的系统,更加文档,效率更高
  • 卸载方便,我们可以直接把安装目录删除掉

源码包的缺点:

  • 安装过程步骤较多
  • 编译过程时间较长,安装的耗时比安装二进制包要长
  • 因为是编译安装,安装过程成容易报错

RPM包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
  • 安装速度比源码包安装快的多

RPM包的缺点:

  • 已经经过编译,所以看不到源代码
  • 功能选择不如源代码包灵活
  • 依赖性,就比如我要安装A软件包,但是它的安装需要先安装软件包B,安装软件包B 它又依赖软件包C

RPM包管理有两种管理方法:RPM命令管理、yum在线管理,接下来介绍这两种管理方式

RPM命令管理

rpm包命名规则

httpd-2.2.15-15.e16.centos.1.i686.rpm

  • httpd 软件包名,而httpd-2.2.15-15.e16.centos.1.i686.rpm这一整串的名字是包全名,某些命令只能跟包名,某些只能跟包全名
  • 2.2.15 软件版本
  • 15 软件发布的次数
  • e16.sentos 适合的linux平台
  • i686 适合的硬件平台,还有一些包这里是noarch表示适合任意的硬件平台
  • rpm rpm包的扩展名

什么时候使用包名,什么时候使用包全名嘞?

使用包全名:一般是安装和升级 。操作的包是没有安装的软件包时使用全包名

使用包名:一般是查询和卸载,操作已经安装的软件包时使用包名,当我们安装好一个rpm软件包后,在使用的时候,系统会自动去/var/lib/rpm/目录下进行搜索。

rpm包依赖性

树形依赖:a–>b–>c , 安装的时候先安装c,再按照b,最后安装a。卸载的时候先卸载a,再卸载b,最后卸载c

环形依赖:a–>b–>c–>a

模块依赖:模块依赖的查询网址

rpm包的依赖性是最头疼的问题,如下所示,安装这个软件包,它依赖于libodbcinst.so.2

在这里插入图片描述

而且这还不是一个软件包,这是一个软件库源,库源的特征就是以.so.数字结尾。这种库依赖包它不是一个独立的软件包,它是某一个软件包中的一个软件,所以我要先把这个软件所在的软件包安装,但是我根本不知道这个软件库所在的软件包到底是哪一个,那这就需要使用上面的模块查询网站去查询了。

安装/卸载

RPM安装

命令格式:rpm -ivh 包全名

选项:

  • -i 安装,install

  • -v 显示详细信息,verbose

  • -h 显示进度 hash

RPM包升级

命令格式:rpm -Uvh 包全名

选项:

  • -U 升级,upgrade

RPM卸载

命令格式:rpm -e 包名

选项:

  • -e 卸载,erase

查询

查询是否安装

# 查询包是否安装
#rpm -q 包名
[root@VM-8-7-centos ~]# rpm -qa | grep vim
vim-common-7.4.629-8.el7_9.x86_64
vim-minimal-7.4.629-8.el7_9.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
vim-enhanced-7.4.629-8.el7_9.x86_64

[root@VM-8-7-centos ~]# rpm -q vim-common
vim-common-7.4.629-8.el7_9.x86_64

[root@VM-8-7-centos ~]# rpm -q vim-commonaaaaa
package vim-commonaaaaa is not installed

# 查询所有已经安装的RPM包
rpm -qa

选项:

  • -q 查询 query
  • -a 所有 all

查询详细信息

命令格式:rpm -qi 包名

选项:

  • -q 查询 query

  • -i 查询软件信息 ,information

  • -p 如果要查询为按照的包信息就还需要添加该选项,如果是已安装就不用添加,注意,加了-p选项后面就要加包全名,package

[root@VM-8-7-centos ~]# rpm -qi vim-common
Name        : vim-common
Epoch       : 2
Version     : 7.4.629
Release     : 8.el7_9
Architecture: x86_64
Install Date: Fri 08 Jan 2021 04:00:14 PM CST
Group       : Applications/Editors
Size        : 22155744
License     : Vim
Signature   : RSA/SHA256, Fri 18 Dec 2020 04:37:20 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : vim-7.4.629-8.el7_9.src.rpm
Build Date  : Wed 16 Dec 2020 12:44:28 AM CST
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.vim.org/
Summary     : The common files needed by any version of the VIM editor
Description :
VIM (VIsual editor iMproved) is an updated and improved version of the
vi editor.  Vi was the first real screen-based editor for UNIX, and is
still very popular.  VIM improves on vi by adding new features:
multiple windows, multi-level undo, block highlighting and more.  The
vim-common package contains files which every VIM binary will need in
order to run.

If you are installing vim-enhanced or vim-X11, you'll also need
to install the vim-common package.

查询包中文件的安装位置

如果知道一个软件包的名字,我想查看该软件包中文件的存储位置

命令格式:rpm -ql 包名

选项:

  • -q 查询 query
  • -l 列表 list
[root@VM-8-7-centos ~]# rpm -ql zip
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipnote
/usr/bin/zipsplit
/usr/share/doc/zip-3.0
/usr/share/doc/zip-3.0/CHANGES
/usr/share/doc/zip-3.0/LICENSE
/usr/share/doc/zip-3.0/README
/usr/share/doc/zip-3.0/README.CR
......

如果我知道了文件,我想查询文件属于哪个RPM包则可以使用如下命令

命令格式:rpm -qf 系统文件名

选项:

  • -f 查询系统文件属于哪个软件包,file
[root@VM-8-7-centos ~]# rpm -qf /usr/share/doc/zip-3.0
zip-3.0-11.el7.x86_64

查询软件包的依赖性

命令格式:rpm -qR 包名

选项:

  • -q 查询

  • -R 查询软件包的依赖性,requires

  • -p 未安装的包,后面就是包全名了

[root@VM-8-7-centos ~]# rpm -qR zip
libbz2.so.1()(64bit)
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)
libc.so.6(GLIBC_2.7)(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

校验/文件提取

校验

校验的功能是看我们安装包后,软件包下面的文件是否被修改过

命令格式:rpm -V 包名

选项:

  • -V 校验指定的RPM包中的文件,verify
# 如果没有任何输出则表示没有修改过该包下的任何文件
[root@VM-8-7-centos ~]# rpm -V zip
[root@VM-8-7-centos ~]# 

# 假如我现在修改了/usr/share/doc/zip-3.0/algorith.txt这个文件
# 然后现在在校验一次
[root@VM-8-7-centos zip-3.0]# rpm -V zip
S.5....T.  d /usr/share/doc/zip-3.0/algorith.txt

# S.5....T.  是修改标志,标记出来了的就是被修改了,如果还是一个点就表示没有修改
# d          文件类型
# 最后的是哪个文件被修改了

修改标志如下:

  • S 文件大小是否改变
  • M 文件的类型或权限(rwx) 是否被改变
  • 5 文件的MD5校验和是否改变(可以看成文件的内容是否改变)
  • D 设备的中,从代码是否改变
  • L 文件路径是否改变
  • U 文件的属主(所有者) 是否改变
  • G 文件是所属组是否改变
  • T 文件的修改时间是否改变

文件类型如下:

  • c 配置文件
  • d 普通文件
  • g ”鬼“文件,很少见,就是该文件不应该被这个RPM包含
  • l 授权文件
  • r 描述文件

文件提取

只提取rpm包中的某一个指定的文件,就比如做了一些误操作,将某个文件给删除了,这个时候我不需要把整个rpm包重新安装一遍,只需要把这个包中的某一个文件提取出来就就行

文件提取命令格式:

rpm2cpio 包全名 | \										# \ 表示命令太长了 换行
cpio -idv .文件绝对路径									  #. 表示把指定的文件提取到当前目录下

第一步:

命令名称:rpm2cpio

功能:将rpm包转换为cpio格式,cpio它是一个标准工具,它用于创建或提取文件

第二步:

命令名称:cpio

命令格式:cpio 选项 < [文件或设备]

选项:

  • -i copy-in模式,还原
  • -d 还原时自动新建目录
  • -v 显示还原过程

案例:

# 查询ls这个命令  也就是文件属于哪个软件包
[root@VM-8-7-centos ~]# rpm -qf /bin/ls
coreutils-8.22-24.el7_9.2.x86_64

# 然后进行删除操作
[root@VM-8-7-centos ~]# mv /bin/ls /tmp

# 把coreutils-8.22-24.el7_9.2.x86_64软件包下的/bin/ls文件提取到当前位置
[root@VM-8-7-centos ~]# rpm2cpio /XX/XX/XX这个软件包的路径+全包名/XXXX.rpm | cpio -idv ./bin/ls

yum在线管理

我们使用rpm命令来安装一个rpm软件包时,最头疼的问题就是rpm包依赖性问题,我们需要手动安装很多的包。yum在线安装主要就是解决这个问题的。

网络yum源

因为yum是在线安装的,所以肯定是需要有网络的,如何让服务器连接网络这里就不演示了,接下来讲解yum的网络源。

对于这一部分的内容我们能看懂文件就行,一般的情况下都是不需要我们进行修改的。

yum文件的源都在/etc/yum.repos.d目录下

[root@VM-8-7-centos yum.repos.d]# pwd
/etc/yum.repos.d

# 可以看到这个目录下有很多个源,代表网络的源是CentOS-Base.repo,这也是默认使用的源
[root@VM-8-7-centos yum.repos.d]# ll
total 48
-rw-r--r-- 1 root root  615 Feb 26 15:24 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 Nov 23  2020 CentOS-CR.repo
-rw-r--r-- 1 root root  649 Nov 23  2020 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root  230 Jun 25  2021 CentOS-Epel.repo
-rw-r--r-- 1 root root  314 Nov 23  2020 CentOS-fasttrack.repo
-rw-r--r-- 1 root root  630 Nov 23  2020 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 Nov 23  2020 CentOS-Sources.repo
-rw-r--r-- 1 root root 8515 Nov 23  2020 CentOS-Vault.repo
-rw-r--r-- 1 root root  616 Nov 23  2020 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 2081 Feb  8 12:53 docker-ce.repo

CentOS-Base.repo文件内容如下:

[extras]
gpgcheck=1
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/
name=Qcloud centos extras - $basearch
[os]
gpgcheck=1
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=http://mirrors.tencentyun.com/centos/$releasever/os/$basearch/
name=Qcloud centos os - $basearch
[updates]
gpgcheck=1
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=http://mirrors.tencentyun.com/centos/$releasever/updates/$basearch/
name=Qcloud centos updates - $basearch

文件说明如下:

  • [base] 容器名称,一定要放在中括号中
  • gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
  • gpgkey 数字证书的公钥文件保存位置,不用修改
  • mirrorlist 镜像站点,这个可以注释掉
  • enabled 此容器是否生效,1代表生效 0代表不生效
  • baseurl 我们的yum源服务器的地址,默认是centos官方的yum源服务器,是可以使用的,如果觉得下载比较慢可以改成你喜欢的源地址
  • name 容器说明,可以随便写

yum命令

常用命令

# 查询所有软件包列表
[root@VM-8-7-centos yum.repos.d]# yum list

# 搜索服务器上所有和关键字相关的包  yum search 关键字
[root@VM-8-7-centos yum.repos.d]# yum search vim

# 安装软件包 yum -y install 包名     选项-y是自动回答yes,因为依赖性的问题,如果不加该选项那么每安装一个依赖都要询问一次
[root@VM-8-7-centos yum.repos.d]# yum -y install gcc

# 尽量不要使用yum命令进行升级和卸载的操作,很容器系统出错,服务器坏掉
# 升级 yum -y update 包名  , 注意如果执行yum -y update命令,而不加包名就表示升级所有的rpm软件包,系统的内核也会升级,也会造成相关的一些问题
[root@VM-8-7-centos yum.repos.d]# yum -y update gcc

# 卸载,卸载会把该软件包所有依赖的包都一起删除,不管有没有其他软件包依赖都删除,所以不能执行删除的命令
[root@VM-8-7-centos yum.repos.d]# yum -y remove gcc

yum软件组管理命令

# 列出所有可用的软件组列表
[root@VM-8-7-centos home]# yum grouplist

# 安装指定软件组,组名可以由grouplist查询出来
[root@VM-8-7-centos home]# yum groupinstall 软件组名

# 卸载指定软件组
[root@VM-8-7-centos home]# yum groupremove 软件组名

光盘yum源搭建

如果有时候没有网络环境,需要使用光盘的yum源,步骤如下

  1. 挂载光盘

    # mount  要挂接(mount)的设备 挂载地址
    mount /dev/cdrom /mnt/cdrom
    
  2. 让其他的yum源失效,其实就是在/etc/yum.repos.d目录下,所有的文件都是.repo后缀名结尾,如果想让这些源失效就把后缀名改成其他的就可以了,代表光盘的yum源文件是CentOS-Media.repo 就留这一个文件

  3. 修改CentOS-Media.repo 文件

    [c7-media]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/cdrom
    # 将上面的这个地址改为我们光盘挂载地址,file://是固定前缀,后面跟光盘挂载地址,同时将下面两行注释掉
    #        file:///media/cdrom/
    #        file:///media/cdrecorder/
    gpgcheck=1
    # 将enabled=0 改为1,让这个yum源生效
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    

源码包管理

源码包与RPM包的区别

我们上面讲过一些关于源码包和RPM包的区别,那时候讲的主要是安装之前概念上的区别,就比如

是否能看到源代码,安装后的效率,安装过程耗时,

现在讲讲安装之后的区别,其实主要就是安装位置不同,RPM包安装在默认位置,而源码包可以自己指定位置安装

绝大多数RPM包的默认安装位置

目录说明
/etc/配置文件安装目录
/usr/bin/可执行的命令安装目录
/usr/lib/程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/shear/man/帮助文件保存位置

源码包一般的安装位置都选择在/usr/local/软件名/

因为安装位置的不同而带来的影响:主要就是不能通过服务管理命令来启动/停止服务,例如service XXX服务 start启动服务。

服务管理命令就只能管理RPM包安装的软件,不能管理源码包安装的服务,因为服务管理命令会自动去系统默认的一些目录下查找命令,而源码包是自定义安装位置的,所以就有可能造成服务管理命令不能管理源码包安装的服务。

源码包安装

  1. 安装c语言编译器
  2. 下载源码包,解压,进入到解压目录
  3. 一般的源码包解压后,目录中都有两个文件:INSTALL安装说明,README使用说明,我们可以查看这些文件了解相应的信息
  4. ./configure --prefix=安装目录 make make install 安装目录/bin/XXX start

./configure命令其实有以下几个主要的功能

  • 定义需要的功能选项,就比如–prefix指定安装路径
  • 检测系统环境是否符合安装要求,比如gcc是否安装
  • 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑, 也就是make和make install都是依赖这个文件

make编译的作用就是调用gcc,把源码包翻译成为机器语言

make install编译安装,需要注意在执行./configure和make命令的时候它都不会真正的往我们指定的安装路径下写入任何东西,也就是说如果在执行前两步的时候报错了我不需要执行任何多余的操作,也不需要删除什么东西,我只需要执行make clean命令清空编译产生的临时文件

源码包是没有卸载命令的,如果想要卸载就直接执行rm -rf 安装目录即可,源码包会把所有的文件都安装到我们指定的安装目录下,不会有任何的垃圾文件存储在其他位置

举报

相关推荐

0 条评论