Linux_09 Linux软件包管理 rpm与yum

标签: linux  rpm

Linux软件包管理 rpm与yum

  • 文件的压缩与打包
  • rpm安装软件
  • yum安装删除软件
  • yum进阶

一、 文件的打包 与压缩

  1. 压缩:指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。
  2. 打包:指将多个文件(或目录)合并成一个文件,方便传递或部署。
  3. 压缩文件或打包文件常见的扩展名:.tar, .tar.gz, .gz, .bz2 , .tar.bz2, .Z;linux系统一般文件的扩展名用途不大,但是压缩或打包文件的扩展名是必须的,因为linux支持的压缩命令较多,不同的压缩技术使用的压缩算法区别较大,根据扩展名能够使用对应的解压算法。
  4. 常见的文件扩展名

    *.gz  gzip程序压缩的文件 
    *.bz2 bzip2 程序压缩的文件 
    *.Z compress(旧的加密算法,目前基本不用) 程序压缩的文件
    *.tar  tar命令打包的数据,并没有压缩过 
    *.tar.gz  tar程序打包的文件,并且经过 gzip 的压缩  
    *.tar.bz2 tar程序打包的文件,并且经过 bzip2 的压缩
    
  5. 常见的压缩\打包命令

    compress压缩效率低下,压缩比也较差,几乎已经不再使用
    gzip 与 bzip2 
        gzip比bzip2性能好,但bzip2可以获得更高压缩比。 
    tar可以将很多文件打包成为一个文件 
    
  6. gzip命令: 可以解压compress 、 zip 、 gzip等算法压缩的文件

    1. 选项与参数

      -c :将压缩的数据输出到标准输出(stdout)上 
      -d :解压缩 
      -t :可以用来检验一个压缩文件的一致性,看看文件有无错误 
      -v :可以显示出原文件/压缩文件的压缩比等信息 
      -(1,2,...,9):压缩等级,1最快,但是压缩比最差;9最慢,但是压缩比最好,默认是6。 
      -l :查看压缩文件的压缩比: gzip –l  *.gz
      
    2. 示例

      压缩
      命令 gzip -v install.log (如果不加 -v 则默认直接压缩)
      显示 install.log:     76.8% -- replaced with install.log.gz
      注意 : 源文件被压缩之后 , 自动在源文件名后追加“.gz” , 源文件将不再存在
      
      解压
      命令 gzip -d install.log.gz
      注意: 源文件被解压之后 , 自动将源文件名后的“.gz”删掉 , 源文件将不再存在 。  
      
      压缩或解压缩之后保留源文件
      命令 gzip -c install.log > install.log.gz
      查看源文件是否存在
      ll | grep install
      
  7. zcat查看压缩文件的内容

    1. cat可以读取纯文本文件,那么zcat则可以读取纯文本文件被压缩后的压缩文件
    2. 示例

      [[email protected] tmp]# zcat   *.gz  #查看全部内容
      [[email protected] tmp]# zcat   *.gz |head -n #查看前n行
      
  8. bzip2命令

    1. gzip 是为了取代 compress 并提供更好的压缩比,那么 bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的。
    2. 选项与参数

      -c :将压缩的过程产生的数据输出到标准输出(stdout) 
      -d :解压缩的参数 
      -k :保留源文件,而不会删除原始的文件 
      -f :强制压缩
      -z :压缩的参数(有无均可)
      -v :可以显示出原文件/压缩文件案的压缩比等信息; 
      -(1,2,...,9) :与gzip同样的,都是在计算压缩比的参数,-9压缩率最佳,-1压缩速度最快 
      
    3. 示例

      压缩
      [[email protected] tmp]# bzip2 -z install.log #删除源文件
      [[email protected] tmp]# ls install*
      install.log.bz2
      [[email protected] tmp]# bzip2 -zk install.log#保留源文件
      解压
      [[email protected] tmp]# bzip2 -d install.log.bz2 #删除源文件
      [[email protected] tmp]# bzip2 -dk install.log.bz2 #不删源文件
      
  9. compress、uncompress(仅做了解,目前已不用,当前系统内核已不提供该命令)

    1. 选项与参数

      -r :可以连同目录下的文件也同时给予压缩
      -c :将压缩数据输出成为standard output 
      -v :可以列出压缩后的文件信息以及压缩过程中的一些文件名变化
      
  10. tar命令

    1. 选项与参数

      -c :建立打包文件,
      -t :查看打包文件的内容含有哪些文件 
      -x :解打包或解压缩的功能,可以搭配-C(大写)在特定到特定目录解开 
      -j :通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2 
      -z :通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz 
      -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来 
      -f filename:-f 后面跟处理后文件的全名称(路径+文件名+后缀名) 
      -C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个 选项 
      -p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
      --exclude=FILE:在压缩的过程中,不要将那些文件打包 
      注意 -c, -t, -x 不可同时出现在一串指令列中 
      
    2. tar命令仅解压压缩包中的某一个文件 ,如:shell文件

      1、查询shells文件在压缩包中是否存在
          tar –ztv –f  [/路径/]filename.tar.gz|grep ‘shells’
            [[email protected] ~]# tar -ztv -f /tmp/etc01.tar.gz |grep 'shells’
            或[[email protected] tmp]# tar -ztv -f etc01.tar.gz |grep 'shells'
            2、仅解压出shells文件
      [[email protected] tmp]# tar -zxv -f etc01.tar.gz etc/shells
      解压后在/tmp下生产一个etc文件夹,etc下有shells文件
      3、仅解压出etc/yum目录:也可以解压压缩包中的某一个子目录
      

