RPM軟件包管理

Linux應用程序的組成

安裝完一個軟件包以后,可能會向系統中復制大量的數據文件,并進行相關設置。在Linux系統中,典型的應用程序通常由以下幾部分組成。

普通的可執行程序文件一般保存在“/usr/bin”目錄中,普通用戶即可執行。

服務器程序、管理程序文件一般保存在”/usr/sbin“目錄中,只有管理員能執行。

配置文件一般保存在”/etc“目錄中,配置文件較多時會建立相應的子目錄。

日志文件一般保存在”/var/log“目錄中。

關于應用程序的參考文檔等數據一般保存在”/usr/share/doc”目錄中。

執行文件及配置文件的man手冊頁一般保存在”/usr/share/man“目錄中。

 

軟件包的封裝類型

對于各種應用程序的軟件包,在封裝時可以采用各種不同的類型,不同類型的軟件包安裝方法也各不相同。常見軟件包封裝類型如下

RPM軟件包這種軟件包的擴展名為”.rpm“,只能在使用RPM(RPM Package Manager,RPM軟件包管理器)機制的Linux操作系統中安裝,如RHEL 5、Fedora 9、Suse 10等。RPM軟件包一般針對特定版本的系統量身定制,因此依懶性較強安裝RPM包需要使用Linux系統中的rpm命令。

DEB軟件包:這種軟件包文件的擴展名為“.deb”,只能DPKG(Debian PackageDebian包管理器)機制的Linux操作系統中進行安裝,如Debian 8.0、Ubuntu 11.04。安裝DEB軟件包需要使用Linux系統中的dpkg命令。

源代碼軟件包這種軟件包是程序員開發完成的原始代碼,一般被制作成“.tar.gz”“.tar.bz2”格式的壓縮包文件,因多數使用tar命令打包而成,所以經常被稱為“TarBall”安裝源碼軟件包需要使用相應的編譯工具,如Linux中的C語言編譯器gcc。由于大部分Linux系統中都安裝有基本的編譯環境,因此使用源碼軟件包要更加靈活。

附帶安裝程序的軟件這種軟件包的擴展名不一,但仍以TarBall格式的居多。軟件包會提供用于安裝的可執行程序或腳本文件,如install.sh、setup等,有時候會以”.bin”格式的單個安裝文件形式出現。只需運行安裝文件就可以根據向導程序的提示完成安裝操作。

開發源代碼的自由軟件絕大多數選擇TarBall的形式發布,而RPM包、DEB包等則使用了二進制的文件格式,代碼相對比較封閉。

 

RPM概述

RPM包是各種Linux發行版本中應用最廣泛的軟件包之一。RPM包以其強大的功能和廣泛的兼容性而得到多數Linux發行版本的支持和廣大Linux使用者的擁護。

RPM軟件包管理機制最早由Red Hat公司提出,后來隨著版本的升級逐漸融入了更多的優秀特性,成為眾多Linux發行版中公認的軟件包管理標準。在其官方站點http://www.rpm.org中,可以了解到關于RPM包管理機制的詳細資料。

RPM包管理器通過建立統一的文件數據庫,對在Linux系統中安裝、卸載、升級的各種.rpm軟件包進行詳細的記錄,并能夠自動分析軟件包之間的依賴關系,保持各應用程序在一個協調、有序的整體環境中運行。

 

程序包管理器

    二進制應用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

    程序包管理器:

debian:deb文件, dpkg包管理器

redhatrpm文件, rpm包管理器

rpm Redhat Package Manager

RPM Package Manager

    功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

  1、包文件組成 (每個包獨有)

RPM包內的文件

RPM的元數據,如名稱,版本,依賴性,描述等

安裝或卸載時運行的腳本

  2、數據庫(公共)

程序包名稱及版本

依賴關系

功能說明

包安裝后生成的各文件路徑及校驗碼信息

 

程序包的來源

管理程序包的方式:

使用包管理器: rpm

使用前端工具: yum, dnf

獲取程序包的途徑:

(1) 系統發版的光盤或官方的服務器;

CentOS鏡像:

https://www.centos.org/download/

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 項目官方站點

