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
下一篇 2016-08-24

相关推荐

  • 软链接与硬链接的区别

      这两牵扯到链接,那么先介绍以下链接。   在文件系统中,有一种可以把不同的文件相连接到一起的机制,这个机制叫做链接。通俗的话来说就是打开两个不同的文件夹,其实进去的是同一个。它可以把一个文件用不同的名字和路径来表示出来。系统通过inode(索引节点,文件唯一标识)来识别是否为同一个文件,无论系统上有有多少个链接,在磁盘上只有一个唯一的…

    2017-05-25
  • Python 数据结构

    python 内置数据结构python 内置数据结构数字的处理函数: round() 五舍六入       2.5  2     2.6    3 floor() 向下取整       2.5  2     2.6    2 ceil() 向上取整       2.5  3     2.6    3 min() 取最小的       1,2,3      1…

    Linux干货 2017-09-23
  • 马哥教育网络班22期+第01周课程练习

    一、描述计算机的组成及其功能:     根据冯·诺依曼体系结构,把计算机划分为五大部件:运算器、控制器、存储器、输入设备、输出设备。 运算器(加法器):cpu的核心部件,也是计算机存在的价值之一,其采用二进制方式进行计算(因为电阻的存在,使得十进制无法精准处理);控制器:控制CPU读指令[立即数和间接数],指令含有运算器需要的数…

    Linux干货 2016-08-12
  • linux基础知识

    基本命令,man自助使用手册,linux文件目录。

    Linux干货 2017-12-11
  • chrony、sudo、rsyslog

    chrony 程序环境: 配置文件:/etc/chrony.conf 主程序文件:chronyd 工具程序:chronyc unit file: chronyd.service 配置文件:chrony.conf server:指明时间服务器地址; allow NETADD/NETMASK allow all:允许所有客户端主机; deny NETADDR/N…

    Linux干货 2017-06-13
  • 推荐-使用iptables作为网络防火墙构建安全的网络环境

    使用iptables作为网络防火墙构建安全的网络环境 使用iptables作为网络防火墙构建安全的网络环境 前言 网络防火墙的优势 实验拓扑图 实验环境 实验步骤 防火墙未设置前对所有服务器的测试 针对不同服务器进行”非法”访问 定义网络防火墙规则 再次针对不同服务器进行”非法”访问 测试服务器是否可访问 总结 前言 一般情况下iptables只作为主机防火…

    Linux干货 2016-03-31