Linux軟件包管理器—rpm

rpm 最開始是Red Hat Package Manager 之意,原用在Red Hat Linux一款軟件包管理器,先在已被許多其他Linux 發行商使用,成為主流包管理器,rpm包的文件格式也寫進Linux標準庫中,所以rpm 現在遞歸意為RPM Package Manager。rpm的誕生使得在Linux上管理軟件包變得方便許多,rpm功能強大,可完成構建、安裝、查詢、校驗、升級和卸載軟件包。

過去,許多 Linux 程序以源代碼的形式發行,用戶把源代碼構建為所需的程序或程序集;源代碼還附帶必需的手冊頁、配置文件等等?,F在,大多數 Linux 發行商使用稱為包 的預構建的程序或程序集,包便于在發行版上安裝。

rpm 最開始是Red Hat Package Manager 之意,原用在Red Hat Linux一款軟件包管理器,先在已被許多其他Linux 發行商使用,成為主流包管理器,rpm包的文件格式也寫進Linux標準庫中,所以rpm 現在遞歸意為RPM Package Manager。rpm的誕生使得在Linux上管理軟件包變得方便許多,rpm功能強大,可完成構建、安裝、查詢、校驗、升級和卸載軟件包。

一、軟件包介紹

一個標準的rpm包里面包含包描述文件,依賴性,程序文件,文檔說明,安裝和卸載時運行的腳本。

安裝一個rpm包,編譯生成的程序文件,以及配置文件,幫助文件等將按照Linux文件層級結構標準來放置,這都是由腳本控制完成。那么我們獲取一個rpm包的來源可靠性變得十分重要,一般來講有以下幾個安全獲取路徑:

  1. Linux發行商光盤及鏡像網站

    如國內鏡像站點:http://mirrors.aliyun.com

  2. 項目官方網站

  3. EPEL源,Extra Packages for Enterprise Linux  官方網址為:https://fedoraproject.org/wiki/EPEL

  4. rpm包搜索引擎

    pkgs.org

    rpmfind.net

    rpm.pbone.net


rpm包命名格式

        name-version-release.arch.rpm

version構成:major.minor.release

release:一般指OS,如el6,el7

arch:架構

    x86:i386,i486, i586, i686

    x86_64:x64, x86_64, amd64

    powerPC:ppc

    與平臺無關:noarch

一個軟件項目通常會被拆分成主包和支包

    Application-VERSION-ARCH.rpm: 主包

     Application-devel-VERSION-ARCH.rpm 開發子包

     Application-utils-VERSION-ARHC.rpm 其它子包

     Application-libs-VERSION-ARHC.rpm 其它子包

zip-3.0-10.el7.x86_64.rpm

二、rpm數據庫

rpm包管理器的運行依賴它的數據庫,數據庫文件路徑為/var/lib/rpm。數據庫記錄了:

1、已安裝的程序包名稱和版本信息,依賴關系

2、安裝生成文件路徑

3、軟件包的校驗碼信息

一旦數據庫信息丟失了,就不能正常進行升級,查詢,卸載,校驗等操作。

數據庫操作命令

rpm --initdb        #如果不存在數據庫,則建立一個新數據庫
rpm --rebuilddb     #根據已安裝包的頭文件信息,重新構建數據庫。如果一個數據庫文件全部丟失,連已安裝的包都無法找到,該命令無作用

三、rpm命令使用說明

rpm 命令的使用必需指定一種模式,安裝,升級,卸載,查詢,校驗,以及數據庫維護等。

所有模式下的常用選項

1)–quiet

    打印少量信息,通常只顯示出錯誤信息

2)-v

    打印細節信息

3)-vv

    打印比-v更為詳細的信息

4)–dbpath

    使用指定的數據庫路徑

5)–root

    使用指定的路徑作為根路徑。通常在救援模式下使用此選項

1、合法性檢測

在執行安裝,升級等操作的時,rpm默認會檢測包來源合法性及包完整性,首先包來源合法性要先檢測通過,包的來源合法性沒有通過,其包特征碼信息無法保障真實性,再去校驗也毫無意義。

