linux,rpm,yum详细使用说明

本文对linux包管理工具,rpm,yum做详细使用说明。

一,RPM软件包管理器

介绍:

什么是RPM包管理器

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


rpm的作用

打包,包管理(安装、升级、卸载、查询及校验)

rpm包格式(分包机制)

RPM包的一般格式为:

name-version-arch.rpm

name-version-arch.src.rpm

name:软件包名称。

version:带有主、次和修订的软件包版本。

arch:硬件平台。硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha

src.rpm:源代码包。

以“openssl-2.2.1c-1.el7.x86_64.rpm”为例:

openssl:是软件名称。

2.2.1c-1:是软件版本。(2为主版本,2.1c为次版本,-1为软件包修正版本)

el7:软件包使用系统环境,为rhel 7.x.

x86_64:是适用的硬件平台.

其中还包含有特殊的名称:

1、fcXX,elXX:表示这个软件包的发行商版本,就像这里的fc18,说明这个软件包是在Fedora 18下使用的。而openssl-1.0.0-20.el6.x86_64.rpm表示这个软件包是在RHEL 6.x(Red Hat Enterprise Linux)/CentOS 6.x下使用。

2、devel:表示这个RPM包是软件的开发包,例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。

3、noarch:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。

如何获取rpm包:

1、发行版提供的程序包;

2、Fedora-EPEL

3、项目的官方站点

4、搜索引擎

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org 

RPM详细使用:

安装、升级、卸载、查询

1)安装:(首先需要下载rpm包,然后才可以安装)

rpm {-i|--install} [install-options] PACKAGE_FILE ...

   -i:

   -v:显示详细过程,-vv, -vvv

   -h:

      每个rpm包都提供一个或多个(capabilities)功能

   --nodeps:忽略依赖关系安装,(不推荐,因为安装后软件包需要依赖的功能将无法实现)

   --replacepkgs:重装程序包 

示例:

