linux中软件包管理工具rpm和yum

首先了解下linux中程序包的相关知识 

包管理器:打包,包管理(安装、升级、卸载、查询及校验)      
       rpm: redhat package manager (早起使用perl语言写)    
       RPM is Package Manager ————>通过C语言实现,性能大幅提升    
        程序包的组成部分:    
                二进制程序:/bin, /sbin,/ /usr/bin, /usr/sbin,  可执行文件    
                库文件:/lib64, /usr/lib64  共通的功能通过库文件进行互通    
                配置文件:/etc  通过配置文件来定义工作属性    
                帮助文件:manual, info,   程序基本使用方式    
        包管理器:    
               打包:一个单一的归档文件中;    
               安装:把打包的文件展开在当前系统上,各种文件放置在正确的路径下    
               卸载:把每一个安装生成的文件搜集起来,并且删除    
               升级:新版本文件替换老版本的文件    
               查询:查询安装的程序包的信息    
               校验:程序包安装后是否又被篡改等(来源的合法性、完整性)    
  rpm包:    
               打包工具:rpmbuild: 基于specs文件进行打包    
               一个rpm包总共包含10个功能,5个常用,3个少用,2个基本不用;但是打包只打了5个常用功能,此时就需要“分包机制”来解决有些人需要3个少用的情况。    
分包机制:    
    testapp-VERSION.tar.gz    
    核心包:testapp-VERSION    
    支包:testapp-devel-VERSION    
    VERSION:major(主版本号).minor(次版本号).release(修正版本号)    
      base-4.2.4.tar.gz    
      主版本号定义了应用程序最关键的功能。    
      次版本号一般是小功能的改进    
      修正版本号一般是修复bug等    
  rpm包的命名机制:    
     name(报名)-VERSION(RPM包的Version)-RELEASE(发行版本号).ARCH(架构).rpm    
       bash-4.2.4-1.el7.x86_64.rpm    
       bash-devel-4.2.4-1.el7.x86_64.rpm    
  包和包之间:有可能存在依赖关系:    
     X --> Y    Y的功能需要X来支持。    
  rpm数据库:/var/lib/rpm/    记录了包名,生成的文件,校验码等    
  如何获取rpm包:    
    1、发行版提供的程序包;    
    2、Fedora-EPEL    
    3、项目的官方站点    
    4、搜索引擎    
http://rpmfind.net    
http://rpm.pbone.net    
http://pkgs.org    
  CentOS识别光盘用的设备文件:/dev/cdrom,    
  首先建立光盘的一个挂载点,然后将光盘进行挂在到这个点上。、    
   mkdir /var/mnt    
   mount /dev/cdrom /var/mnt    
基于rpm命令实现程序包管理:    
   安装:    
     rpm {-i|--install} [install-options] PACKAGE_FILE ...    
        -i:安装    
        -v:显示详细过程,-vv, -vvv    
        -h:用#来显示安装进度

