RPM和YUM的使用说明

一、RPM包管理程序

centos系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

RPM包安装选项:

  –test:测试安装,但不真正执行安装

  –nodeps:忽略依赖关系

  –nosignature:不检查来源合法性

  –nodigest:不检查包完整性

  –noscripts:不执行程序包脚本片断

        %pre:安装前脚本; –nopre

        %post:安装后脚本;–nopost

        %preun:卸载前脚本; –nopreun

        %postun:卸载后脚本; –nopostun

RPM包升级选项:

  upgrade:安装有旧版程序包,则"升级"

        如果不存在旧版程序包,则"安装"

 freshen:安装有旧版程序包,则"升级"

       如果不存在旧版程序包,则不执行升级操作

 –oldpackage:降级

 –force:强行升级

RPM包查询选项:

   -q:所有包

   -f:查看指定的文件由哪个程序包安装生成

   -p rpmfile:针对尚未安装的程序包文件做查询操作

   –whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

   -whatrequires CAPABILITY:查询指定的CAPABILITY由哪个包所依赖

   –changelog:查询rpm包的changelog

   -c:查询程序的配置文件

   -d:查询程序的文档

   -l:查看指定的程序包安装后生成的所有文件;

   –scripts:程序包自带的脚本片断

   -R:查询指定的程序包所依赖的CAPABILITY

   –provides:列出指定程序包所提供的CAPABILITY

RPM包的校验

  包来源合法性验证及完整性验证:

       完整性验证:SHA256

       来源合法性验证:RSA

  公钥加密:

       对称加密:加密、解密使用同一秘钥:

       非对称加密:秘钥是成对的

  导入所需要的公钥:

       rpm -K|checksig rpmfile 检查包的完整性和签名

       rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

       CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7

  查询导入的秘钥:

       rpm -qa gpg-pubkey*

RPM数据库:

      数据库重建:

        /var/lib/rpm

rpm {–initdb|–rebuilddb}

      initdb:初始化

      如果事先不存在数据库,则新建之

      否则,不执行任何操作

      rebuilddb:重建

      无论当前存在与否,直接重建数据库  

二、YUM

前言:

   rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,如果直接使用rpm直接安装程序包也可以,但是需要自己手工解决程序包依赖性的问题,可能程序包的依赖性非常复杂,那么直接使用rpm安庄,就会非常麻烦,而使用YUM安装就会自动解决依赖性的问题。大大简化了安装过程。 