二、 rpm安装软件

  1. RPM(RedHat Package Manager)安装管理

    这个机制最早是由Red Hat开发出来,后来实在很好用,因此很多 distributions(发行版)就使用这个机制来作为软件安装的管理方式 。包括Fedora,CentOS,SuSE等等知名的开发商。 
    例如:CDH(Cloudera Distributed Hadoop,Cloudera公司的 Hadoop发行版)提供rpm包(省略部分详细版本号),使得在 Linux上安装Hadoop这样的分布式系统变得更加简单: 
    hadoop-mapreduce-2.5.0xx.rpm  
    hadoop-mapreduce-historyserver-2.5.0xx.rpm
    hadoop-yarn-2.5.0xx.rpm 
    
  2. RPM的优点

     RPM内含已经编译过的程序与配置文件等数据,可以让用户免除重 新编译的困扰 
    RPM在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可 避免文件被错误安装 
    RPM文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件 
    RPM管理的方式使用数据库记录 RPM 文件的相关参数,便于升级 、移除、查询与验证 
    
  3. RPM的默认安装路径

     /etc    一些配置文件放置的目录,例如/etc/crontab 
    /usr/bin 一些可执行文件 
    /usr/lib   一些程序使用的动态链接库 
    /usr/share/doc 一些基本的软件使用手册与说明文件 
    /usr/share/man 一些man page(Linux命令的随机帮助说明)文件
    
  4. rpm安装命令

    1. rpm -ivh package_name
    2. 选项与参数

       -i :install的意思 
      -v :察看更细部的安装信息画面 
      -h :显示指令执行过程。
      
    3. 示例: rpm 按装JDK

      使用wget http://rpmfind.net/linux/rpm2html/search.php?query=lrzsz,下载lrzsz-0.12.21-15.x86_64.rpm 将所需要的JDK rpm包下载到本地
      
      执行rpm -ivh  jdk-8u111-linux-x64.rpm
      执行完成之后 键入 java -version 查看是否安装成功
      这里并不是自动为我们配置了环境变量   具体看这里http://blog.csdn.net/qq_31246691/article/details/79331355
      但是有些特定的场合下是需要java的环境变量的 , 最好还是自己也配置一遍:
      [[email protected] ~]# vim /etc/profile
      加入内容如下:export JAVA_HOME=/usr/java/jdk1.8.0_111
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$JAVA_HOME/bin:$PATH
      [[email protected] ~]# source /etc/profile
      [[email protected] ~]# java -version 
      java version “1.8.0_111 “
      
  5. rpm升级与更新

    rpm -Uvh <package_name> 
    -Uvh后面接的软件如果没有安装过, 系统会直接安装,若后面接的软件安装过但版本较旧,则更新至新版 
    [[email protected] soft]# rpm -Uvh jdk-8u111-linux-x64.rpm 
    Preparing...                ########################################### [100%]
        package jdk1.8.0_111-2000:1.8.0_111-fcs.x86_64 is already installed
    rpm -Fvh <pacakge_name> 
    -Fvh如果后面接的软件并未安装到Linux系统上,则该软件不会被安装,只有已安装的软件才会被升级 
    
  6. rpm查询

    1. 简单原理:

      简单原理:rpm在查询的时候,其实查询的地方是在/var/lib/rpm/ 这个目录下的数据库文件 
      [[email protected] ~]# ll /var/lib/rpm/ 
      total 58272 
      -rw-r--r--. 1 root root  5500928 Mar  8 20:27 Basenames 
      -rw-r--r--. 1 root root    12288 Mar  4 23:06 Conflictname 
      -rw-r--r--  1 root root    24576 Mar  8 20:42 __db.001 
      -rw-r--r--  1 root root   229376 Mar  8 20:42 __db.002
      
    2. rpm查询已安装软件

      1. 选项与参数

        -q :仅查询,后面接的软件名称是否有安装 
        -qa :列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!
        -qi :列出该软件的详细信息,包含开发商、版本和说明等 !!
        -ql :列出该软件所有的文件与目录所在完整文件名 !!
        -qc :列出该软件的所有配置文件 !
        -qd :列出该软件的所有说明文件 
        -qR :列出和该软件有关的相依软件所含的文件 
        -qf :由后面接的文件名,找出该文件属于哪一个已安装的软件 
        查询某个 RPM 文件内含有的信息: 
        -qp[icdlR]: 
        注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM 文件内的信息,而非已安装的软件信息 
        
  7. rpm检查

    -V :后面加软件名称,若该软件安装之后被改动过,会列出被修改过的 文件。!! 
    -Va :列出目前系统上面rpm安装的所有包中被修改过的文件。!
    -Vp :后面加的是rpm文件名,列出rpm包中的文件在当前系统中是否修改。 
    -Vf :列出某个文件(直接列出软件包安装之后的文件名)是否被改动过。!! 
    
  8. rpm 卸载

    找出与apr有关的软件名称,并尝试移除apr这个软件 
    [[email protected] ~]# rpm -qa | grep apr 
    apr-1.3.9-5.el6_2.x86_64 
    
    [[email protected] ~]# rpm -e apr 
    [[email protected] ~]# rpm -qa | grep apr 
    