(3) 第三方組織:

Fedora-EPEL:

Extra Packages for Enterprise Linux

Rpmforge:RHEL推薦,包很全

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net/

(4) 自己制作

v 注意:檢查其合法性: 來源合法性,程序包的完整性

 

包命名

 軟件名-軟件版本-發布次數.操作系統類型.硬件架構類型.rpm

    源代碼:name-VERSION.tar.gz|bz2|xz

VERSION: major.minor.release

    rpm包命名方式:

name-VERSION-release.arch.rpm

例: bash-4.2.46-19.el7.x86_64.rpm

VERSION: major.minor.release

release: release.OS

常見的arch:

x86i386, i486, i586, i686

x86_64x64, 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 其它子包

  包之間:可能存在依賴關系,甚至循環依賴

  解決依賴包管理工具:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zyppersuse上的rpm前端管理工具

dnfFedora 18+ rpm包管理器前端管理工具

 

庫文件

  查看二進制程序所依賴的庫文件:

同一個庫文件可能會被多個軟件包所依賴

ldd /PATH/TO/BINARY_FILE

[root@localhost ~]# ldd /bin/ls
linux-vdso.so.1 =>  (0x00007ffee85f4000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb4be74f000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007fb4be54a000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007fb4be340000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb4bdf7f000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fb4bdd1e000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fb4bdaf8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb4bd8f4000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb4be987000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007fb4bd6ef000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb4bd4d2000)
[root@localhost ld.so.conf.d]# ldd /bin/bash
linux-vdso.so.1 =>  (0x00007ffc505fe000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fcb04ad4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcb048d0000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcb0450e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcb04d11000)

 

  管理及查看本機裝載的庫文件:

ldconfig

/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

緩存文件: /etc/ld.so.cache

 

