rpm軟件管理工具詳解

  • 1 Linux軟件安裝概述

    • 安裝程序的方式:

    • 軟件包概述

    • RPM

    • RPM的缺點

    • RPM包

    • RPM分包

    • RPM命令的使用

  • rpm 包管理

    • 升級注意項

    • 如何安裝rpm軟件包

    • 如何卸載rpm軟件包

    • 如何升級rpm軟件包

    • 如何查詢rpm軟件包

    • 如何查看與rpm包相關的文件和其他信息

    • 如何校驗rpm包

    • RPM的數據庫

1 Linux軟件安裝概述

安裝程序的方式:

通用二進制格式:直接解壓壓縮文件,就可以使用。但一定要注意安裝平臺。 
軟件包管理器:如RPM。 
軟件包管理器的前端工具:如YUM。 
源代碼編譯。

軟件包概述

軟件包的組成部分:

二進制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目錄中。 
庫文件,位于 /lib, /usr/lib, /usr/local/lib 等目錄中。Linux中庫文件以 .so(動態鏈接庫)或 .a(靜態鏈接庫)作為文件后綴名。 
配置文件,位于 /etc 目錄中。 
幫助文件:手冊, README, INSTALL (/usr/share/doc/)


在沒有軟件包管理器之前,安裝程序,卸載程序是非常繁雜的。

軟件包管理工具的特性:

文件清單
文件放置路徑
提供的功能說明
依賴關系

軟件包管理器內部有一個數據庫,其中記載著程序的基本信息,校驗信息,程序路徑信息等。

RPM

RPM早期被稱為RedHat Package Manager,但由于目前RPM非常流行,且已經成為Linux工業標準。所以RPM現在又被稱為RPM is Package Manager。 
RPM管理支持事務機制。增強了程序安裝卸載的管理。 
RPM的功能:打包、安裝、查詢、升級、卸載、校驗、數據庫管理。

RPM的缺點

由于Linux中的程序大多是小程序。程序與程序之間存在非常復雜的依賴關系。RPM無法解決軟件包的依賴關系。

RPM包

用RPM工具可以將二進制程序進行打包,包被稱為RPM包。RPM包并不是跨平臺的。RedHat的RPM包與SUSE的RPM包不能混用。實際上RedHat的安裝,初始軟件也都是使用RPM包進行安裝的。

源程序的命名規范:name-version.tar.{gz|bz2|xz}

版本號:major.minor.release 
例:bash-4.3.1.tar.xz

RPM包的命名規范:name-version-release.os.arch.rpm

name:程序名稱。 
version:程序版本號。 
release(發行號):用于標識RPM包本身的發行號,與源程序的release號無關。 
os:即說明RPM包支持的操作系統版本。如el6(即rhel6)、centos6、el5、suse11。 
arch:主機平臺。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依賴平臺) 
例:bash-4.3.2-5.el6.x86_64.rpm

RPM分包

在把二進制文件打包時,將主要功能打入主包。將輔助功能打入分包。分包在需要的情況下安裝,若不需要就可以不安裝。

Application-VERSION-ARCH.rpm        //主包
Application-devel-VERSION-ARCH.rpm  //開發子包
Application-utils-VERSION-ARHC.rpm  //其它子包
Application-libs-VERSION-ARHC.rpm   //其它子包
//包之間:可能存在依賴關系,甚至循環依賴

獲取需要的RPM包

互聯網中RPM常用站點: 
http://mirrors.sohu.com 
http://rpmfind.net 
http://rpm.pbone.net/

RPM命令的使用

RPM常用選項:

-i:表示安裝。
-v, -vv, -vvv:表示詳細信息。
-h:以"#"號顯示安裝進度。
-q:查詢指定包名。
-e:卸載指定包名。
-U:升級軟件,若未軟件尚未安裝,則安裝軟件。
-F:升級軟件。
-V:對RPM包進行驗證。
--nodeps:忽略依賴關系。
--query:查詢指定包名。同-q選項。
--hash:同-h。
--install:表示安裝,同-i選項。
--test:僅作測試,不真正執行,可用于測試安裝,測試卸載。
--replacepkgs:重新安裝。替換原有的安裝。
--force:忽略軟件包及文件的沖突。
--initdb:新建RPM的數據庫。
--rebuilddb:重建RPM的數據庫。
--percent:以百分比的形式輸出安裝的進度。

RPM包的查詢:

rpm -q:查詢某一個RPM包是否已安裝
rpm -qi:查詢某一個RPM包的詳細信息
rpm -ql:列出某RPM包中所包含的文件。
rpm -qf:查詢某文件是哪個RPM包生成的。
rpm -qa:列出當前系統所有已安裝的包