[[email protected] Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm    
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY    
Preparing...                ########################################### [100%]    
   1:zsh                    ########################################### [100%]

-vv:可以展示出非常具体的安装信息,哪些个文件被装到哪个路径下面等信息。  
  每个rpm包都提供一个或多个capabilities

[[email protected] Packages]# rpm -ivh php-mysql-5.3.3-40.el6_6.x86_64.rpm    
warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY    
error: Failed dependencies:    
    php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-mysql-5.3.3-40.el6_6.x86_64    
    php-pdo(x86-64) is needed by php-mysql-5.3.3-40.el6_6.x86_64

上图表示依赖关系没有解决。不给安装  
            --nodeps:忽略依赖关系安装

php-mysql-5.3.3-40.el6_6.x86_64.rpm --nodeps   
warning: php-mysql-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY    
Preparing...                ########################################### [100%]    
   1:php-mysql              ########################################### [100%]

加上参数--nodeps则忽略依赖关系进行安装。  
            --replacepkgs:重装程序包    
对已经存在的包需要重新安装,则可以使用这个参数

[[email protected] Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm   
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY    
Preparing...                ########################################### [100%]    
    package zsh-4.3.11-4.el6.centos.x86_64 is already installed

表示zsh这个包已经安装了。  
                    使用--replacepkgs参数重新安装

[[email protected]]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm --replacepkgs   
warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY    
Preparing...                ########################################### [100%]    
   1:zsh                    ########################################### [100%]

升级:  
   rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...    
   rpm {-F|--freshen} [install-options] PACKAGE_FILE ...       
      -Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;    
      升级也是使用Install的选项,比如--nodeps等    
      -Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;    
      --nodeps    
      --oldpackage:降级;升级版本比原先版本要低    
      --force:强制升级。老的版本依赖当前的包,如果升级了可能老的其他服务不支持,那么就会阻止升级,则使用这条参数进行强制升级。    
  卸载:    
    rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] 包名(比如zsh,而不是xxxxx.rpm)

[[email protected]]# rpm -e zsh   
[[email protected]]#

不会显示任何信息,如果异常则会出现报错。如果一个程序包被另外一个程序包依赖,则卸载的时候会报错,因为另外一个包存在依赖关系。  
  查询:    
    rpm {-q|--query} [select-options] [query-options]

[[email protected]]# rpm -q zsh   
zsh-4.3.11-4.el6.centos.x86_64

表示已经被安装  
   查询选项:不能更换先后顺序,必须q在前。    
        -qa: 查询本机已经安装的所有程序包;    
        -qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;    
        -qc: 查询指定程序包安装生成的配置文件

[[email protected]]# rpm -qc zsh   
                /etc/skel/.zshrc    
                /etc/zlogin    
                /etc/zlogout    
                /etc/zprofile    
                /etc/zshenv    
                /etc/zshrc

-qd: 查询指定的程序包安装生成的文档

[[email protected]]# rpm -qd zsh   
/usr/share/doc/zsh-4.3.11/BUGS    
/usr/share/doc/zsh-4.3.11/CONTRIBUTORS    
/usr/share/doc/zsh-4.3.11/FAQ    
/usr/share/doc/zsh-4.3.11/FEATURES    
/usr/share/doc/zsh-4.3.11/LICENCE    
/usr/share/doc/zsh-4.3.11/MACHINES

-qi: 查询指定的程序包的相关信息;

[[email protected]]# rpm -qi zsh    
Name        : zsh                          Relocations: (not relocatable)    
Version     : 4.3.11                            Vendor: CentOS    
Release     : 4.el6.centos                  Build Date: Fri 24 Jul 2015 05:41:25 PM CST    
Install Date: Thu 27 Aug 2015 10:15:37 AM CST      Build Host: c6b8.bsys.dev.centos.org    
Group       : System Environment/Shells     Source RPM: zsh-4.3.11-4.el6.centos.src.rpm    
Size        : 5283457                          License: BSD    
Signature   : RSA/SHA1, Sat 25 Jul 2015 04:41:32 AM CST, Key ID 0946fca2c105b9de    
Packager    : CentOS BuildSystem <http://bugs.centos.org>    
URL         : http://zsh.sunsite.dk/    
Summary     : A powerful interactive shell

-ql: 查询程序包安装生成的所有文件的列表;  
-q --scripts:查询程序包相关的脚本:    
   preinstall: 安装前脚本    
   postinstall:安装后脚本    
   preuninstall: 卸载前脚本    
   postuninstall: 卸载后脚本

[[email protected]]# rpm -q zsh --scripts   
postinstall scriptlet (using /bin/sh):    
if [ ! -f /etc/shells ] ; then    
    echo "/bin/zsh" > /etc/shells    
else    
    grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells    
fi    
if [ -f /usr/share/info/zsh.info.gz ]; then    
# This is needed so that --excludedocs works.    
/sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \    
  --entry="* zsh: (zsh).            An enhanced bourne shell."    
fi    
****    
***    
**    
*

-p: 查询针对是未安装的程序包文件;  
比如我没安装zenity这个rpm包,我可以使用-qpi跟随这个包的rpm名称来查询信息

[[email protected]]# rpm -qi zenity   
package zenity is not installed    
[[email protected]]# rpm -qip zenity    
error: open of zenity failed: No such file or directory    
[[email protected]]# rpm -qpi zenity    
error: open of zenity failed: No such file or directory    
[[email protected]]# rpm -qpi zenity-2.28.0-1.el6.x86_64.rpm    
warning: zenity-2.28.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY    
Name        : zenity                       Relocations: (not relocatable)    
Version     : 2.28.0                            Vendor: CentOS    
Release     : 1.el6                         Build Date: Tue 17 Aug 2010 07:12:21 AM CST    
Install Date: (not installed)               Build Host: c6b2.bsys.dev.centos.org    
Group       : Applications/System           Source RPM: zenity-2.28.0-1.el6.src.rpm    
Size        : 4338271                          License: LGPLv2+    
Signature   : RSA/8, Sun 03 Jul 2011 01:07:05 PM CST, Key ID 0946fca2c105b9de    
Packager    : CentOS BuildSystem <
http://bugs.centos.org
>    
URL         : 
http://directory.fsf.org/zenity.html
    
Summary     : Display dialog boxes from shell scripts    
Description :    
Zenity lets you display Gtk+ dialog boxes from the command line and through    
shell scripts. It is similar to gdialog, but is intended to be saner. It comes    
from the same family as dialog, Xdialog, and cdialog.

-whatprovides 查询哪种功能被哪个程序包所提供  
 -whatrequires 查询哪种能力被哪个程序包所依赖    
校验:检查安装的rpm包文件是否被改动。如果对安装完的配置文件进行改动然后使用校验,则能发现被改动的文件具体路径。

[[email protected]]# rpm -qc zsh   
/etc/skel/.zshrc    
/etc/zlogin    
/etc/zlogout    
/etc/zprofile    
/etc/zshenv    
/etc/zshrc    
[[email protected]]# vim /etc/skel/.zshrc

我对.zshrc进行了改动,之后使用rpm -V zsh就能发现:

[[email protected]]# rpm -V zsh    
S.5....T.  c /etc/skel/.zshrc

rpm {-V|--verify} [select-options] [verify-options]  
    S file Size differs 文件大小发生改变    
    M Mode differs (includes permissions and file type) 权限等发生改变    
    5 digest (formerly MD5 sum) differs  校验码发生改变,内容改变    
    D Device major/minor number mismatch 主设备号不匹配    
    L readLink(2) path mismatch    
    U User ownership differs  用户属主改变    
    G Group ownership differs  用户属组改变    
    T mTime differs  最近修改时间戳发生改变    
    P caPabilities differ  删除了一个安装上去的文件,则会报错    
包校验:    
    来源合法性验正:非对称加密(公钥和私钥)    
    完整性验正:单向加密    
    导入密钥(对方的公钥):rpm --import /PATH/TO/KEY_FILE    
    校验:rpm -K /PATH/TO/RPM_FILE    
    只要将RPM-GPG-KEY-CentOS-6导入则能进行对Packages下的rpm包进行校验

[[email protected] mnt]# ls /etc/pki/rpm-gpg/    
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6    
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6

导入密钥(对方的公钥):rpm --import /PATH/TO/KEY_FILE

[[email protected] mnt]# rpm --import ./RPM-GPG-KEY-CentOS-6    
[[email protected] mnt]#

校验:rpm -K /PATH/TO/RPM_FILE

[[email protected] mnt]# rpm -K ./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm   
./Packages/zsh-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

导入公钥后,则使用rpm安装不会出现warning告警了。

当RPM依赖关系复杂的时候,就有了YUM这个功能,来解决包之间的依赖关系。    
YUM: Yellowdog Updater Modified    
  yum repositories:    
 文件服务器:    
   ftp://hostname/PATH/TO/REPO    
   http://hostname/PATH/TO/REPO    
   file:///PATH/TO/REPO    
 yum程序的配置文件:    
      /etc/yum.conf    
      定义全局配置:对所有仓库都适用的配置    
      /etc/yum.repos.d/*.repo    
      一个文件通常用于一个或一组功能相近或相关的仓库    
      定义一个仓库指向:    
            [REPO_ID]    
            name=   指明repo名称    
            baseurl=  可以使用的路径 ftp  http  file  可以存在多个,随机挑选一个使用,所提供的包和源数据需要一样    
                                mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE    
      enabled={1|0}  1启用 0禁用    
      gpgcheck={1|0}  1启用包校验  0禁用包校验    
      gpgkey=  如果启用校验,则指明使用哪个密钥校验    
     cost=  如果多个仓库,则这个仓库的开销,开销越小越容易被使用    
  定义仓库指向可用变量:    
       $releasever: 引用当前系统的主版本号;    
       $basearch: 当前系统的基本架构;    
          i386, i486, i586, i686: i386    
http://mirrors.magedu.com/CentOS/$releasever/os/$basearch    
通过yum repolist查看可用yum

[[email protected] yum.repos.d]# yum repolist    
Loaded plugins: fastestmirror, security    
Determining fastest mirrors    
repo id                                      repo name                               status    
aa                                           aa                                      6,575    
repolist: 6,575

yum命令:  
   yum [options] [command] [package ...]    
   命令:    
   安装:install

[[email protected] yum.repos.d]# yum install php-mbstring   
Loaded plugins: fastestmirror, security    
Setting up Install Process    
Loading mirror speeds from cached hostfile    
Resolving Dependencies    
--> Running transaction check    
---> Package php-mbstring.x86_64 0:5.3.3-40.el6_6 will be installed    
--> Processing Dependency: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-mbstring-5.3.3-40.el6_6.x86_64    
--> Running transaction check    
---> Package php-common.x86_64 0:5.3.3-40.el6_6 will be installed    
--> Finished Dependency Resolution    
Dependencies Resolved    
===========================================================================================    
Package                 Arch              Version                     Repository     Size    
===========================================================================================    
Installing:    
php-mbstring            x86_64            5.3.3-40.el6_6              aa            458 k    
Installing for dependencies:    
php-common              x86_64            5.3.3-40.el6_6              aa            527 k    
Transaction Summary    
===========================================================================================    
Install       2 Package(s)    
Total download size: 985 k    
Installed size: 5.0 M

yum自己会自己解决依赖关系  
            卸载:remove    
               依赖此包的其他包也会被卸载    
               升级:update    
               yum check-update 检查哪些升级包可用    
               yum update 包名    
           查询:    
              info    
              search KEYWORD

[[email protected] Packages]# yum search zsh   
Loaded plugins: fastestmirror, security    
Loading mirror speeds from cached hostfile    
==================================== N/S Matched: zsh =====================================    
python-twisted-core-zsh.x86_64 : Tab completion for Zsh and Twisted Core    
zsh-html.x86_64 : Zsh shell manual in html format    
zsh.x86_64 : A powerful interactive shell

search KEYWORD     list all|installed|availiable列出安装了的包,可用的包,全部的包等  
 provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成    
      重新安装:reinstall    
      降级:downgrade    
      清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]    
      清理包,清理元数据,清理过期缓存,清理rpm数据库文件,清理插件,全部清理    
      生动生成缓存:makecache    
      包组:    
         grouplist    
         groupinfo "GRP_NAME"    
         groupinstall "GRP_NAME"    
         groupremove "GRP_NAME"    
      仓库:    
        repolist [all|enabled|disabled]    
        repoinfo [all|enabled|disabled]    
        如何使用光盘当做本地仓库:    
                挂载光盘至某目录    
                定义仓库,使用file:///指明其访问路径;    
简单yum配置,使用本地光盘内的源:

[aa]   
name=aa    
baseurl=file:///var/mnt    
enable=1    
gpecheck=0

创建本地仓库:  
        yum install createrepo    
        createrepo /PATH/TO/RPMFILES/    
 DNF:yum前端管理升级版,由SUSE研发,在cenots7里面只要yum install dnf,以后可以使用dnf命令。

时间: 2024-10-27 05:57:34

linux中软件包管理工具rpm和yum的相关文章

linux软件包管理之rpm 、yum基本使用

linux软件包管理之rpm .yum基本使用 一.RPM RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.S.u.S.E.以及TurboLinux等Linux的分发版本都有采用,可以算是公认的行业标准了. RPM主要功能在于对linux中以.rpm为后缀的软件包的安装.升级.卸载.校验及查询进行便捷管理. 1.安装软件包及常用选项       rpm

包管理工具rpm和yum的用法

包管理工具rpm和yum的用法 一.rpm的用法 rpm原本是Rde Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐收到其他发行版的采用,RPM套件管理方式的出现,让Linux易于安装.升级,间接提升了Linux的适用性. rpm用法:rpm [OPTION...] 1.rpm安装软件包,后面需要跟上程序包文件的绝对路径或相对路径 常用选项: -v:显示指令的执行过程 -vv:详细显示指令执行过程,便于排错 -h:以#号显示程

[Linux程序包管理之RPM及YUM]

Linux程序包管理之RPM及YUM 一.RPM和YUM简介 RPM,全称RPM Package Manager,是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用. RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装.卸载.升级.查询.校验等程序管理:通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理. RPM包命名格式: Yum,全称Yellow dog Updater, Modified , 由Duke

Linux程序包管理:RPM和YUM

Linux程序包管理:RPM和YUM   就像Window一样,我们安装了windows系统如果没有相应的应用软件,如OFFICE,IE,等各种软件,用户是无法使用计算机,linux 完成各种应用功能,也需要各种应用程序,所以程序包的管理就非常必要. Linux平台的内核功能:进程管理.内存管理.网络协议栈.驱动程序....             应用程序:              早期的linux程序包的组成部分:                二进制程序:/bin, /sbin,/ /u

Linux软件包管理器rpm与yum

在我们的运维工作,总是避免不了安装某些软件,或者编译安装某些软件,我们知道操作系统当中的程序都是有程序员通过开发工具开发的来,程序员直接编写的纯文本的文档我们称之为源代码,但我们的计算机只能识别二进制程序,那么必须要将源代码变成计算机能识别的二进制程序,这里需要通过编译器来进行编译,将源码转换成二进制程序,再通过安装即可. 还有一类程序就是二进制程序,系统是由某些厂商来做的,在厂商的系统上编译出来的程序,自然就在系统上运行了,这里是由厂商直接编译好程序然后释放出来给用户,如此一来,由于我们本来就

linux程序包安装、管理工具rpm、yum和源码安装

rpm包管理器: 应用程序要想成为机器可识别的二进制机器码,必须经过一下步骤: rpm包管理器的功能就是将这一切过程自动管理,成为易于普通人使用,可简化应用程序安装的工具. 人们将源码经过编译执行后将程序打包成rpm格式的包,所有使用rpm包安装时必须与提供rpm包的作者使用相同的操作系统平台环境.因此出现了不同的包管理器,rpm知识其中一个. rpm包的命名格式: rpm包命名方式:name-version-arch.rpm version :主版本号.次版本号.平台号 arch :表示平台,

Linux基础管理——软件包管理:rpm,yum高级使用方法(史上最全,没有之一)

前言: GRU Linux操作系统中,实现软件包管理的常见工具有RPM和yum:本专题将就Centos系统中安装包的命名.校验.密钥导入导出.包安装.卸载.升级.查询等众多rpm包管理相关的操作实现进行总结. 1.安装包 1.1.包管理器分类 二进制应用程序的组成部分:二进制文件.库文件.配置文件.帮助文件.所以包管理器就是对这四类文件进行分门别类存储的一个管理工具. 程序包管理器:     debian:deb文件, dpkg包管理器.         redhat: rpm文件, rpm包管

《Linux程序包管理之RPM及YUM》

一.RPM和YUM简介 RPM,全称RPM Package Manager是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用. RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装.卸载.升级.查询.校验等程序管理:通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理. RPM包命名格式: Yum,全称Yellow dog Updater, Modified , 由Duke University团队,修改Yello

Linux程序包管理:rpm、yum、编译安装

RPM: RPM Package Manager(RPM软件包管理器),是一款在各个版本liunx上都使用的软件包管理器. RPM共有10种基本的模式: 它们是安装.查询.验证.删除等. 安装模式: rpm –i [安装选项] 查询模式: rpm –q [查询选项] 验证模式: rpm –V 或 –verify [验证选项] 删除模式: rpm –e RPM常用参数: -q  查询 -p  <包文件名>   查询软件包文件 -a  查询所有软件包 -f <文件列表>  查询文件属于