包來源合法性通過驗證數字簽名來校驗,數字簽名使用非對稱加密算法RSA加密,校驗需要導入公鑰,如果沒有公鑰,會有提示

004.png

獲取包制作者公鑰后,rpm –import /path/key 導入公鑰

Centos6,7 在/etc/pki/rpm-gpg/下已存放光盤包校驗所需的公鑰

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

導入正確公鑰后,將不會出現nokey提示

rpm -q gpg-pubkey        #查詢已導入的公鑰
rpm -qi gpg-pubkey       #查詢導入公鑰詳細信息
[root@centos7 Packages]$ rpm -q gpg-pubkey
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-b6792c39-53c4fbdd
[root@centos7 Packages]$ rpm -e gpg-pubkey-b6792c39-53c4fbdd   #刪除指定一個公鑰
[root@centos7 Packages]$ rpm -q gpg-pubkey
gpg-pubkey-f4a80eb5-53a7ff4b

2、安裝

rpm -i [install-options] PACKAGE_FILE...

常用install-options

-h    顯示進度條,hash marks形式

     常用安裝命令:rpm -ivh file

[root@centos7 Packages]$ rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.6.0-10.el7                ################################# [100%]

–replacepkgs    重新安裝

rpm -ivh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm

–nodeps       忽略依賴關系

           安裝前不檢查依賴關系,直接安裝

–nosignature    不校驗包簽名信息

–nodigest      不校驗包特征提取碼

–test        不安裝軟件,只是顯示檢查并報告潛在的問題   

3、升級

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...   #升級或安裝軟件包,如果是升級一個軟件,則會移除其他版本的文件
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...   #只對軟件包進行升級操作,如果沒有舊版本程序,則不執行

升級模式的命令和安裝模式命令的附加選項相同,再介紹幾個常用選項

–oldpackage    允許進行降級操作

rpm -ivh --oldpackage xxx.rpm

–force       強制操作,等同于–replacepkgs, –replacefiles, and –oldpackage

注意:

    1)不要對內核進行升級操作,升級會刪掉原有的內核;Linux支持多內核并存,直接安裝即可。

    2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接

      覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

4、查詢

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

先講解一下 [select-options],該選項返回的值都是rpm包名

PACKAGE_NAME    查詢已安裝的該命名的包

[root@centos7 Packages]$ rpm -q bash
bash-4.2.46-19.el7.x86_64
[root@centos7 Packages]$ rpm -q zsh
zsh-5.0.2-14.el7.x86_64

-a    查詢所有已安裝的包

[root@centos7 Packages]$ rpm -qa |grep .*sh-      #經常搭配grep使用,模糊查找包
zsh-5.0.2-14.el7.x86_64
bash-4.2.46-19.el7.x86_64
openssh-clients-6.6.1p1-22.el7.x86_64
tcsh-6.18.01-8.el7.x86_64

-f    查詢指定的文件是由哪個包生成的

[root@centos7 Packages]$ rpm -qf /bin/sh
bash-4.2.46-19.el7.x86_64

-p    查詢一個未安裝rpm包的信息,經常需要配合[query options]使用

[root@centos7 Packages]$ rpm -qp xcb-util-devel-0.4.0-2.el7.x86_64.rpm      #單獨使用返回包名
xcb-util-devel-0.4.0-2.el7.x86_64
[root@centos7 Packages]$ rpm -qpd xcb-util-devel-0.4.0-2.el7.x86_64.rpm     #配合-d 查詢文檔 
/usr/share/doc/xcb-util-devel-0.4.0/NEWS

–whatprovides CAPBILITY    查詢此能力由哪個已安裝的包提供,能力也可以是文件

[root@centos7 Packages]$ rpm -q --whatprovides tree
tree-1.6.0-10.el7.x86_64

–whatrequires CAPBILITY    查詢該能力被哪些已安裝的包所依賴

[root@centos7 Packages]$ rpm -q --whatrequires bash         
dracut-033-359.el7.x86_64
initscripts-9.49.30-1.el7.x86_64
lvm2-2.02.130-5.el7.x86_64
mariadb-5.5.44-2.el7.centos.x86_64
rsyslog-7.4.7-12.el7.x86_64
jline-1.0-8.el7.noarch
PackageKit-command-not-found-1.0.7-5.el7.centos.x86_64
kpatch-0.1.10-4.el7.noarch
bash-completion-2.1-6.el7.noarch