三、 yum安装 、 删除 、 更新软件

  1. 为什么要有yum?

    1. rpm头疼的依赖关系 (例如安装某个游戏时)

         当安装一个rpm包时,发现它依赖于其它的rpm包,只能先去下载及安装这个依赖包。 
         当这样的依赖关系非常复杂时,一个个rpm安装对于大数据工程师来说,安装这件事演变成一个灾难。 
         卸载,也一样!删除某个rpm包时,如果有其它的rpm依赖于它,也得先删掉他们。
          如果有一个集中的地方管理多如牛毛的rpm,简化“下载+解决依赖问题+安装”这样的繁琐步骤,该多好啊
      
  2. yum

    yum是通过分析RPM的标头资料后,根据各软件的相关性制作出属 性相依时的解决方案,然后可以自动处理软件的依赖问题,以解决软 件安装、移除、升级中遇到的繁琐操作的问题
    
    1. 基本配置 /etc/yum.repos.d
  3. yum查询

    search :查询某个软件名称或者是描述的关键字 
    list :列出目前yum所管理的所有的软件名称与版本,有点类似 rpm 
    -qa 
    info :同上,格式不太一样,不过有点类似 rpm -qai 的执行结果 
    
    查找jdk相关软件包 
    [[email protected] yum.repos.d]# yum search jdk
    查看beakerlib软件包功能 
    [[email protected] yum.repos.d]# yum info beakerlib
    列出 yum 服务器上面提供的所有软件的详细信息(20条)
    [[email protected] yum.repos.d]# yum info | head -20
    列出 yum 服务器上面提供的所有软件名称(100条)
    [[email protected] yum.repos.d]# yum list |head -100
    列出目前服务器上可供本机进行升级的软件有哪些 
    [[email protected] yum.repos.d]# yum list updates !!!
    列出目前服务器上xz.x86_64可更新版本
    [[email protected] yum.repos.d]# yum list updates|grep xz.x86_64
    
  4. yum 安装/升级/卸载软件

    yum [install | update | remove] 软件名 
    install :后面接要安装的软件 
    update :后面接要升级的软件,若要整个系统都升级,就直接update即可 
    remove:删除某个软件时,依赖于该软件并已经安装到系统中的 其它软件或者包,会被一并删除(rpm方式删除某个包时,如果依赖于该包的其它包之前也被安装到系统中,删除不会成功,需要先手动删除那些包. )
    
    在安装过程中有时会出现 需要输入y/n确认的情况   在确定的情况下 使用 yum [install | update | remove] -y  跳过所有的选择 , 默认为选择yes
    