安裝或卸載時,可能出現如下類似警告信息:warning:/etc/sysconfig/named created as /etc/sysconfig/named.rpmnew 
該警告信息表示:rpm的配置文件被另存為了一份文件。

rpm 包管理

rpm命令是RPM軟件包的管理工具。rpm原本是Red Hat Linux發行版專門用來管理Linux各項套件的程序,由于它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸受到其他發行版的采用。RPM套件管理方式的出現,讓Linux易于安裝,升級,間接提升了Linux的適用度。

**CentOS 系統上使用rpm 命令管理程序包: 
安裝、卸載、升級、查詢、校驗、數據庫維護**

如何安裝rpm軟件包

rpm軟件包的安裝可以使用程序rpm來完成。執行下面的命令:

[root@localhost ~]# rpm -vih /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

其中lrzsz-0.12.20-27.1.el6.x86_64.rpm是你要安裝的rpm包的文件名,一般置于當前目錄下。 
安裝過程中可能出現下面的警告或者提示:

... conflict with ... 

可能是要安裝的包里有一些文件可能會覆蓋現有的文件,缺省時這樣的情況下是無法正確安裝的可以用rpm --force -i強制安裝即可

... is needed by ...
... is not installed ...

此包需要的一些軟件你沒有安裝可以用rpm --nodeps -i來忽略此信息,也就是說rpm -i --force --nodeps可以忽略所有依賴關系和文件問題,什么包都能安裝上,但這種強制安裝的軟件包不能保證完全發揮功能。 
--test: 測試安裝,但不真正執行安裝;dry run

[root@localhost ~]# rpm -vih /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm --test
warning: /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]

如何卸載rpm軟件包

使用命令rpm -e包名,包名可以包含版本號等信息,但是不可以有后綴.rpm,比如卸載軟件包lrzsz-0.12.20,可以使用下列格式:

[root@localhost ~]# rpm -e lrzsz-0.12.20
[root@localhost ~]# rpm -e lrzsz

有時會出現一些錯誤或者警告:

... is needed by ...

這說明這個軟件被其他軟件需要,不能隨便卸載,可以用rpm -e --nodeps強制卸載

如何升級rpm軟件包

升級:

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

upgrade :安裝有舊版程序包,則“升級” 
如果不存在舊版程序包,則“安裝” 
freshen :安裝有舊版程序包,則“升級” 
如果不存在舊版程序包,則不執行升級操作

rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...

--oldpackage :降級 
--force: 強行升級

升級注意項

注意: 
(1) 不要對內核做升級操作;Linux 支持多內核版本并存,因此,對直接安裝新版本內核 
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew) 后保留

如何查詢rpm軟件包

不安裝但是獲取rpm包中的文件

[root@localhost ~]# rpm2cpio /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm |cpio -vi
[root@localhost ~]# rpm2cpio /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm |cpio -vidm

如何查看與rpm包相關的文件和其他信息

-a: 所有包 
-f: 查看指定的文件由哪個程序包安裝生成 
-p rpmfile :針對尚未安裝的程序包文件做查詢操作; 
--whatprovides CAPABILITY :查詢指定的 CAPABILITY由哪個包所提供 
--whatrequires CAPABILITY :查詢指定的 CAPABILITY 被哪個包所依賴 
下面所有的例子都假設使用軟件包mysql-5.1.73

1、我的系統中安裝了那些rpm軟件包。

rpm -qa 講列出所有安裝過的包

如果要查找所有安裝過的包含某個字符串mysql的軟件包

[root@localhost ~]# rpm -qa | grep "mysql"
mysql-5.1.73-7.el6.x86_64
mysql-libs-5.1.73-7.el6.x86_64

2、如何獲得某個軟件包的文件全名。

[root@localhost ~]# rpm -q mysql
mysql-5.1.73-7.el6.x86_64

可以獲得系統中安裝的mysql軟件包全名,從中可以獲得當前軟件包的版本等信息。這個例子中可以得到信息mysql-3.23.54a-11

3、一個rpm包中的文件安裝到那里去了?

[root@localhost ~]# rpm -ql mysql-5.1.73-7.el6.x86_64

注意這里的是不包括.rpm后綴的軟件包的名稱,也就是說只能用mysql或者mysql-3.23.54a11而不是mysql-3.23.54a-11.rpm。如果只是想知道可執行程序放到那里去了,也可以which,

[root@localhost ~]# which mysql
/usr/bin/mysql

4、一個rpm包中包含那些文件。