YUM客户端配置文件:

  /etc/yum.conf:为所有仓库提供公共配置

  /etc/yum.repos.d/*.repo:为仓库的指向提供配置

仓库指向的定义:

      [repositoryID]  (yum仓库的ID)

      name=some name for this repository (yum仓库的名称) 

      baseurl=url://path/to/repository/ (repodata的位置,一般指向上一级目录)

      enabled={1|0}  (1为启用,0为关闭)

      gpgcheck={1|0}  (是否检查gpgkey,1为检查0为不检查)

      gpgkey=URL     (gpgkey的路径)

YUM命令:

显示仓库列表:

yum repolist

显示程序包:

yum list

安装程序包:

yum install package

升级程序包

yum update

检查可用升级

yum check-update

卸载程序包:

yum remove package

查看程序包information

yum info [..]

查看指定的特性是由哪个程序包所提供的

yum provides

清理本地缓存:

yum clean {packages|metadata|expire-cache}

构建缓存:

yum makecache

搜索:search string1

  以指定的关键字搜索程序包名及summary信息

查看指定包所依赖的capabilities:

  deplist package1

查看yum事务历史:

  history{info|list|pakages-list|packages-info}

  summary {addon-info|redo|undo}

  rollback {new|sync|stats}

 示例:

   yum history

   yum history info 6

yum 的日志存储位置:/var/log/yum.log

yum的命令行选项:

  –nogpgcheck:禁止进行gpg check

 -y:自动回答为yes

 -q:静默模式

 –disablerepo=repoidglob:临时禁用此处指定的repo

 –enablerepo=repoidglob:临时启用此处指定的repo

 –noplugins:禁用所有插件

yum的repo配置文件中可用的变量:

   $releasever:当前OS的发行版的主版本号

   $arch:平台,i386,i486,i586,x86-64等

   $basearch:基础平台;i386

   $YUMO-$YUM9:自定义变量

示例:

  http://server/centos/$releasever/$basearch/

创建yum仓库:

  createrepo [options]

作业:

1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

2、编写脚本/root/bin/copycmd.sh

(1) 提示用户输入一个可执行命令名称;

(2) 获取此命令所依赖到的所有库文件列表

(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下;

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd

(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:

如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出

答案:

 一、编写testsrv.sh

  1 #!/bin/bash

  2 

  3 #author:李瑞

  4 #modified:

  5 #version:1.0

  6 #description:

  7 #=======================================================

  8 start () {

  9 local b=/var/lock/subsys/SCRIPT_NAME

 10 

 11 if [ -f $b ];then

 12   echo "service is running"

 13 else

 14    touch /var/lock/subsys/SCRIPT_NAME

 15    [ $? -eq 0 ]&&echo "start service successed"||echo "start service falied"

 16 fi

 17 }

 18 

 19 stop () {

 20 local b=/var/lock/subsys/SCRIPT_NAME

 21 if [ -f $b ];then

 22     rm -fr $b

 23  [ $? -eq 0 ]&&echo "stop service successed"||echo "stop service falied"

 24 else

 25   echo "service has stopped"

 26 fi

 27 }

 28 

 29 restart () {

 30   stop &>/dev/null

 31   echo "service has stopped"

 32   start &>/dev/null

 33   echo "service has restart"

 34 }

 35 

 36 status() {

 37 local b=/var/lock/subsys/SCRIPT_NAME

 38 if [ -f $b ];then

 39 echo "SCRIPT_NAME is running…"

 40 else

 41   echo "SCRIPT_NAME is stopped.."

 42 fi

 43 }

 44 

 45 read -p "请输入(start|stop|restart|status):" num

 46 case $num in

 47 start)

 48      start

 49       ;;

 50 stop)

 51      stop

 52       ;;

 53 restart)

 54      restart

 55       ;;

 56 status)

 57      status

 58      ;;

 59 esac

二、编写copycmd.sh

1 #########################################################################

  2 # File Name: copycmd.sh

  3 # Description: 

  4 # Author: 李瑞

  5 # Version 1.0.0:

  6 # Created_Time: 2016-08-20 12:26:03

  7 # Last modified: 2016-08-20 12:26:1471667163

  8 #########################################################################

  9 #!/bin/bash

 10 

 11 jiben (){

 12       local b=`which $1`

 13       local c=`ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"`

 14     cp $b /mnt/sysroot/bin/

 15     cp $c /mnt/sysroot/bin/

 16     echo "已将$1和对应的库文件复制到/mnt/sysroot目录下"

 17     echo "请再次输入一个命令"

 18 }

 19 

 20 kuozhan () {

 21         local b=`which $1`

 22         local c=`ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"`

 23        cp $b /mnt/sysroot/usr/bin

 24        cp $c /mnt/sysroot/usr/bin/

 25        echo "已将$1命令和对应的库文件复制到/mnt/sysroot/usr目录下"

 26        echo "请再次输入一个命令"

 27 }

 28 

 29 while true

 30 do

 31 

 32 read -p "请输入一个命令" cmd

 33 

 34 [ -z "$cmd" ]&&echo "请至少输入一个参数"&&continue

 35 

 36  type $cmd &>/dev/null

 37 if [ $? -eq 0 ];then

 38  ldd `which $cmd`

 39 

 40  b=`which $cmd | sed -r 's@/[^/]+$@@'`

 41  case $b in

 42 /bin)

 43       jiben $cmd

 44       ;;

 45 /usr/bin)

 46       kuozhan $cmd

 47      ;;

 48 *)

 49      echo "error comand dir"

 50 esac

 51 else

 52    [ $cmd == quit ]&&echo "程序正在退出"&&break

 53 fi

 54 done

原创文章,作者:因为有你,如若转载,请注明出处:http://www.178linux.com/38808

(0)
上一篇 2016-08-24 10:26
下一篇 2016-08-24 10:26

相关推荐

  • 集中练习5-磁盘分区、文件系统挂载、RAID管理

    集中练习5-磁盘分区、文件系统挂载、RAID管理

    Linux干货 2017-10-27
  • sed的基本用法详解

    在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。 它们是强大的文本处理工具,了解并掌握它们,可以让你对文本的处理更加从容和轻松。 今天我们主要是围绕sed来进行分析。 一、初识sed sed:Stream Editor 从名字上也可以直观的了解到它是一个流编辑工具。何为流…

    Linux干货 2015-06-08
  • raid各级别简介

    一. raid 是什么       RAID:(Redundant Array of indenpensive Disk) 独立磁盘冗余阵列: 磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存…

    Linux干货 2016-02-14
  • N23-第一周 记流水账

      机器已经设置好了  屏幕左边是linux控制台,屏幕中间放置记事本来记笔记,屏幕右边是教学视频,如图 费我老大劲 笔记本的无线网卡驱动不好弄啊   注重操作实践,全程跟着操作,一定要照着做,动手啊动手…………..前十五天内容以查漏补缺为主,所以笔记是兴之所至,遵循以下原则:&n…

    Linux干货 2016-09-18
  • 编程语言编年史

          我们都知道,编程语言是一组用来定义计算机程序的语法规则。它是一种被标准化的交流语言,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是…

    Linux干货 2017-03-30
  • 浅谈DNS基本原理以及实现方法(一)

     DNS(Domain Name System,域名系统),是目前互联网上最不可或缺的服务器之一,我们在互联网从访问一个网站,到发送一封电子邮件,再到定位域中的域控制器,无时无刻不再使用着DNS为我们提供的服务,那为什么我们会需要这样一个服务那?带着这样一个疑问让我们先来认识一下什么是DNS吧  DNS最核心的工作就是域名解析,也就是把计…

    Linux干货 2015-12-15