四 、 yum进阶

  1. yum服务器与客户端架构图
  2. yum客户端运行机制

    客户端每次使用yum调用 install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的文件,这些配置文件指定了yum服务器的地址。
    yum会定期去“更新”yum服务器上的rpm “清单” ,然后把“清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum/$basearch/$releasever下、即/var/cache/yum/x86_64/6),每次调用yum安装包的时候都会去这个cache目录下去找“清单”,根据“清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,如果rpm包的cache不存在,就去yum服务器下载rpm包安装。 
    
  3. yum配置文件信息

    [[email protected] soft]# cd /etc/yum.repos.d
    [[email protected] yum.repos.d]# cat CentOS-Base.repo
    [base]
    name=CentOS-$releasever - Base
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
    #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
    [base]  :代表容器的名字,中括号是必须带的,里面名字可以自定义,但不能有两个相同的名字,否则yum找不到相关的软件列表 
    name:只是描述容器
    mirrorlist: “#”注释掉 
     baseurl:容器的固定地址 
     gpgcheck:gpg验证是否开启, 1是开启,0是不开启;“开启”会让yum检查每个下载的RPM的GnuPG签名。这么做是因为你需要适当的GnuPG key注册到您的RPM数据库。可以防止被欺骗,如:非法入侵发行版网站,木马导入软件包,使不知情用户下载 
    gpgkey:数字证书公钥文件所在位置 
    
  4. yum服务器端

    所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者httpd的形式 都可以。yum服务器有一个最重要的环节就是整理出每个rpm 包的基本信息,包括rpm包对应的版本号,conf文件,binary 信息,以及很关键的依赖信息。在yum服务器上提供 了createrepo工具,用于把rpm包的基本概要信息做成一张"清 单",这张"清单"就是描述每个rpm包的spec文件中信息。  
    
版权声明:本文为chou_out_man原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chou_out_man/article/details/79392367

智能推荐

26_Python基础_继承

面向对象三大特性: 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用, 相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,  产生不同的执行结果,  增加代码的灵活度 1.  单继承 1.1 概念 继承的概念:&...

循环

与任何程序设计语言一样Java利用条件语句与循环结构确定流程控制,一下总结一下Java中的循环语句: while do while for switch 对于golang来说: switch非常灵活。从第一个expr为true的case开始执行,如果case带有fallthrough,程序会继续执行下一条case,不会再判断下一条case的expr,如果之后的case都有fallthrough,d...

1638 统计只差一个字符的子串数目(动态规划)

1. 问题描述: 给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换一个不同字符以后,是 t 串的子串。换言之,请你找到 s 和 t 串中恰好只有一个字符不同的子字符串对的数目。比方说, "computer" 和 "computation"...

websocket基本原理

HTTP中一个request只能有一个response。而且这个response也是被动的,不能主动发起 因此过去的服务端推送信息是通过客户端不停的轮询实现的 websocket是双向通信协议,提供了服务端主动推送信息的能力 需要客户端(浏览器)和服务端同时支持 如果经过代理的话,还需要代理支持,否则有些代理在长时间无通信时会自动切断连接 因此WS为了保证连接不被断掉,会发心跳 WebSocket...

mybatis+ehcache二级缓存

导入jar包 mapper.xml文件开启二级缓存 pojo类实现序列化接口 配置ehcache.xml 测试...

猜你喜欢

python+opencv实现图像拼接

任务 拍摄两张图片去除相同部分,拼接在一起 原图 结果 步骤 读取两张图片 使用sift检测关键点及描述因子 匹配关键点 处理并保存关键点 得到变换矩阵 图像变换并拼接 代码实现 扩展 这里对右边图像进行变换,右边变得模糊,可以修改代码对左边图像变换 这里只有两张图片拼接,可以封装实现多张图片拼接 可以修改代码实现上下图片的拼接...

python_sklearn机器学习算法系列之AdaBoost------人脸识别(PCA,决策树)

          注:在读本文之前建议读一下之前的一片文章python_sklearn机器学习算法系列之PCA(主成分分析)------人脸识别(k-NearestNeighbor,KNN)         本文主要目的是通过一个简单的小...

memmove函数与memcpy函数的模拟实现

memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。 下面给出两个函数的实现 首先,memmove函数。 实现的基本原理如下图。 具体代码如下: memcpy函数的实现很简单,就直接给出源代码了...

SpringFramework核心 - IOC容器的实现 - 总结

1. 概述 把Spring技术内幕第一章和第二章过了一遍,也做了一些笔记, 对IOC容器的实现有了一定皮毛理解,现在跟着源码再过一遍总结一下IOC容器的初始化,Bean的初始化的过程,做一下总结 ① IOC容器和简单工厂模式 在开始之前,先想想我们平时是怎么使用IOC容器为我们管理Bean的,假设我们要把下面的User类交给IOC容器管理 我们不想关心如何创建一个User对象实例的,仅仅在需要他的...