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.www58058.com/38808

(0)
因為有你因為有你
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • linux軟件包管理(開始上正菜了)

    linux程序包管理:     API:數據接口     ABI:應用程序二進制接口        庫級別的虛擬化:             linux:wine    …

    Linux干貨 2017-03-07
  •         linux 文件顏色的含義:         藍色代表目錄         綠色代表可執行文件 &nbs…

    Linux干貨 2016-12-05
  • 自制Linux系統實驗

    1、添加一塊新硬盤、并使系統識別 [root@centos6 ~]# echo "- – -" > /sys/class/scsi_host/host0/scan  [root@centos6 ~]# echo "…

    Linux干貨 2016-09-19
  • CentOS、RHEL及Linux的關系

    什么是Linux?    Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。Linux存在著…

    Linux干貨 2016-01-14
  • 正則表達式之一grep

    grep :文本過濾( 模式:pattern) 工具 包括:grep, egrep, fgrep (不 支持正則表達式 搜索) 用法格式: grep [OPTIONS] PATTERN [FILE…]            &n…

    2017-02-27
  • Bash的基礎特性之命令執行狀態返回值和命令行展開

    Bash的基礎特性之命令的執行狀態 Linux的命令執行結果狀態有兩種,分別為:1、成功2、失敗bash使用特殊變量 $? 保存最近一條命令的執行狀態結果使用echo $? 命令來查看命令執行狀態返回值:0:成功1-255:失敗 示例:         [root@localho…

    Linux干貨 2016-11-04
欧美性久久久久