rpm命令詳解

系統版本:

[root@centos71d1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 
[root@centos71d1 ~]# uname -r
3.10.0-229.el7.x86_64

 
rpm命令用於在Linux系統中查詢、安裝、升級、卸載、校驗程序包,以及維護rpm數據庫。

 

基本命令


語法:

rpm OPTIONS PACKAGE_FILE

OPTIONS:

  • 查詢-q, --query
  • 安裝-i, --install
  • 升級-U, --update, -F, --freshen
  • 卸載-e, --erase
  • 校驗-V, --verify
  • 數據庫維護: --builddb, --initdb

 

查詢


語法:

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

 
[select-options]

  • PACKAGE_NAME: 查詢指定的程序包是否已經安裝,及其版本
  • -a, --all: 查詢所有已經安裝過的包
  • -f FILE: 查詢指定的文件由哪個程序包安裝生成
  • -p, --package PACKAGE_FILE: 用於實現對未安裝的程序包執行查詢操作
  • --whatprovides CAPABILITY(能力): 查詢指定的CAPABILITY由哪個程序包提供
  • --whatrequires CAPABILITY: 查詢指定的CAPABILITY被哪個包所依賴

[query-options]

  • --changelog: 查詢rpm包的changlog
  • -l, --list: 程序包安裝生成的所有文件列表
  • -i, --info: 程序包相關的信息,例如版本號、大小、所屬的包組等
  • -c, --configfiles: 查詢指定的程序包提供的配置文件
  • -d, --docfiles: 查詢指定的程序包提供的文檔
  • --provides: 列出指定的程序包提供的所有的CAPABILITY
  • -R, --requires: 查詢指定的程序包的依賴關係
  • --scripts: 查看程序包自帶的腳本片斷

 
示例:

[root@centos71d1 ~]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

[root@centos71d1 ~]# rpm -q zsh
zsh-5.0.2-28.el7.x86_64
#查詢是否已經安裝了zsh這個程序包,如果已經安裝,則顯示程序名和版本

[root@centos71d1 ~]# rpm -qa
#查詢系統中已安裝的所有的程序包

[root@centos71d1 ~]# rpm -qa | grep "^z"
zlib-1.2.7-13.el7.x86_64
zip-3.0-11.el7.x86_64
zsh-5.0.2-28.el7.x86_64
#查詢系統中已安裝的以“z”開頭的程序包

[root@centos71d1 ~]# rpm -qf /etc/fstab 
setup-2.8.71-5.el7.noarch
#查詢文件的來源

[root@centos71d1 ~]# rpm -q --changelog bash | less
#查詢bash的程序包(rpm包)的changelog

[root@centos71d1 ~]# rpm -ql bash
#查詢bash程序包安裝生成的文件列表

[root@centos71d1 ~]# rpm -qi bash
#查詢bash這個程序包的詳細信息

[root@centos71d1 ~]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
#查詢bash程序包提供了哪些配置文件

[root@centos71d1 ~]# rpm -qd bash
#查詢bash程序包提供了哪些文檔

[root@centos71d1 ~]# rpm -q --provides bash
/bin/bash
/bin/sh
bash = 4.2.46-12.el7
bash(x86-64) = 4.2.46-12.el7
config(bash) = 4.2.46-12.el7
#查詢bash程序包提供了哪些capability

[root@centos71d1 ~]# rpm -q --whatprovides bash
bash-4.2.46-12.el7.x86_64
#查詢哪個程序包提供了“bash”這個capability

[root@centos71d1 ~]# rpm -q --whatrequires bash
initscripts-9.49.24-1.el7.x86_64
dracut-033-240.el7.x86_64
rsyslog-7.4.7-7.el7_0.x86_64
lvm2-2.02.115-3.el7.x86_64
bash-completion-2.1-6.el7.noarch
bash-completion-extras-2.1-11.el7.noarch
#查詢哪些程序包需要依賴bash程序包

[root@centos71d1 ~]# rpm -qR bash
#查詢bash程序包需要依賴哪些capability

[root@centos71d1 ~]# rpm -q --scripts bash
#查詢bash程序包攜帶的安裝腳本

[root@centos71d1 ~]# rpm -qpi zsh-5.0.2-28.el7.x86_64.rpm
#查詢還未安裝的zsh程序包的詳細信息

[root@centos71d1 ~]# rpm -qpl zsh-5.0.2-28.el7.x86_64.rpm
#查詢還未安裝的zsh程序包,安裝後將生成哪些文件

 

安裝


語法:

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

 
[general-options]

  • -v: verbose,詳細信息
  • -vv: 更詳細的信息

[install-options]

  • -h: hash marks,輸出進度條,每個#表示2%的進度
  • --test: 測試安裝,檢查並報告依賴關係及衝突信息等
  • --nodeps: 忽略依賴關係(不建議)
  • --replacepkgs: 重新安裝
  • --nosignature: 不檢查包簽名信息,不檢查包來源合法性
  • --nodigest: 不檢查包完整性信息

 
示例:

[root@centos71d1 ~]# mount -r /dev/cdrom /media/
#掛載centos7.1安裝光盤

[root@centos71d1 ~]# cd /media/Packages/
[root@centos71d1 Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
#安裝zsh,顯示安裝信息,hash marks輸出進度條

[root@centos71d1 Packages]# rpm -ivvh zsh-5.0.2-7.el7.x86_64.rpm
#安裝zsh,hash marks輸出進度條,顯示更詳細的安裝信息

[root@centos71d1 Packages]# rpm -q zsh
zsh-5.0.2-7.el7.x86_64
#查詢已安裝的zsh包
[root@centos71d1 Packages]# rpm -ql zsh | less
#查詢安裝zsh生成的所有文件的列表

[root@centos71d1 Packages]# rpm -e zsh
#卸載zsh

[root@centos71d1 Packages]# rpm -ivh --test php-common-5.4.16-23.el7_0.3.x86_64.rpm 
error: Failed dependencies:
libzip.so.2()(64bit) is needed by php-common-5.4.16-23.el7_0.3.x86_64
#安裝測試,測試安裝衝突或依賴關係

[root@centos71d1 Packages]# rpm -ivh --nodeps php-common-5.4.16-23.el7_0.3.x86_64.rpm
#忽略依賴關係安裝,安裝完成後,不一定可以使用

#假如修改了某工具的配置文件,無法復原,可以這樣做:
#1. 刪除該配置文件
#2. 覆蓋安裝
[root@centos71d1 Packages]# rm -f /etc/zshrc 
[root@centos71d1 Packages]# rpm -ivh --replacepkgs zsh-5.0.2-7.el7.x86_64.rpm

 

升級


語法:

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

OPTIONS:

  • -U: 升級或安裝
  • -F: 升級
     
  • --oldpackage: 降級
  • --force: 強制升級

 
注意:

  1. 不要對內核做升級操作,Linux支持多內核版本並存,可直接安裝新版本內核
  2. 如果某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供

 
示例:

[root@centos71d1 ~]# rpm -q zsh
zsh-5.0.2-7.el7.x86_64

[root@centos71d1 ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/\
zsh-5.0.2-28.el7.x86_64.rpm

[root@centos71d1 ~]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm

 

卸載


語法:

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

OPTIONS:

  • --allmatches: 卸載所有匹配指定名稱的程序包的所有版本
  • --nodeps: 忽略依賴關係
  • --test: 測試卸載,dry run模式

示例:

[root@centos71d1 ~]# rpm -e zsh
#卸載zsh;卸載只需要指定包名,而安裝,需要指定包文件

 

校驗


語法:

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

 
示例:

[root@centos71d1 ~]# rpm -ql zsh
/usr/share/zsh/5.0.2/functions/zfput
....

[root@centos71d1 ~]# file /usr/share/zsh/5.0.2/functions/zfput
/usr/share/zsh/5.0.2/functions/zfput: ASCII text

[root@centos71d1 ~]# vim /usr/share/zsh/5.0.2/functions/zfput
#往zfput文件添加任意內容

[root@centos71d1 ~]# rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/zfput
#對zsh程序包生成的所有文件執行校驗,發現zfput文件發生改變;S表示大小,5表示md5,T表示修改時間

 

來源合法性和完整性驗證

  • 製作者使用自己的私鑰加密程序包的特徵碼,得到簽名
  • 使用者使用製作者的公鑰,解密簽名,可以得到程序包的特徵碼
  • 使用者計算程序包的特徵碼,與解密後得到的特徵碼對比,如匹配,則可以確認該程序包完整,同時確認程序包來源於製作者,即程序包來源合法

獲取並導入信任的包製作者密鑰:
對於CentOS發行版:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

驗證:

  1. 安裝此組織簽名的程序時,會自動執行驗證
  2. 手動驗證: rpm -K PACKAGE_FILE

 
示例:

[root@centos71d1 ~]# rpm -e zsh
[root@centos71d1 ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7
or [root@centos71d1 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#導入centos7安裝光盤上的程序包(rpm包)製作者的公鑰,\
#可以驗證安裝光盤中提供的程序包的來源合法性和完整性;\
#通常該公鑰也隨系統的安裝保存在/etc/pki/rpm-gpg目錄中

[root@centos71d1 ~]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-28.el7                 ################################# [100%]
#導入公鑰之後,在安裝程序包時,就不會有警告提示

[root@centos71d1 ~]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm 
zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
#也可手動驗證程序包文件的來源合法性和完整性

 

數據庫維護


rpm管理器數據庫路徑: /var/lib/rpm

語法:

rpm { --initdb | --rebuilddb } [--dbpath DIRECTORY] [--root DIRECTORY]

獲取幫助:

  • CentOS 6: man rpm
  • CentOS 7: man rpmdb

選項:

  • --initdb: 初始化數據庫,當前無任何數據庫可初始化創建一個新的;反之不執行任何操作
  • --rebuilddb: 通過讀取當前系統上所有已經安裝的程序包,重新構建數據庫

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章