#成功安装zsh软件包
[root@os01 Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-7.el7                  ################################# [100%]
#安装php-mysql,依赖php-pdo(x86-64),解决方法:安装依赖包或者使用-nodeps忽略依赖关系安装
[root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm 
error: Failed dependencies:
        php-pdo(x86-64) = 5.4.16-23.el7_0.3 is needed by php-mysql-5.4.16-23.el7_0.3.x86_64
[root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm --nodeps  #忽略依赖关系
Preparing...                          ################################# [100%]
Updating / installing...
   1:php-mysql-5.4.16-23.el7_0.3      ################################# [100%]
#重新安装,重新安装php-mysql
   1:php-mysql-5.4.16-23.el7_0.3      ################################# [100%]
[root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm --nodeps --replacepkgs
Preparing...                          ################################# [100%]
Updating / installing...
   1:php-mysql-5.4.16-23.el7_0.3      ################################# [100%]


2)升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

    -Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;

    -Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;

    --nodeps

    --oldpackage:降级,高版本向低版本(一般很少用)

    --force: 强制安装 

  

rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包 

   都能安装上,但这种强制安装的软件包不能保证完全发挥功能

示例:

# 升级samba软件包,因为没有安装,没有旧版本,所以直接安装
[root@zy03 Packages]# rpm -Uvh samba-3.6.23-20.el6.x86_64.rpm --nodeps
Preparing...                ########################################### [100%]
   1:samba                  ########################################### [100%]
#之后下载高版本samba-4.1.12-21.el7_1.x86_64.rpm,做升级安装,提示conflicts冲突,使用--nodeps --force强行升级安装 
a.txt  datafile  Downloads  ip.txt              Pictures  Templates
[root@zy03 ~]# rpm -Uvh samba-4.1.12-21.el7_1.x86_64.rpm --nodeps
warning: samba-4.1.12-21.el7_1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                ########################################### [100%]
        file /usr/share/man/man1/smbstatus.1.gz from install of samba-0:4.1.12-21.el7_1.x86_64 conflicts with file from package samba-common-0:3.6.9-151.el6.x86_64
#强制安装 --force
[root@zy03 ~]# rpm -Uvh samba-4.1.12-21.el7_1.x86_64.rpm --nodeps --force
warning: samba-4.1.12-21.el7_1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                ########################################### [100%]
   1:samba                  ########################################### [100%]


3)卸载:

         rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...  

示例:

#卸载刚才安装的samba 只要带包名称即可,没有消息证明卸载成功
[root@zy03 ~]# rpm -e samba   #无消息证明卸载成功
[root@zy03 ~]# rpm -e samba
error: package samba is not installed
#--test 不真实卸载,只查看卸载需要的信息
[root@zy03 Packages]# rpm -e httpd --test
error: Failed dependencies:
        httpd >= 2.2.0 is needed by (installed) gnome-user-share-2.28.2-3.el6.x86_64


4)查询

rpm {-q|--query} [select-options] [query-options]

   查询选项:

          -qa: 查询本机已经安装的所有程序包;

          -qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;

          -qc: 查询指定程序包安装生成的配置文件

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

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

          -ql: 查询程序包安装生成的所有文件的列表;

          -q --scripts:查询程序包相关的脚本:

           preinstall: 安装前脚本

           postinstall:安装后脚本

           preuninstall: 卸载前脚本

           postuninstall: 卸载后脚本

          -p: 查询针对是未安装的程序包文件;

                            -qpl: 列出RPM软件包内的文件信息[Query Package list];
                            -qpi:列出RPM软件包的描述信息[Query Package install package(s)]; 

示例:

# -qa 查询所有已安装的包,过滤出http(一般用于查询有没安装某个软件包)
[root@zy03 ~]# rpm -qa|grep httpd
httpd-2.2.15-47.el6.centos.x86_64
httpd-tools-2.2.15-47.el6.centos.x86_64
#-qf 查询httpd.conf文件是由哪个安装包生成
[root@zy03 ~]# rpm -qf /etc/httpd/conf/httpd.conf 
httpd-2.2.15-47.el6.centos.x86_64
#-qc: 查询httpd安装生成的配置文件
[root@zy03 ~]# rpm -qc httpd
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/var/www/error/HTTP_BAD_GATEWAY.html.var
...........
#查询指定的httpd生成的文档
[root@zy03 ~]# rpm -qd httpd
/usr/share/doc/httpd-2.2.15/ABOUT_APACHE
/usr/share/doc/httpd-2.2.15/CHANGES
/usr/share/doc/httpd-2.2.15/LICENSE
/usr/share/doc/httpd-2.2.15/NOTICE
/usr/share/doc/httpd-2.2.15/README
.......
# -ql: 查询httpd安装生成的所有文件的列表;
[root@zy03 bin]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf
.......
# -q --scripts:查询程序包相关的脚本
[root@zy03 bin]# rpm -q --scripts m4
postinstall scriptlet (using /bin/sh):  #安装后执行的脚本
if [ -f /usr/share/info/m4.info ]; then # --excludedocs?
    /sbin/install-info /usr/share/info/m4.info /usr/share/info/dir || :
fi
preuninstall scriptlet (using /bin/sh):  #卸载前执行的脚本
if [ "$1" = 0 ]; then
    if [ -f /usr/share/info/m4.info ]; then # --excludedocs?
        /sbin/install-info --delete /usr/share/info/m4.info /usr/share/info/dir || :
    fi
fi
# -p: 查询针对是未安装的程序包文件; qpi qpl
[root@zy03 Packages]# rpm -qpi mysql-5.1.73-5.el6_6.x86_64.rpm  #包信息
Name        : mysql                        Relocations: (not relocatable)
Version     : 5.1.73                            Vendor: CentOS
Release     : 5.el6_6                       Build Date: Mon 22 Jun 2015 09:08:32 PM CST
Install Date: (not installed)               Build Host: c6b9.bsys.dev.centos.org
Group       : Applications/Databases        Source RPM: mysql-5.1.73-5.el6_6.src.rpm
Size        : 2495593                          License: GPLv2 with exceptions
.........
[root@zy03 Packages]# rpm -qpl mysql-5.1.73-5.el6_6.x86_64.rpm  #安装生成文件列表
/usr/bin/msql2mysql
/usr/bin/my_print_defaults
/usr/bin/mysql
/usr/bin/mysql_config
/usr/bin/mysql_find_rows
/usr/bin/mysql_waitpid
/usr/bin/mysqlaccess
/usr/bin/mysqladmin

5)校验:

         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 


