• rpm软件包安装与管理


    一、软件包分类

    1、软件包分类
    • 源码包
    • 二进制包
    2、源码包
    2.1 源码包什么样

    直接由编程语言写成,没经过编译。类似于java的 .calss 文件,c的 .c文件。

    [root@love2 ~]#  vim  hello.c
    #include <stdio.h> int main (void) {
          printf ("hello world
    "); 
    } 
     
    [root@love2 ~]# gcc -c hello.c 
    # - c 生成“ .o ”头文件。这里会生成 hello.o 头文件,但是不会生成执行文件 
    [root@love2 ~]# gcc -o hello hello.o 
    # - o 生成执行文件,并制定执行文件名。这里生成的 hello 就是可执行文件 
    [root@love2 ~]# ./hello
    hello world
    # 执行 hello 文件
    
    2.2 源码包特点

    源码包的优点:

    • 开源,如果有足够的能力,可以修改源代码
    • 可以自由选择所需的功能
    • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
    • 卸载方便

    源码包有缺点:

    • 安装过程步骤较多,尤其安装较大的软件集合时(如 LAMP 环境搭建),容易出现错误
    • 编译过程时间较长,安装比二进制安装时间长
      -因为是编译安装,安装过程中出现问题比较难以解决
    3、二进制包
    3.1 二进制包分类

    DPKG 包:是由 Debian Linux 所开发出来的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理。主要应用在 Debian 和 unbuntu 中。
    RPM 包:是由 Red Hat 公司所开发的包管理系统。功能强大,安装、升级、查询和卸载 都非常简单和方便。目前很多 Linux 都在使用这种包管理方式,包括 Fedora、CentOS、 SuSE 等。

    3.2 特点

    RPM 包的优点:

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

    缺点:

    • 经过编译,不再可以看到源代码
    • 功能选择不如源码包灵活
    • 依赖性。有时候复杂一点的软件包依赖于别的软件包才能安装,而别的软件包有依赖于另外的软件包。非常麻烦。
    3.3 RPM包依赖

    1)树形依赖 a---->b---->c
    2)环形依赖 a---->b---->c---->a
    以上两种情况,我们可以用命令一次将所需要的软件包全部安装,就不需要考虑依赖性问题。
    3)函数库依赖 :a软件包依赖与另外软件包中的函数库或者模块,我们需要找到该模块或者该函数库对应的软件包。可通过该网站查询www.rpmfind.net

    二、rpm安装

    1.rpm包命名规则
    httpd-2.2.15-15.el6.centos.1.i686.rpm 
    #httpd 软件包名 
    #2.2.15 软件版本 
    #15  软件发布的次数 
    #el6  软件发行商。el6 是 RedHat 公司发布,适合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 适合的硬件平台。
    RPM 包可以在不同的硬件平台安装,选择适合不同 CPU 的软件版本,可以最大化的发挥 CPU 性能,所以出现了所谓的 i386(386 以上计算机都可以安装)、
    i586(586 以上的计算机都可以安装)、i686(奔腾 II 以上计算机都可以安装,目前所有的 CPU 都是 奔腾 II 以上,所以这个软件版本居多)、
    x86_64(64 位 CPU 可以安装)和 noarch(没有硬 件限制)等文件名了。 
    #rpm  包的扩展名 Linux 下文件不是靠扩展名区分文件类型,也就是 Linux 中扩展 名没有任何含义。可是这里怎么又出现了扩展名呢?
    原因很简单,如果我不把 RPM 的扩展名 叫做“.rpm”,管理员很难知道这是一个 RPM 包,当然也就无法正确安装了。
    也就是说如果 RPM 包不用“.rpm”作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个什么样的软件。 
     
    

    包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径
    包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产 RPM 包的数据库(/var/lib/rpm/)。

    2.rpm包手工命令安装
    2.1 默认安装位置
    目录 作用
    /etc/ 配置文件目录
    /usr/bin/ 可执行命令目录
    /usr/lib/ 程序使用的函数库保存位置
    /usr/share/doc/ 软件基本使用手册保存位置
    /usr/lib/ 帮助文档保存位置
    2.2 RPM 包安装

    1)安装命令

    rpm –ivh 包全名 # 注意一定是包全名。如果跟包全名的命令 要注意路径,因为软件包在光盘当中。
    选项:  
    -i   install 安装(install)  
    -v  显示更详细的信息(verbose)  
    -h   打印#显示安装进度(hash)
    --nodeps  不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。 如果没有安装则会报错。不管依赖性,强行安装。这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做。 
    --replacefiles  替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么 正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可 以忽视这个报错,而覆盖安装。
    --replacepkgs 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。
    --force  强制安装。不管是否已经安装,都重新安装。就是—replacefiles 和 —replacepkgs 的综合。
    --test  测试安装。不会实际安装,只是检测一下依赖性。
    --prefix  指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意: 如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装。
    

    2)服务启动

    [root@localhost ~]# service 服务名 start|stop|restart|status 
    参数:  
    start: 启动服务  
    stop:  停止服务
    restart: 重启服务
    status: 服务状态 
    
    2.3 RPM 包升级
    [root@localhost ~]#  rpm –Uvh 包全名 
    选项:  
    -U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)
    
    [root@localhost ~]#  rpm –Fvh 包全名 
    选项: 
    -F(大写)  升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
     
    
    2.4 卸载
    [root@localhost ~]# rpm  -e  包名 
    选项: 
    --nodeps 不检查依赖性  
    -e   卸载
    
    2.5 查询

    1)查询软件包是否安装
    可以查询软件包是否安装

    [root@localhost ~]#  rpm –q 包名 
    选项:  
    -q: 查询(query)
    

    2)查询系统中的所有安装软件包
    可以查询 Linux 系统中所有已经安装的软件包

    [root@localhost ~]# rpm -qa  
    选项:  
    -a:所有(all)
    
    

    3)查询软件包的详细信息
    可以查询已经安装的某个软件包的详细信息

    [root@localhost ~]#  rpm –qi 包名 
    选项:  
    -i: 查询软件信息(information)
    

    查询还没有安装的软件包的详细信

    [root@localhost ~]#  rpm –qip 包全名 
    选项:  
    -p: 查询没有安装的软件包(package)
    

    4)查询软件包中的文件列表
    可以查询已经安装的软件包中的文件列表和安装的完整目录

    [root@localhost ~]#  rpm –ql 包名 
    选项:  
    -l: 列出软件包中所有的文件列表和软件所安装的目录(list) 
    

    查询还没有安装的软件包中的文件列表和打算安装的位置

    [root@localhost ~]#  rpm –qlp 包全名 
    选项:  
    -p: 查询没有安装的软件包信息(package) 
    

    5)查询系统文件属于哪个 RPM 包

    [root@localhost ~]#  rpm –qf 系统文件名 
    选项:  
    -f: 查询系统文件属于哪个软件包(file)
    

    6)查询软件包所依赖的软件包
    查询系统中和已经安装的软件包有依赖关系的软件包

    [root@localhost ~]# rpm –qR 包名 
    选项:  
    -R: 查询软件包的依赖性(requires)
    可以查询没有安装的软件包的依赖性吗?加“-p”选项即可。例如,查看一下还没有安装的 httpd 软件包的依赖包,可以执行如下命令: 
    [root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64
    
    2.6 验证

    1)基本命令

    [root@localhost ~]# rpm –Va  
    选项:  
    -Va 校验本机已经安装的所有软件包 
    [root@localhost ~]# rpm –V 已安装的包名 
    选项:  
    -V 校验指定 RPM 包中的文件(verify) 
    [root@localhost ~]# rpm –Vf 系统文件名 
    选项:  
    -Vf 校验某个系统文件是否被修改
    

    2)验证举例

    [root@localhost ~]# rpm -V httpd 
    S.5....T.      c   /etc/httpd/conf/httpd.conf 
    验证内容   文件类型  最后是文件名。
    那么验证内容中的 8 个信息的具体内容 如下:
    S 文件大小是否改变 
    M 文件的类型或文件的权限(rwx)是否被改变 
    5 文件 MD5 校验和是否改变(可以看成文件内容是否改变) 
    D 设备的主从代码是否改变 
    L 文件路径是否改变 
    U 文件的属主(所有者)是否改变 
    G 文件的属组是否改变 
    T 文件的修改时间是否改变  
    apache 配置文件的文件类型是 c,那么还有哪些文件类型呢?
    c 配置文件(config file)
    d 普通文档(documentation)
    g “鬼”文件(ghost file),很少见,就是该文件不应该被这个 RPM 包
    l 授权文件(license file)
     r 描述文件(read me)
    
    2.7 数字证书

    上面的校验方法只能对已经安装的 RPM 包中的文件进行校验,但是如果 RPM 包本身就被动过手脚, 那么校验就不能解决问题了。
    我们就必须使用数字证书验证了。首先必须找到原厂的公钥文件,然后进行安装 ,再安装 RPM 包是。
    用rpm命令安装软件时会去提取 RPM 包中的证书信息,然后和本机安装的原厂证书进行验证,如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告。
    1)数字证书位置

    [root@love2 yum.repos.d]# ll  /mnt/cdrom/RPM-GPG-KEY-CentOS-6 
    -r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6
    
    

    2)数字证书导入

    [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
    选项:  
    --import 导入数字证书
    
    #查询已经安装的证书
    [root@love2 yum.repos.d]# rpm -qa | grep  gpg-pubkey
    gpg-pubkey-c105b9de-4e0fd3a3
    
    
    2.8 RPM包中文件的提取

    有时候我们会将某些软件的文件误删,所以我们可以通过命令提取特定文件。
    1)使用命令 rpm2cpio+ cpio

    [root@localhost ~]# rpm2cpio 包全名 | cpio -iduv .文件绝对路径   
    rpm2cpio  将 rpm 包转换为 cpio 格式的命令
    cpio      是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
    cpio还原时,命令解释。
    -i:copy-in 模式,还原  
    -v:显示还原过程  
    -c:使用较新的 portable format 存储方式  
    -d:还原时自动新建目录  
    -u:自动使用较新的文件覆盖较旧的文件 
    

    2)示例、假如我们不小心 将位于 /bin/find 删掉了。我们可以通过以下步骤恢复

    1、先查出该命令对应的软件包名
    [root@love2 ~]# rpm -qf /bin/find
    findutils-4.4.2-9.el6.x86_64
    2、提取文件到当前文件下
    [root@love2 ~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv  ./bin/find
    3、将find命令移动到/bin目录下
    [root@love2 ~]# mv bin/find  /bin/
    

    三 、rpm包在线安装(yum安装)

    3.1 yum源文件解析

    yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“.repo”。也就是说, yum 源配置文件只要扩展名是“.repo”就会生效。

    [root@love2 ~]# ls /etc/yum.repos.d/
    bak  CentOS-Media.repo
    #由于我配置了光盘yum源,所以将其他 .repo 文件移动了一下。
    

    配置文件详情如下

    [base]:容器名称,一定要放在[]中
    name:容器说明,可以自己随便写。
    mirrorlist:镜像站点,这个可以注释掉。
    baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。 如果你觉得慢,则可以改成你喜欢的 yum 源地址。
    enabled:此容器是否生效,如果不写或写成 enabled=1 则表示此容器生效,写成 enabled=0 则表示此容器不生效。 
    gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效
    gpgkey:数字证书的公钥文件保存位置。不用修改。
    
    3.2 搭建本地光盘yum源

    第一步:放入 CentOS 安装光盘,并挂载光盘到指定位置

    [root@love2 ~]# mkdir /mnt/cdrom # 创建 cdrom 目录,作为光盘的挂载点 
    [root@localhost ~]# mount /dev/sr0  /mnt/cdrom/ #挂载 
    

    第二步:修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是“*.repo”的 文件才能作为 yum 源配置文件。当然你也可以将不需要的移动到另外的目录。

    自行选择

    第三步:修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方法修改:

    [c6-media]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/cdrom/
    #       file:///media/cdrom/
    #       file:///media/cdrecorder/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    第四步 清除原先yum缓存,并且建立新的缓存

    yum clean all && yum makecache
    
    3.3 yum命令

    1)查询

    查询 yum 源服务器上所有可安装的软件包列表
    [root@love2 bak]# yum list
    
    查询 yum 源服务器中是否包含某个软件包。
    [root@love2 bak]# yum list bind
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
    可安装的软件包
    bind.x86_64                                              32:9.8.2-0.47.rc1.el6                                               c6-media
    
    搜索 yum 源服务器上所有和关键字相关的软件包
    [root@love2 bak]# yum search apache   #搜索包含有apache关键字软件包
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
    ======================================================== N/S Matched: apache ========================================================
    ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
    ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant
    
    查询指定软件包的信息
    [root@love2 bak]# yum info bind
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
    可安装的软件包
    Name        : bind
    Arch        : x86_64
    Epoch       : 32
    Version     : 9.8.2
    Release     : 0.47.rc1.el6
    Size        : 4.0 M
    Repo        : c6-media
    ...
    

    2)安装

    [root@love2 yum.repos.d]# yum -y install 包名 
    选项:  
    install  安装  
    -y   自动回答 yes。如果不加-y,那么每个安装的软件都需要手工回答 yes
    

    3)升级

    [root@love2 yum.repos.d]# yum -y update 包名 
    # 升级指定的软件包 
    选项:  update:  升级  
    -y:   自动回答 yes
    [root@love2 yum.repos.d]# yum -y update 
    # 升级本机所有软件包
    

    4)卸载

    [root@love2 yum.repos.d]# yum remove 包名 
    # 卸载指定的软件包
    
    3.4 yum组管理命令

    1)查询可以安装的软件组

    [root@love2 ~]# yum grouplist 
    # 列出所有可用的软件组列表
    

    2)查询软件组内包含的软件

    [root@love2 ~]# yum groupinfo 软件组名 
    # 列出软件组中包含的软件
    例:
    [root@love2 bak]# yum groupinfo Emacs
    已加载插件:fastestmirror, security
    设置组进程
    Loading mirror speeds from cached hostfile
    
    组:Emacs
     描述:GNU Emacs 可扩展、可自定义的文本编辑器。
     必要的软件包:
       emacs
     可选的软件包:
       ctags-etags
       emacs-auctex
       emacs-gnuplot
       emacs-nox
     
    

    3)安装软件组

    [root@love2 ~]# yum groupinstall 软件组名 
    # 安装指定软件组,组名可以由 grouplist 查询出来 
    

    4)移除软件组

    [root@love2 ~]# yum groupremove 软件组名 
    # 卸载指定软件组
    
  • 相关阅读:
    PHP和JS判断手机还是电脑访问
    apache 一个站点配置多个域名
    拾遗
    提高工作效率的工具
    PHP urlencode
    JS encodeURI和encodeURIComponent
    Linux实践:ELF文件格式分析
    Linux实践:文件破解
    Linux实践:模块
    Linux内核学习期末总结(网课)
  • 原文地址:https://www.cnblogs.com/hjnzs/p/11957099.html
Copyright © 2020-2023  润新知