[root@localhost ld.so.conf.d]# /sbin/ldconfig -p
920 libs found in cache `/etc/ld.so.cache'
p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so
libzapojit-0.0.so.0(libc6,x86-64)=> /lib64/libzapojit-0.0.so.0
libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0
libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2
libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10
libxslt.so.1 (libc6,x86-64) => /lib64/libxslt.so.
..

 

操作系統自身的庫文件

[root@localhost ld.so.conf.d]# ls /lib64/    
alsa-lib                  libkeyutils.so.1
ao                        libkeyutils.so.1.5
audit                     libkkc
avahi                     libkkc.so.2
bluetooth                 libkkc.so.2.0.0
brltty                    libkmod.so.2
cifs-utils                libkmod.so.2.2.10
colord-plugins            libkms.so.1
...

[root@localhost ~]# cd /etc/ld.so.conf.d/
[root@localhost ld.so.conf.d]# ls
dyninst-x86_64.conf                libiscsi-x86_64.conf
kernel-3.10.0-327.el7.x86_64.conf  mariadb-x86_64.conf

以上為某些軟件自己的庫

 

[root@localhost ld.so.conf.d]# cat mariadb-x86_64.conf
/usr/lib64/mysql        #mysql相關的庫路徑
[root@localhost ld.so.conf.d]# ls /usr/lib64/mysql/
libmysqlclient.so.18  libmysqlclient.so.18.0.0

使用RPM包管理命令——RPM

rpm命令實現RPM軟件包管理的主要工具。

rpm命令的格式

使用rpm命令能夠實現幾乎所有對RPM軟件包的管理功能,執行“man rpm”命令可以獲得關于rpm命令的詳細幫助信息。rpm命令的手冊頁信息中可以看出,rpm命令具有相當復雜的命令格式,結合不同的命令選項及子選項主要可以實現以下三類功能。

查詢、驗證RPM軟件包的相關信息。

安裝、升級、卸載RPM軟件包。

維護RPM數據庫信息等綜合管理操作。

查詢RPM軟件包信息

使用rpm命令查詢功能可以檢查某個軟件包是否已經安裝,了解軟件的用途、軟件包復制到系統中的文件等各種相關信息,以便更好地管理Linux系統的應用程序。

rpm命令的查詢功能主要通過“-q”選項實現,主要針對當前系統中已經安裝的軟件;通過“-qp”選項可以針對尚未安裝的RPM包文件進行查詢。根據所需查詢的具體項目不同,還可以為這兩個選項指定相關的字選項。

不帶子選項的“-q”選項可用于查詢已知名稱的軟件包是否已經安裝,需要使用準確的軟件名作為參數(可以有多個)結合不同的子選項使用時,可以實現更具體的查詢。

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

  [select-options]

-a: 所有包

-f: 查看指定的文件由哪個程序包安裝生成

-p rpmfile:針對尚未安裝的程序包文件做查詢操作;

–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供

–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

  rpm2cpio 包文件|cpio –itv 預覽包內文件

  rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件

 

  [query-options]

–changelog:查詢rpm包的changelog

-c: 查詢程序的配置文件

-d: 查詢程序的文檔

-i: information

-l: 查看指定的程序包安裝后生成的所有文件;

–scripts:程序包自帶的腳本片斷

-R: 查詢指定的程序包所依賴的CAPABILITY;

–provides: 列出指定程序包所提供的CAPABILITY;

 

-qa:顯示當前系統中以RPM方式安裝的所有軟件列表。

qi:查看指定軟件包的名稱、版本、許可協議、用途描述等詳細信息(--info)。

ql:顯示指定的軟件包在當前系統中安裝的所有目錄、文件列表(-list)

qf:查看指定的文件或目錄是由哪個軟件包所安裝的(-file)

qc:顯示指定軟件包安裝的配置文件。

-qd:顯示指定軟件包安裝的文檔文件。

 

直接執行“rpm -q”命令,將列出當前系統中以RPM方式安裝的所有軟件包清單,每行記錄一個軟件包的名稱、版本等信息。結合管道操作和“wc -l”命令,可以統計出系統中已經安裝的RPM軟件的個數。

 

查看Linux主機所有已安裝的軟件包

[root@localhost ~]# rpm -qa | more
libsss_nss_idmap-1.13.0-40.el7.x86_64
pygobject2-2.28.6-11.el7.x86_64
seavgabios-bin-1.7.5-11.el7.noarch
libreport-centos-2.1.11-32.el7.centos.x86_64
xkeyboard-config-2.14-1.el7.noarch
jansson-2.4-6.el7.x86_64
...

統計系統中所有軟件包安裝的個數

[root@localhost ~]# rpm -qa | wc -l
1249

查看指定的軟件包是否安裝

[root@localhost ~]# rpm -qa tree
tree-1.6.0-10.el7.x86_64

查詢指定的文件由哪個軟件生成

[root@localhost bin]# rpm -qf /etc/issue
centos-release-7-2.1511.el7.centos.2.10.x86_64
[root@localhost bin]# rpm -qf /root/bin/for_num4.sh
file /root/bin/for_num4.sh is not owned by any package

 

查詢安裝完的軟件包生成了哪些文件

[root@localhost function]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

 

當軟件還沒安裝時,查看軟件包安裝后會生成哪些文件

[root@localhost ~]# rpm -qpl /media/Packages/tree-1.6.0-10.el7.x86_64.rpm     
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

 

如果并不知道準確的軟件包名稱,還可以對全部查詢結果進行過濾,使用軟件包的一部分名稱進行模糊查詢(查詢時不區分大小寫),根據查詢結果進行判斷。

[root@localhost ~]# rpm -qa | grep -i samba
samba-client-libs-4.2.3-10.el7.x86_64
samba-common-4.2.3-10.el7.noarch
samba-common-tools-4.2.3-10.el7.x86_64
samba-common-libs-4.2.3-10.el7.x86_64
samba-libs-4.2.3-10.el7.x86_64

對于系統中已經安裝的各種軟件程序,如果不知道其中某個軟件的用途,同樣可以通過rpm工具進行查詢。

查看tree軟件包的詳細信息

[root@localhost ~]# rpm -qi tree
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: Thu 18 Aug 2016 06:08:41 PM CST
Group       : Applications/File
Size        : 89505
License     : GPLv2+
...

查詢rpm包的changelog

[root@CentOS6 ~]# rpm -q --changelog bash
* Tue Dec 22 2015 Ondrej Oprala <ooprala@redhat.com> - 4.1.2-40
- Bash shouldn't ignore bash --debugger without a dbger installed
  Related: #1260568
 
* Wed Nov 25 2015 Ondrej Oprala <ooprala@redhat.com> - 4.1.2-39
- Wrong parsing inside for loop and brackets
  Resolves: #1207803
...

需要查看某個軟件包安裝的目錄和文件清單時,可以使用“-ql”選項。

[root@localhost ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

需要知道系統中的某個文件是由哪一個軟件包生成的時候,可以使用“-qf”選項。

[root@localhost ~]# which wim
/usr/bin/which: no wim in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testdir/script:)
[root@localhost ~]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-1.el7.x86_64

只看指定軟件包的配置文件

[root@CentOS6 ~]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

只看指定軟件包的文檔

[root@CentOS6 ~]# rpm -qd bash
/usr/share/doc/bash-4.1.2/COPYING
/usr/share/info/bash.info.gz
/usr/share/man/man1/..1.gz
/usr/share/man/man1/:.1.gz
/usr/share/man/man1/[.1.gz
/usr/share/man/man1/alias.1.gz
...

使用rpm命令只能查詢通過RPM方式安裝的軟件包信息,對通過其他途徑安裝(例如源碼編譯、手動復制等方式)系統中的軟件包,rpm命令將無法獲取相關信息。

 

查詢RPM包文件中的相關信息

使用“-qp”選項時,必須以RPM包文件的路徑作為參數(可以有多個),而不是軟件包名稱。其相關的子選項于使用“-q”查詢時類型,常用的兩個查詢選項如下所述。

-qpi查看指定軟件包的名稱、版本、許可協議、用途描述等詳細信息

qpl查看該軟件準備要安裝的所有目標目錄、文件列表。

已知光盤目錄中有一個RPM安裝包文件ethtool-6-4.el5.i386.rpm,若要在安裝之前了解該軟件的用途,可以執行以下操作。

[root@localhost ~]# rpm -qpi /media/Packages/ethtool-3.15-2.el7.x86_64.rpm
Name        : ethtool
Epoch       : 2
Version     : 3.15
Release     : 2.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/System
Size        : 313775
License     : GPLv2
Signature   : RSA/SHA256, Sat 14 Mar 2015 03:46:39 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : ethtool-3.15-2.el7.src.rpm
...

 

希望進一步了解該軟件包中包含哪些文件(安裝后將復制到系統中)可以執行以下操作。

[root@localhost ~]# rpm -qpl /media/Packages/ethtool-3.15-2.el7.x86_64.rpm
/usr/sbin/ethtool
/usr/share/doc/ethtool-3.15
/usr/share/doc/ethtool-3.15/AUTHORS
/usr/share/doc/ethtool-3.15/COPYING
/usr/share/doc/ethtool-3.15/ChangeLog
/usr/share/doc/ethtool-3.15/LICENSE
/usr/share/doc/ethtool-3.15/NEWS
/usr/share/doc/ethtool-3.15/README
/usr/share/man/man8/ethtool.8.gz

[root@CentOS6 ~]# rpm -q -scripts bash
postinstall scriptlet (using <lua>):      #安裝前腳本
...
postuninstall scriptlet (using /bin/sh):     #卸載后腳本
...

RPM軟件包安裝

日常系統管理工作中,安裝、升級及卸載軟件包是管理應用程序最基本的工作內容。

使用rpm命令安裝軟件包時,需要指定完整的包文件名作為參數(可以有多個);而卸載軟件包時,只需要指定軟件包名稱即可。若要一次安裝多個RPM軟件包,可以使用通配符”*“,這種方式在安裝存在相互依賴關系的多個軟件包上特別有用,系統將會自動檢查依賴性并決定安裝順序,而無需管理員去判斷應該先裝哪一個包。

rpm {-i|–install} [install-options] PACKAGE_FILE…

 

-i,install當前系統中安裝一個新的RPM軟件包

-v,verbose:顯示軟件安裝過程中的詳細信息

-vv顯示比-v更加詳細信息

-h在安裝或升級軟件包的過程中,以#號顯示進度狀態

–test測試安裝,但不真正執行安裝,dry run模式

–nodeps:忽略依賴關系

–replacepkgs| replacefiles  (覆蓋包)當安裝的rpm文件被破壞時,會用到,相當于重新安裝一遍

–replacefiles (覆蓋文件)

–nosignature: 不檢查來源合法性

–nodigest:不檢查包完整性

–noscipts:不執行程序包腳本片斷

%pre: 安裝前腳本;    –nopre

%post: 安裝后腳本;   –nopost

%preun: 卸載前腳本;  –nopreun

%postun: 卸載后腳本; –nopostun

 

RPM軟件包升級、卸載

在安裝一個新的軟件包時,通常使用”-ivh“的組合選項,這樣便于了解軟件安裝的過程信息,及時跟蹤安裝進度。如果是使用新版本的軟件包替換舊的版本,則只需將”-i”換成“-U”即可。

  rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

v rpm {-F|–freshen} [install-options] PACKAGE_FILE…

-e:卸載指定名稱的軟件包

-U,upgrade:檢查并升級系統中的某個軟件包,若該軟件包原來并未安裝,則等同于“-i”選項

-Ffreshen:檢查并更新系統中的某個軟件包,若該軟件包原來并未安裝,則放棄安裝。還有幾個相關的命令選項,可以用于輔助安裝、卸載軟件包的過程

–force:強制安裝某個軟件包,當需要替換已安裝的軟件包及文件,或者安裝一個比當前使用的軟件版本更舊的軟件時,可以使用此選項。

–nodeps:在安裝或升級、卸載一個軟件包時,不檢查與其他軟件包的依賴關系。

–oldpackage:降級 

 

升級注意項

(1) 不要對內核做升級操作; Linux支持多內核版本并存,因此,對直接安裝新版本內核

(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

 

卸載一個軟件包時,主要使用“-e”選項。

需要安裝、卸載一個與其他程序存在依賴關系的軟件包時,系統將提示存在依賴關系而放棄執行。這是可以結合“–nodeps”選項忽略依賴關系,而強行安裝或卸載指定的軟件包。忽略依賴關系可能會導致軟件功能異?;蚴?,因此只在學習或者調試程序時使用,生產環境中應避免使用。

[root@localhost ~]# rpm -qa tree
tree-1.6.0-10.el7.x86_64
[root@localhost ~]# rpm -e tree
[root@localhost ~]# rpm -q tree
package tree is not installed

軟件包效驗

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

包來源合法性驗正及完整性驗正:

完整性驗正: SHA256

來源合法性驗正: RSA

  公鑰加密:

對稱加密:加密、解密使用同一密鑰;

非對稱加密:密鑰是成對兒的

public key: 公鑰,公開所有人

secret key: 私鑰, 不能公開

  導入所需要公鑰:

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*

 

修改軟件包生成文件后進行效驗

[root@CentOS6 ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 ~]# ll /usr/share/doc/tree-1.5.3/README
-rw-r--r--. 1 root root 4167 Oct 20  2009 /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# chown cyh /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# ll /usr/share/doc/tree-1.5.3/README
-rw-r--r--. 1 cyh root 4167 Oct 20  2009 /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# rpm -V tree
.....U...  d /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# echo >> /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# ll /usr/share/doc/tree-1.5.3/README
-rw-r--r--. 1 cyh root 4168 Aug 21 09:43 /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# rpm -V tree
S.5..U.T.  d /usr/share/doc/tree-1.5.3/README

恢復文件再次效驗軟件包

[root@CentOS6 ~]# sed -i '$d' /usr/share/doc/tree-1.5.3/README
[root@CentOS6 ~]# rpm -V tree
.....U.T.  d /usr/share/doc/tree-1.5.3/README

 

效驗Linux系統上所有安裝的軟件包

[root@CentOS6 ~]# rpm -Va
S.5....T.  c /etc/updatedb.conf
S.5....T.  c /root/.bash_profile
S.5....T.  c /root/.bashrc
.......T.  c /etc/inittab
...

 

RPM數據庫

    數據庫重建:

/var/lib/rpm

    rpm {–initdb|–rebuilddb}

initdb: 初始化

如果事先不存在數據庫,則新建之

否則,不執行任何操作

rebuilddb:重建

無論當前存在與否,直接重新創建數據庫

 

重建RPM數據庫

用于記錄在Linux系統中安裝、卸載、升級應用程序的相關信息,由RPM包管理系統自動完成維護,一般不需要用戶干預。當RPM數據庫發生損壞(誤刪文件、非法關機、病毒破壞等導致),且Linux系統無法自動完成修復時。將導致無法使用rpm命令正常地安裝、卸載及查詢軟件包。這時可以使用rpm命令的“–rebuiddb”或“–initdb”功能對RPM數據庫進行重建。

rebuilddb重建后,后安裝的軟件包及文件查詢不到,建議使用initdb

 

[root@localhost ~]# rpm –rebuilddb

[root@localhost ~]# rpm –initdb

 

導入驗證公鑰

在Linux/UNIX應用領域,相當一部分軟件廠商會對發布的軟件包進行數字簽名,以確保軟件的完整性、合法性。對于用戶來說,可以利用軟件官方提供的公鑰文件,自動對下載的軟件包進行驗證,如果在安裝軟件時出現驗證失敗的提示,則表示該軟件包可能已經被非法篡改。

向RPM數據庫中導入公鑰文件時,需要用到“–import”選項。例如,執行以下操作可以把光盤目錄中的RPM-GPG-KEY-redhat-release公鑰文件導入到RPM數據庫中。

導入所需要公鑰

[root@CentOS6 ~]# mount /dev/cdrom /media/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@CentOS6 ~]# cp /media/Packages/tree-1.5.3-3.el6.x86_64.rpm .
[root@CentOS6 ~]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
warning: tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...               ################################### [100%]
        package tree-1.5.3-3.el6.x86_64 is already installed
[root@CentOS6 ~]# rpm -K tree-1.5.3-3.el6.x86_64.rpm
tree-1.5.3-3.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#c105b9de)
[root@CentOS6 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6  #導入公鑰文件
[root@CentOS6 ~]# echo >> tree-1.5.3-3.el6.x86_64.rpm                
[root@CentOS6 ~]# rpm -K tree-1.5.3-3.el6.x86_64.rpm
tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (MD5) PGP MD5 NOT OK
[root@CentOS6 ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
 
mQINBE4P06MBEACqn48FZgYkG2QrtUAVDV58H6LpDYEcTcv4CIFSkgs6dJ9TavCW
NyPBZRpM2R+Rg5eVqlborp7TmktBP/sSsxc8eJ+3P2aQWSWc5ol74Y0OznJUCrBr
bIdypJllsD9Fe+h7gLBXTh3vdBEWr2lR+xA+Oou8UlO2gFbVFQqMafUgU1s0vqaE
...
 
[root@CentOS6 ~]# rpm -qa gpg-pubkey*
gpg-pubkey-c105b9de-4e0fd3a3
[root@CentOS6 ~]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
Name        : gpg-pubkey                   Relocations: (not relocatable)
Version     : c105b9de                          Vendor: (none)
Release     : 4e0fd3a3                      Build Date: Sun 21 Aug 2016 09:54:42 AM CST
Install Date: Sun 21 Aug 2016 09:54:42 AM CST      Build Host: localhost
Group       : Public Keys                   Source RPM: (none)
Size        : 0                                License: pubkey
Signature   : (none)
Summary     : gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.8.0 (NSS-3)
 
mQINBE4P06MBEACqn48FZgYkG2QrtUAVDV58H6LpDYEcTcv4CIFSkgs6dJ9TavCW
NyPBZRpM2R+Rg5eVqlborp7TmktBP/sSsxc8eJ+3P2aQWSWc5ol74Y0OznJUCrBr
bIdypJllsD9Fe+h7gLBXTh3vdBEWr2lR+xA+Oou8UlO2gFbVFQqMafUgU1s0vqaE
...
 
 
[root@CentOS6 ~]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3
[root@CentOS6 ~]# rpm -q gpg-pubkey*
package gpg-pubkey* is not installed
[root@CentOS6 ~]# rpm -K /media/Packages/tree-1.5.3-3.el6.x86_64.rpm
/media/Packages/tree-1.5.3-3.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#c105b9de)
 
[root@CentOS6 ~]# cd /var/lib/rpm/
[root@CentOS6 rpm]# ll
total 74856
-rw-r--r--. 1 root root  5521408 Jul 25 17:18 Basenames
-rw-r--r--. 1 root root    12288 Jul 19 18:19 Conflictname
-rw-r--r--. 1 root root    73728 Aug 21 10:05 __db.001
-rw-r--r--. 1 root root   229376 Aug 21 10:05 __db.002
-rw-r--r--. 1 root root  1318912 Aug 21 10:05 __db.003
-rw-r--r--. 1 root root   753664 Aug 21 10:05 __db.004
-rw-r--r--. 1 root root  1351680 Jul 25 17:18 Dirnames
-rw-r--r--. 1 root root 10518528 Jul 25 17:18 Filedigests
...
[root@CentOS6 rpm]# rpm -e tree
[root@CentOS6 rpm]# ll
total 74848
-rw-r--r--. 1 root root  5521408 Aug 21 10:07 Basenames
-rw-r--r--. 1 root root    12288 Jul 19 18:19 Conflictname
-rw-r--r--. 1 root root    73728 Aug 21 10:07 __db.001
-rw-r--r--. 1 root root   229376 Aug 21 10:07 __db.002
-rw-r--r--. 1 root root  1318912 Aug 21 10:07 __db.003
-rw-r--r--. 1 root root   753664 Aug 21 10:07 __db.004
-rw-r--r--. 1 root root  1351680 Aug 21 10:07 Dirnames
-rw-r--r--. 1 root root 10518528 Aug 21 10:07 Filedigests
...

當執行安裝或升級rpm軟件包,rpm數據庫文件時間也會發生變化

 

備份rpm數據庫文件

[root@CentOS6 rpm]# \cp 
 -a 
/var/lib/rpm/* /root/rpmdatedb/

 


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

(0)
cyh5217cyh5217
上一篇 2016-08-21 19:09
下一篇 2016-08-21 20:06

相關推薦

  • 馬哥教育網絡班21期+第五周課程練習

    1. 顯示/boot/grub/grub.conf中至少以一個空白字符開頭的行 [root@hadoop ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf 2. 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面至少一個空白字符,而后又有至少…

    Linux干貨 2016-08-05
  • Vsftpd+MySQL實現虛擬用戶驗證登錄

    一、安裝所需要包和包組: 在數據庫服務器上安裝包: yum –y install mariadb-server mariadb-devel systemctl start mariadb.service systemctl enable mariadb 在FTP服務器上安裝包pam_mysql centos7:無對應rpm包,需…

    Linux干貨 2017-08-14
  • 內核編譯

    下載內核并解壓:tar -xvf linux-4.14.9.tar.xz -C ./linux/     接下來是 ? ?make ? config ?。 (具體參照 ? ?《make ? config ?的幾種類型》) 一般采用??# ?make ? menuconfig?? 的方式 是這個樣子的: 此處有可能需要幾個包,選擇最簡單的y…

    2018-01-01
  • 網絡與進程管理相關命令使用

    網絡管理之netstat命令 netstat     -print network connections,routing tables,interface statistics,masquerade connections and multicast memberships     netstat…

    Linux干貨 2016-09-07
  • 馬哥教育網絡班第22期+第14周作業

    week14: 系統的INPUT和OUTPUT默認策略為DROP; 1、限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒; web服務器包含了admin字符串的頁面不允許訪問;web服務器僅允許響應報文離開本機; 2、在工作時間,即周一到周五的8:30-18:00,開放本機的ftp服務給172.16.0.0網絡中的主機訪問; 數據…

    Linux干貨 2016-12-12
  • vim編輯器

    vim編輯器: 文本編輯器:文本,純文本,ASCII text;Unicode; 文本編輯種類:                 行編輯器:sed                全屏編輯器:…

    2017-04-17
欧美性久久久久