[query-options]

-l    查詢程序包安裝生成的列表

-i    查詢程序包內含信息

-c    只列出配置文件列表

-d    只列出文檔文件列表

–provides    查詢該包提供哪些能力

[root@centos7 Packages]$ rpm -q --provides bash
/bin/bash
/bin/sh
bash = 4.2.46-19.el7
bash(x86-64) = 4.2.46-19.el7
config(bash) = 4.2.46-19.el7

-R,–requires    查詢該包依賴哪些能力

–scripts    查看該包自帶的腳本片段

5、校驗

此模式校驗是指比較指定包已安裝的文件信息與rpm數據庫存儲的元數據對應的信息

rpm {-V|--verify} [select-options] [verify-options]
[root@centos7 Packages]$ rpm -V zsh      #手動修改過配置文件,校驗結果如下
S.5....T.  c /etc/zshrc

校驗結果九個位代表意義如下

      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

6、卸載

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

–allmatches    卸載所有匹配包名的所有版本程序

–nodesp      不檢查依賴關系,直接卸載。強制卸載的含義

[root@centos7 Packages]# rpm -evv tree
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening  db environment /var/lib/rpm cdb:0x401
D: opening  db index       /var/lib/rpm/Packages 0x400 mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Name 0x400 mode=0x0
D:  read h#    1521 Header SHA1 digest: OK (5d09d886c3b9240f03006ab41d0cdd44dce7a723)
D: added key gpg-pubkey-b6792c39-53c4fbdd to keyring
D:  read h#    1522 Header SHA1 digest: OK (489efff35e604042709daf46fb78611fe90a75aa)
...

原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/39865

(0)
cutemsyucutemsyu
上一篇 2016-08-26
下一篇 2016-08-26

相關推薦

  • Shell腳本編程3

    Shell腳本編程3  一、雜項知識整理 1、select與case select是個無限循環,因此要記住用break命令退出循環,或用exit命令終止腳本。也可以按ctrl+c退出循環,自動生成數字的選擇項,適合創建菜單。 select經常和case聯合使用。與for循環類似,可以省略in LIST,此時使用位置參量$1、$2等傳遞參數。 cas…

    Linux干貨 2016-08-19
  • ansible實踐

    本偏文章以上圖拓撲部署 首先準備了6臺為centos7的主機(確保selinux和iptables不會成阻礙!關閉他們) 我們先來安裝ansible吧! 配置EPEL源過后使用 yum -y install ansible  ?。。。。。。。。。。。。。。。。。。。。。。。。。。。。?! 出師不利啊,安裝ansible就失敗了。?。。。。?! 看了一下…

    Linux干貨 2017-01-27
  • nginx

    nginx: master/worker master:配置文件分析和加載、管理worker、平滑升級; worker:處理用戶請求; cache loader, cache manager:緩存加載和緩存管理 user Syntax: user user [group];        …

    Linux干貨 2017-06-19
  • 馬哥教育網絡班21期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@CentOS7 ~]# fdisk /dev/sdb Command (m for help): n Select…

    Linux干貨 2016-08-22
  • 如何刪除一個目錄下的所有文件,但保留一個指定文件。附一些常用命令

    解答: 假設這個目錄是/xx/,里面有file1,file2,file3..file10   十個文件 方法如下: find /date -type f ! -name “file10″|xargs rm -f 另外還有其他的方法比如:rsync命令和bush的 extglob功能等。在此不一一列舉。 附常用命令: 文件和目…

    2017-07-15
  • rpm與yum

    rpm包及yum 包查詢 rpm -q –query  搭配別的選項可用來包查詢 -a -f -p rpmfile:針對尚未安裝的程序包文件做查詢操作   -p 選項參數為文件名(一定要指定路徑) 例子: rpm -qpl /media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm…

    Linux干貨 2016-08-24
欧美性久久久久