一,什么是rpm
rpm是redhat package manager
redhat的軟件包管理器
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,查看rpm命令所屬的包
[root@blog ~]$ whereis rpm rpm: /usr/bin/rpm /usr/lib/rpm /etc/rpm /usr/share/man/man8/rpm.8.gz [root@blog ~]$ rpm -qf /usr/bin/rpm rpm-4.14.2-11.el8_0.x86_64
三,查看rpm的版本和幫助
1,查看版本
[root@blog ~]# rpm --version RPM version 4.14.2
2,查看幫助
[root@blog ~]# rpm --help
四,rpm的用法例子之一:查詢已安裝rpm包
說明:查詢已安裝rpm包時一律使用 -q
1,查詢某個rpm包是否已安裝
#如已安裝,會顯示完整的包名稱
#如未安裝,會給出提示
[root@blog ~]# rpm -q openresty openresty-1.15.8.2-6.el8.x86_64 [root@blog ~]# rpm -q nginx package nginx is not installed
2,查詢系統中所有安裝的rpm包
# -q:query 查詢
# -a:query/verify all packages 所有包
[root@blog ~]# rpm -qa
#因為系統中的rpm包較多,建議使用管道傳遞給more或less
[root@blog ~]# rpm -qa | more
3,查詢一個文件屬於哪個rpm包?
# -q:query 查詢
#-f: Query package owning FILE,查詢哪個rpm包包含指定文件
[root@blog ~]# rpm -qf /usr/bin/rpm rpm-4.14.2-11.el8_0.x86_64
#如果查詢的文件不屬於rpm包,則會給出提示
[root@blog ~]# rpm -qf /root/echo.sh file /root/echo.sh is not owned by any package
4,列出一個rpm中包含哪些文件?
# -q:query 查詢
# -l : List files in package 列出包中的文件
[root@blog ~]# rpm -ql openresty /usr/bin/openresty ...
5,顯示一個rpm包的信息
# -q:query 查詢
#-i: Display package information 顯示包信息
[root@blog ~]# rpm -qi openresty Name : openresty Version : 1.15.8.2 Release : 6.el8 Architecture: x86_64 Install Date: Thu 05 Mar 2020 10:19:52 AM CST Group : System Environment/Daemons Size : 3562830 License : BSD Signature : RSA/SHA256, Sun 08 Sep 2019 08:12:43 AM CST, Key ID 97db7443d5edeb74 Source RPM : openresty-1.15.8.2-6.el8.src.rpm Build Date : Sun 08 Sep 2019 08:12:40 AM CST Build Host : rhel8-pkg Relocations : (not relocatable) Packager : Yichun Zhang (agentzh) <yichun@openresty.com> URL : https://openresty.org/ Summary : OpenResty, scalable web platform by extending NGINX with Lua Description : This package contains the core server for OpenResty. Built for production uses.
6,查詢rpm包的配置文件
#-c: 列出配置文件的位置
[root@blog ~]# rpm -qc openresty /usr/local/openresty/nginx/conf/fastcgi.conf ...
7,查詢rpm包的文檔
#-d: 列出man或doc的位置
[root@blog ~]# rpm -qd systemd
8,查詢指定的rpm包所依賴的軟件包及文件
# -R, --requires List capabilities on which this package depends.
[root@blog ~]# rpm -qR openresty /bin/sh /bin/sh /bin/sh openresty-openssl >= 1.1.0h-1 openresty-pcre >= 8.42-1 openresty-zlib >= 1.2.11-3 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(PayloadIsXz) <= 5.2-1 systemd
五,rpm的用法例子之二:對未安裝軟件包文件的查詢:
使用 -qp參數
#-p, --package PACKAGE_FILE Query an (uninstalled) package PACKAGE_FILE.
1,查詢未安裝軟件包的信息
#-i:顯示包信息
[root@blog source]# rpm -qpi ImageMagick-6.9.10.86-1.el8.x86_64.rpm Name : ImageMagick Epoch : 0 Version : 6.9.10.86 Release : 1.el8 Architecture: x86_64 ...
2,列出未安裝軟件包中包含的文件:
# -l: 列出包中的文件
[root@blog source]# rpm -qpl ImageMagick-6.9.10.86-1.el8.x86_64.rpm /usr/bin/animate /usr/bin/compare /usr/bin/composite /usr/bin/conjure /usr/bin/convert ...
3,查詢未安裝rpm包中包含的文檔
#-d:列出man或doc的位置
[root@blog source]# rpm -qpd ImageMagick-6.9.10.86-1.el8.x86_64.rpm /usr/share/doc/ImageMagick/AUTHORS.txt /usr/share/doc/ImageMagick/ChangeLog ...
4,查詢未安裝軟件包中包含的配置文件
#-c:列出配置文件的路徑
[root@blog source]# rpm -qpc ImageMagick-6.9.10.86-1.el8.x86_64.rpm
5,列出未安裝rpm包所依賴的軟件包及文件
#-R: requires: rpm包所需要的文件
[root@blog source]# rpm -qpR ImageMagick-6.9.10.86-1.el8.x86_64.rpm ImageMagick-libs(x86-64) = 0:6.9.10.86-1.el8 libICE.so.6()(64bit) libMagickCore-6.Q16.so.6()(64bit) ...
六,rpm的用法例子之三:安裝
1,安裝rpm包
下載安裝包
[root@blog source]# wget http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/zsh-5.5.1-6.el8.x86_64.rpm
安裝
#-i: 安裝 install
#-v: 顯示詳細信息 verbose
#-h: 顯示軟件安裝進度
[root@blog source]# rpm -ivh zsh-5.5.1-6.el8.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:zsh-5.5.1-6.el8 ################################# [100%]
2,也可以通過網絡在線安裝
[root@blog source]# rpm -ivh http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/zsh-5.5.1-6.el8.x86_64.rpm
3,只檢查依賴關系,不真正安裝
# --test : 測試
[root@blog source]# rpm -ivh --test zsh-5.5.1-6.el8.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%]
4,安裝時忽略依賴關系:
#--nodeps: 忽略依賴關系,強制安裝
[root@blog source]# rpm -ivh --nodeps zsh-5.5.1-6.el8.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:zsh-5.5.1-6.el8 ################################# [100%]
七,rpm的用法例子之四:升級
1,升級一個rpm包
#-U:升級軟件
[root@blog source]# rpm -Uvh zsh-5.5.1-6.el8_1.2.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:zsh-5.5.1-6.el8_1.2 ################################# [ 50%] Cleaning up / removing... 2:zsh-5.5.1-6.el8 ################################# [100%]
2,降級安裝到低版本的rpm包
# --oldpackage: 安裝低版本的軟件包
[root@blog source]# rpm -Uvh --oldpackage zsh-5.5.1-6.el8.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:zsh-5.5.1-6.el8 ################################# [ 50%] Cleaning up / removing... 2:zsh-5.5.1-6.el8_1.2 ################################# [100%]
八,rpm的用法例子之五:卸載
1,刪除一個rpm包
#-e :卸載軟件
[root@blog source]# rpm -e zsh
2,刪除一個rpm包時忽略依賴關系
#--nodeps: 忽略依賴關系強制卸載
[root@blog source]# rpm -e --nodeps zsh
九,rpm的用法例子之六:校驗
1,校驗rpm包的安裝
#-V 用來檢查已安裝rpm包的完整性
[root@blog source]# rpm -V zsh
說明:如果沒有輸出,表示無問題
2,已安裝rpm包的文件有被修改時的輸出:
[root@blog source]# rpm -V openresty S.5....T. c /usr/local/openresty/nginx/conf/nginx.conf
上面的這個配置文件被修改過(這里只是舉例子,屬於正常修改)
3,輸出格式的說明:
SM5DLUGT c
S:表示對應文件的大小(Size)不一致;
M:表示對於文件的mode不一致;
5:表示對應文件的MD5不一致;
D:表示文件的major和minor號不一致;
L:表示文件的符號連接內容不一致;
U:表示文件的owner不一致;
G:表示文件的group不一致;
T:表示文件的修改時間不一致;
c:只有文件是一個配置文件時才會有此標志,可以用這種方法快速定位rpm包的配置文件安裝位置。(不是說只有文件不一致情況下才會顯示嗎?沒錯,但是配置文件通常會被修改,所以通常都會被檢測出不一致)
注意:校驗功能的主要作用不是用來檢查配置文件,而是檢查rootkit,
如果我們的二進制程序被修改過,可以被這個功能檢驗出來。
對於安全的檢測非常重要
十,從rpm包中提取文件
1,創建工作目錄:
[root@blog source]# mkdir zshfile [root@blog source]# mv zsh-5.5.1-6.el8.x86_64.rpm zshfile/ [root@blog source]# cd zshfile/
2,用rpm2cpio提取rpm包中的文件
[root@blog zshfile]# rpm2cpio zsh-5.5.1-6.el8.x86_64.rpm | cpio -div [root@blog zshfile]# ls etc usr zsh-5.5.1-6.el8.x86_64.rpm
提取后的文件保存在 etc和usr 兩個目錄下面
十一,查看centos的版本
[root@blog ~]$ cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core)