示例:

下载并导入KEY
cd /etc/pki/rpm-gpg
wget http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*



二,YUM包管理器

介绍

什么是YUM包管理器

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

YUM需要在系统上进行配置

YUM作用以及配置

包管理(安装、升级、卸载、查询等)

yum程序的配置文件:

  /etc/yum.conf

   定义全局配置:对所有仓库都适用的配置

  /etc/yum.repos.d/*.repo

   一个文件通常用于一个或一组功能相近或相关的仓库

   定义一个仓库指向:

    [REPO_ID]

    name=              #YUM仓库名称

    baseurl=            #仓库地址路径,http,ftp,file

    # mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE #可以指定文件,文件内为yum源地址,启用后会去搜索使用这些地址

    enabled={1|0}          #是否启用,默认启用 1

    gpgcheck={1|0}         #是否检查

    gpgkey=             #检查key

    cost=               #开销,当多个源可以使用默认使用开销最小的,一般为本地yum源

   

定义仓库指向可用变量:

示例:

    http://mirrors.ustc.edu.cn/centos/$releasever/os/$basearch 

$releasever: 引用当前系统的主版本号; 

$basearch: 当前系统的基本架构;

i386, i486, i586, i686: i386

http://mirrors.ustc.edu.cn/centos/7/os/x86_64/

注意:7的话代表cetos7的最后一个版本

示例:

[root@zy03 yum.repos.d]# cat yum.repo 
[local]
name=local p_w_picpath
baseurl=  #本地为 ,后面的/meida为路径  
enabled=1
gpgcheck=0

YUM详细使用:

yum命令:

  yum [options] [command] [package ...] 

命令:

安装:install

卸载:remove

升级:update

  1.  

  2. 列出所有可更新的软件清单
    命令:yum check-update

    1. 安装所有更新软件

      命令:yum update

    2. 仅安装指定的软件

      命令:yum install <package_name>

    3. 仅更新指定的软件

      命令:yum update <package_name>

      查询:info search KEYWORD

     list all|installed|availiable

     provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成

    重新安装:reinstall

    降级:downgrade

    清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

    生动生成缓存:makecache 

示例:

说明:安装的包不像rpm需要给定完整包名版本,只需要给定包名即可;

yum install mysql -y -y选项可以直接指出,之后不需要确定,直接自动安装;

1)安装:install

示例

[root@zy03 yum.repos.d]# yum install mysql   #只需要给包名mysql即可,自动解决依赖关系
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be installed
--> Processing Dependency: mysql-libs = 5.1.73-5.el6_6 for package: mysql-5.1.73-5.el6_6.x86_64
--> Running transaction check
---> Package mysql-libs.x86_64 0:5.1.66-2.el6_3 will be updated
---> Package mysql-libs.x86_64 0:5.1.73-5.el6_6 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================
 Package                   Arch                  Version                       Repository            Size
==========================================================================================================
Installing:
 mysql                     x86_64                5.1.73-5.el6_6                local                894 k
Updating for dependencies:
 mysql-libs                x86_64                5.1.73-5.el6_6                local                1.2 M
Transaction Summary               #为解决依赖关系,需要安装mysql-libs
==========================================================================================================
Install       1 Package(s)
Upgrade       1 Package(s)
Total download size: 2.1 M
Is this ok [y/N]: y               #输入y确定安装
Downloading Packages:
----------------------------------------------------------------------------------------------------------
Total                                                                      72 MB/s | 2.1 MB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating   : mysql-libs-5.1.73-5.el6_6.x86_64                         1/3 
  Installing : mysql-5.1.73-5.el6_6.x86_64                             2/3 
  Cleanup    : mysql-libs-5.1.66-2.el6_3.x86_64                        3/3 
  Verifying  : mysql-libs-5.1.73-5.el6_6.x86_64                         1/3 
  Verifying  : mysql-5.1.73-5.el6_6.x86_64                            2/3 
  Verifying  : mysql-libs-5.1.66-2.el6_3.x86_64                         3/3 
Installed:
  mysql.x86_64 0:5.1.73-5.el6_6                                       
Dependency Updated:
  mysql-libs.x86_64 0:5.1.73-5.el6_6                                                                     
Complete!                    #安装成功

2)卸载:remove

示例:

[root@zy03 yum.repos.d]# yum remove mysql -y  #卸载mysql
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================================
 Package               Arch                   Version                        Repository              Size
==========================================================================================================
Removing:
 mysql                 x86_64                 5.1.73-5.el6_6                 @local                 2.4 M
Transaction Summary
==========================================================================================================
Remove        1 Package(s)
Installed size: 2.4 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : mysql-5.1.73-5.el6_6.x86_64                                 Verifying  : mysql-5.1.73-5.el6_6.x86_64                                Removed:    mysql.x86_64 0:5.1.73-5.el6_6
                                    
Complete!                    #卸载成功

3)升级:update (如果不带软件包名称yum update,为升级所有软件包)

yum update samba-4.1.12-21.el7_1.x86_64.rpm

4)查询:info search KEYWORD

yum list            #列出资源库中所有可以安装或更新的rpm包 

yum list mozilla

yum list mozilla*        #列出资源库中特定的可以安装或更新以及已经安装的rpm包 

yum list updates        #列出资源库中所有可以更新的rpm包 

yum list installed      #列出已经安装的所有的rpm包 

yum search mozilla      #搜索匹配特定字符的rpm包 注:在rpm包名,包描述等中搜索 

yum provides /etc/fstab   #查看特定文件属于哪个软件包

5)重新安装:reinstall

yum reinstall httpd -y 

6)降级downgrade

yum downgrade httpd -y

7)清理缓存

clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

默认情况下,yum 在 /var/cache/yum/ 目录保存临时文件,每个仓库都有自己的子目录。仓库目录中 packages/ 子目录包含了缓存的软件包。例如,目录 /var/cache/yum/development/packages/ 包含从 development 仓库下载的软件包。

#yum clean packages 

从系统中删除任何缓存的软件包。我们需要注意的是当我们下载软件包之后,软件包并不会被自动地删除

#yum clean headers 

删除所有的头文件,这些文件用于yum解决软件的依赖关系。

#yum clean metadata

删除yum用于确定软件包可用的一些文件(元数据文件)。使用这个选项会强制让yum下次运行的时候下载所有的元数据

#yum clean dbcache 

删除sqlite缓存,这个缓存用来以很快的速度访问原数据。使用这个选项将会使得yum在下次运行的时候重新创建缓存文件。 

#yum clean all 

删除上面说过的所的内容。

8)生成yum缓存

#yum makecache

YUM包组管理:

     grouplist            #列出包组

     groupinfo "GRP_NAME"        #查看特定包组信息

     groupinstall "GRP_NAME"       #安装包组

     groupremove "GRP_NAME"       #删除包组

示例:

#列出包组
[root@os01 Packages]# yum grouplist  
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirror.neu.edu.cn
 * updates: mirrors.sina.cn
Available environment groups:
   Minimal Install
   Compute Node
   Infrastructure Server
.....
#查看特定包组信息
Done
[root@os01 Packages]# yum groupinfo "GNOME Desktop"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirror.neu.edu.cn
 * updates: mirrors.sina.cn
Environment Group: GNOME Desktop
 Environment-Id: gnome-desktop-environment
 Description: GNOME is a highly intuitive and user friendly desktop environment.
 Mandatory Groups:
   +base
   +core
   +desktop-debugging
   +dial-up
   +directory-client
#安装包组GNOME Desktop
   +smart-card
[root@os01 Packages]# yum groupinstall "GNOME Desktop"     
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirror.neu.edu.cn
 * updates: mirrors.sina.cn
Warning: Group core does not have any packages to install.
Warning: Group guest-agents does not have any packages to install.
Package gtk2-immodule-xim-2.24.22-5.el7_0.1.x86_64 already installed and latest version
Package imsettings-gsettings-1.6.3-9.el7.x86_64 already installed and latest version
Package ibus-gtk3-1.5.3-11.el7.x86_64 already installed and latest version
#删除包组GNOME Desktop
[root@os01 Packages]# yum groupremove "GNOME Desktop"

仓库信息查看:

     repolist [all|enabled|disabled]

     repoinfo [all|enabled|disabled] 


示例:

#列出启用的的repo库 (默认是列出所有 all)
[root@os01 Packages]# yum repolist enabled
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirror.neu.edu.cn
 * updates: mirrors.sina.cn
repo id                                          repo name                                          status
base/7/x86_64                                    CentOS-7 - Base                                    8,652
extras/7/x86_64                                  CentOS-7 - Extras                                    181
updates/7/x86_64                                 CentOS-7 - Updates    
#列出仓库详细信息
[root@os01 Packages]# yum repoinfo enabled
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * extras: mirror.neu.edu.cn
 * updates: mirrors.sina.cn
Repo-id      : base/7/x86_64
Repo-name    : CentOS-7 - Base
Repo-revision: 1427842153
Repo-updated : Wed Apr  1 06:50:46 2015
Repo-pkgs    : 8,652
Repo-size    : 6.3 G
Repo-mirrors : http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock
Repo-baseurl : http://mirrors.nwsuaf.edu.cn/centos/7.1.1503/os/x86_64/ (9 more)
Repo-expire  : 21,600 second(s) (last: Mon Sep 14 14:18:50 2015)
Repo-filename: /etc/yum.repos.d/CentOS-Base.repo
.......

创建本地yum仓库

步骤:

1,创建源的软件包目录将软件包放入此目录

2,使用createrepo 创建索引

3,创建yum配置文件

4,然后将这个目录用NFS,http或者ftp发布,其他linux主机就可以使用此yum源资源了。

示例:

#1,创建yum源目录
[root@os01 ~]# mkdir /yum-local  
[root@os01 ~]# mount /dev/sr0 /media/  #挂载本地光盘到/media
[root@os01 ~]# cd /media/Packages/
[root@os01 Packages]# cp * /yum-local/
#2,创建好本地的仓库目录后,需要使用createrep对这个目录创建yum索引。
[root@os01 Packages]# yum install createrepo -y  #安装createrepo工具
#对本地仓库文件夹创建索引,这会在/yum-local/下创建repodata目录,里面存放的就是这个目录中rpm的索引信息,每次这个文件夹中的软件包发生变化,都要重新索引一次。
[root@os01 Packages]# createrepo /yum-local/
Spawning worker 0 with 1788 pkgs
Spawning worker 1 with 1788 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@os01 ~]# ll -d /yum-local/repodata/
drwxr-xr-x 2 root root 4096 Sep 14 14:43 /yum-local/repodata/
#3,创建yum配置文件
#如果想使用本地仓库,先要将/etc/yum.repos.d/下其他网络仓库配置文件都删除,或者备份到其他文件夹中
vi /etc/yum.repos.d/yum-local.repo
[yum-local]
name=localtest
baseurl=file:///yum-local/
enable=1
gpgcheck=0
yum clean all
#4,然后将这个目录用NFS,http或者ftp发布,其他linux主机就可以使用此yum源资源了。