一個沒有安裝過的軟件包,使用rpm -qlp **.rpm 
一個已經安裝過的軟件包,還可以使用rpm -ql **.rpm

[root@localhost ~]# rpm -qlp /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm

5、如何獲取關于一個軟件包的版本,用途等相關信息?

一個沒有安裝過的軟件包,使用rpm -qip **.rpm 
一個已經安裝過的軟件包,還可以使用rpm -qi **.rpm

[root@localhost ~]# rpm -qip /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm 
warning: /mnt/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.15                            Vendor: CentOS
Release     : 53.el6.centos                 Build Date: Thu 12 May 2016 03:29:17 AM CST
Install Date: (not installed)               Build Host: worker1.bsys.centos.org
Group       : System Environment/Daemons    Source RPM: httpd-2.2.15-53.el6.centos.src.rpm
Size        : 3133738                          License: ASL 2.0
Signature   : RSA/SHA1, Thu 12 May 2016 06:52:29 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

6、某個程序是哪個軟件包安裝的,或者哪個軟件包包含這個程序。

rpm -qf  `which 程序名` #返回軟件包的全名 
rpm -qif `which 程序名` #返回軟件包的有關信息
rpm -qlf `which 程序名` #返回軟件包的文件列表

注意,這里不是引號,而是`,就是鍵盤左上角的那個鍵。也可以使用rpm -qilf,同時輸出軟件包信息和文件列表。

7、某個文件是哪個軟件包安裝的,或者哪個軟件包包含這個文件。 注意,前一個問題中的方法,只適用與可執行的程序,而下面的方法,不僅可以用于可執行程序,也可以用于普通的任何文件。前提是知道這個文件名。首先獲得這個程序的完整路徑,可以用whereis或者which,然后使用rpm -qf例如:

[root@localhost ~]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-43.el6.x86_64

如何校驗rpm包

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

完整性驗正:SHA256 
來源合法性驗正:RSA


公鑰加密:

對稱加密:加密、解密使用同一密鑰; 
非對稱加密:密鑰是成對兒的 
public key: 公鑰,公開所有人 
secret key: 私鑰,

//導入所需要公鑰
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@localhost ~]# rpm -vih /mnt/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:vsftpd                 ########################################### [100%]

命令格式:rpm -V 包名

對已經安裝的軟件,進行將要。若無輸出,則表示已安裝的軟件沒有被修改。若軟件被修改,則會輸出信關信息。具體請查看RPM相關手冊。

RPM的數據庫

數據庫文件位于:/var/lib/rpm

[root@localhost ~]# cd /var/lib/rpm/
[root@localhost rpm]# ls
Basenames     __db.002  Dirnames     Installtid    Packages        Pubkeys         Sha1header
Conflictname  __db.003  Filedigests  Name          Providename     Requirename     Sigmd5
__db.001      __db.004  Group        Obsoletename  Provideversion  Requireversion  Triggername
//若庫損壞,很多RPM的查詢將無法使用。

對損壞的數據庫,可以進行數據庫重建:

rpm --initdb    #新建數據庫
rpm --rebuilddb  #重建數據庫

注意:重建數據庫時間會比較長。

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

(0)
M20_heM20_he
上一篇 2016-09-06 08:50
下一篇 2016-09-06 08:50

相關推薦

  • shell編程作業

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 [root@localhost sh.log]# cat systeminfo.sh  #!/bin/bash #author:DYW #顯示當前主機系統…

    Linux干貨 2016-08-15
  • 編譯Bind和壓力測試

    編譯安裝bind ·下載bind:     isc.org:          bind-9.8          bind-9.9   &…

    Linux干貨 2016-09-25
  • Linux基礎知識(五)

    本文主要講述使用grep做模式匹配,具體示例包括: 1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; 3、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行; 4、添加用戶b…

    Linux干貨 2016-10-23
  • 第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;   (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdis…

    Linux干貨 2017-07-04
  • 第一周博客作業

    1、描述計算機的組成及其功能。
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述。
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述。
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的。
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    Linux干貨 2018-03-13
  • 搭建緩存功能的WEB服務集群

    搭建緩存功能的WEB服務集群 實驗簡介 本文主要介紹雙主模型的nginx proxy高可用集群的搭建方式。實驗環境: 使用nfs服務器提供頁面數據共享 使用單獨的mariadb服務器提供關系型數據庫 使用兩臺httpd服務器處理動態的php和靜態頁面資源 使用兩臺nginx服務器處理圖片資源 使用兩臺varnish服務器作緩存處理 使用兩臺nginx作代理 …

    Linux干貨 2017-07-15
欧美性久久久久