rpm軟件包安裝與管理

1、軟件包分類

一、軟件包分類
  • 源碼包
  • 二進制包
二、源碼包
2.1 源碼包什麼樣

直接由編程語言寫成,沒通過編譯。相似於java的 .calss 文件,c的 .c文件。java

[root@love2 ~]#  vim  hello.c
#include <stdio.h> int main (void) {
      printf ("hello world\n"); 
} 
 
[root@love2 ~]# gcc -c hello.c 
# - c 生成「 .o 」頭文件。這裏會生成 hello.o 頭文件,可是不會生成執行文件 
[root@love2 ~]# gcc -o hello hello.o 
# - o 生成執行文件,並制定執行文件名。這裏生成的 hello 就是可執行文件 
[root@love2 ~]# ./hello
hello world
# 執行 hello 文件
2.2 源碼包特色

源碼包的優勢:node

  • 開源,若是有足夠的能力,能夠修改源代碼
  • 能夠自由選擇所需的功能
  • 軟件是編譯安裝,因此更加適合本身的系統,更加穩定也效率更高
  • 卸載方便

源碼包有缺點:數據庫

  • 安裝過程步驟較多,尤爲安裝較大的軟件集合時(如 LAMP 環境搭建),容易出現錯誤
  • 編譯過程時間較長,安裝比二進制安裝時間長
    -由於是編譯安裝,安裝過程當中出現問題比較難以解決
三、二進制包
3.1 二進制包分類

DPKG 包:是由 Debian Linux 所開發出來的包管理機制,經過 DPKG 包,Debian Linux 就能夠進行軟件包管理。主要應用在 Debian 和 unbuntu 中。
RPM 包:是由 Red Hat 公司所開發的包管理系統。功能強大,安裝、升級、查詢和卸載 都很是簡單和方便。目前不少 Linux 都在使用這種包管理方式,包括 Fedora、CentOS、 SuSE 等。apache

3.2 特色

RPM 包的優勢:編程

  • 包管理系統簡單,只經過幾個命令就能夠實現包的安裝、升級、查詢和卸載
  • 安裝速度比源碼包安裝快的多 RPM 包的

缺點:vim

  • 通過編譯,再也不能夠看到源代碼
  • 功能選擇不如源碼包靈活
  • 依賴性。有時候複雜一點的軟件包依賴於別的軟件包才能安裝,而別的軟件包有依賴於另外的軟件包。很是麻煩。
3.3 RPM包依賴

1)樹形依賴 a---->b---->c
2)環形依賴 a---->b---->c---->a
以上兩種狀況,咱們能夠用命令一次將所須要的軟件包所有安裝,就不須要考慮依賴性問題。
3)函數庫依賴 :a軟件包依賴與另外軟件包中的函數庫或者模塊,咱們須要找到該模塊或者該函數庫對應的軟件包。可經過該網站查詢www.rpmfind.netcentos

2、rpm安裝

1.rpm包命名規則
httpd-2.2.15-15.el6.centos.1.i686.rpm 
#httpd 軟件包名 
#2.2.15 軟件版本 
#15  軟件發佈的次數 
#el6  軟件發行商。el6 是 RedHat 公司發佈,適合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 適合的硬件平臺。
RPM 包能夠在不一樣的硬件平臺安裝,選擇適合不一樣 CPU 的軟件版本,能夠最大化的發揮 CPU 性能,因此出現了所謂的 i386(386 以上計算機均可以安裝)、
i586(586 以上的計算機均可以安裝)、i686(奔騰 II 以上計算機均可以安裝,目前全部的 CPU 都是 奔騰 II 以上,因此這個軟件版本居多)、
x86_64(64 位 CPU 能夠安裝)和 noarch(沒有硬 件限制)等文件名了。 
#rpm  包的擴展名 Linux 下文件不是靠擴展名區分文件類型,也就是 Linux 中擴展 名沒有任何含義。但是這裏怎麼又出現了擴展名呢?
緣由很簡單,若是我不把 RPM 的擴展名 叫作「.rpm」,管理員很難知道這是一個 RPM 包,固然也就沒法正確安裝了。
也就是說若是 RPM 包不用「.rpm」做爲擴展名,系統能夠正確識別沒有問題,但是管理員很難識別這是個什麼樣的軟件。

包全名:若是操做的是未安裝軟件包,則使用包全名,並且須要注意絕對路徑
包名:若是操做的是已經安裝的軟件包,則使用包名便可,系統會生產 RPM 包的數據庫(/var/lib/rpm/)。緩存

2.rpm包手工命令安裝
2.1 默認安裝位置
目錄 做用
/etc/ 配置文件目錄
/usr/bin/ 可執行命令目錄
/usr/lib/ 程序使用的函數庫保存位置
/usr/share/doc/ 軟件基本使用手冊保存位置
/usr/lib/ 幫助文檔保存位置
2.2 RPM 包安裝

1)安裝命令服務器

rpm –ivh 包全名 # 注意必定是包全名。若是跟包全名的命令 要注意路徑,由於軟件包在光盤當中。
選項:  
-i   install 安裝(install)  
-v  顯示更詳細的信息(verbose)  
-h   打印#顯示安裝進度(hash)
--nodeps  不檢測依賴性安裝。軟件時會檢測依賴性,肯定所需的底層軟件是否安裝。 若是沒有安裝則會報錯。無論依賴性,強行安裝。這樣不檢測依賴性安裝的軟件基本是不能使用的,因此不建議這樣作。 
--replacefiles  替換文件安裝。若是安裝軟件包,但是包中部分文件已經存在,那麼 正常安裝時候,會報錯「某個文件已經存在」從而致使軟件沒法安裝,使用這個選項可 以忽視這個報錯,而覆蓋安裝。
--replacepkgs 替換軟件包安裝。若是軟件包已經安裝,此選項能夠把軟件包重複安裝一遍。
--force  強制安裝。不論是否已經安裝,都從新安裝。就是—replacefiles 和 —replacepkgs 的綜合。
--test  測試安裝。不會實際安裝,只是檢測一下依賴性。
--prefix  指定安裝路徑。爲安裝軟件指定安裝路徑,而不使用默認安裝路徑。注意: 若是指定了安裝路徑,軟件沒有安裝到系統默認路徑中的話,系統會找不到這些安裝的軟件,須要進行手工配置才能被系統識別。因此 rpm 包咱們通常都採用默認路徑安裝。

2)服務啓動編程語言

[root@localhost ~]# service 服務名 start|stop|restart|status 
參數:  
start: 啓動服務  
stop:  中止服務
restart: 重啓服務
status: 服務狀態
2.3 RPM 包升級
[root@localhost ~]#  rpm –Uvh 包全名 
選項:  
-U(大寫) 升級安裝,若是沒有安裝過,系統直接安裝。若是安裝過的版本較舊,則升級到新版本(upgrade)

[root@localhost ~]#  rpm –Fvh 包全名 
選項: 
-F(大寫)  升級安裝,若是沒有安裝過,則不會安裝。必須安裝有較舊版本,才能升級(freshen)
2.4 卸載
[root@localhost ~]# rpm  -e  包名 
選項: 
--nodeps 不檢查依賴性  
-e   卸載
2.5 查詢

1)查詢軟件包是否安裝
能夠查詢軟件包是否安裝

[root@localhost ~]#  rpm –q 包名 
選項:  
-q: 查詢(query)

2)查詢系統中的全部安裝軟件包
能夠查詢 Linux 系統中全部已經安裝的軟件包

[root@localhost ~]# rpm -qa  
選項:  
-a:全部(all)

3)查詢軟件包的詳細信息
能夠查詢已經安裝的某個軟件包的詳細信息

[root@localhost ~]#  rpm –qi 包名 
選項:  
-i: 查詢軟件信息(information)

查詢尚未安裝的軟件包的詳細信

[root@localhost ~]#  rpm –qip 包全名 
選項:  
-p: 查詢沒有安裝的軟件包(package)

4)查詢軟件包中的文件列表
能夠查詢已經安裝的軟件包中的文件列表和安裝的完整目錄

[root@localhost ~]#  rpm –ql 包名 
選項:  
-l: 列出軟件包中全部的文件列表和軟件所安裝的目錄(list)

查詢尚未安裝的軟件包中的文件列表和打算安裝的位置

[root@localhost ~]#  rpm –qlp 包全名 
選項:  
-p: 查詢沒有安裝的軟件包信息(package)

5)查詢系統文件屬於哪一個 RPM 包

[root@localhost ~]#  rpm –qf 系統文件名 
選項:  
-f: 查詢系統文件屬於哪一個軟件包(file)

6)查詢軟件包所依賴的軟件包
查詢系統中和已經安裝的軟件包有依賴關係的軟件包

[root@localhost ~]# rpm –qR 包名 
選項:  
-R: 查詢軟件包的依賴性(requires)
能夠查詢沒有安裝的軟件包的依賴性嗎?加「-p」選項便可。例如,查看一下尚未安裝的 httpd 軟件包的依賴包,能夠執行以下命令: 
[root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64
2.6 驗證

1)基本命令

[root@localhost ~]# rpm –Va  
選項:  
-Va 校驗本機已經安裝的全部軟件包 
[root@localhost ~]# rpm –V 已安裝的包名 
選項:  
-V 校驗指定 RPM 包中的文件(verify) 
[root@localhost ~]# rpm –Vf 系統文件名 
選項:  
-Vf 校驗某個系統文件是否被修改

2)驗證舉例

[root@localhost ~]# rpm -V httpd 
S.5....T.      c   /etc/httpd/conf/httpd.conf 
驗證內容   文件類型  最後是文件名。
那麼驗證內容中的 8 個信息的具體內容 以下:
S 文件大小是否改變 
M 文件的類型或文件的權限(rwx)是否被改變 
5 文件 MD5 校驗和是否改變(能夠當作文件內容是否改變) 
D 設備的主從代碼是否改變 
L 文件路徑是否改變 
U 文件的屬主(全部者)是否改變 
G 文件的屬組是否改變 
T 文件的修改時間是否改變  
apache 配置文件的文件類型是 c,那麼還有哪些文件類型呢?
c 配置文件(config file)
d 普通文檔(documentation)
g 「鬼」文件(ghost file),不多見,就是該文件不該該被這個 RPM 包
l 受權文件(license file)
 r 描述文件(read me)
2.7 數字證書

上面的校驗方法只能對已經安裝的 RPM 包中的文件進行校驗,可是若是 RPM 包自己就被動過手腳, 那麼校驗就不能解決問題了。
咱們就必須使用數字證書驗證了。首先必須找到原廠的公鑰文件,而後進行安裝 ,再安裝 RPM 包是。
用rpm命令安裝軟件時會去提取 RPM 包中的證書信息,而後和本機安裝的原廠證書進行驗證,若是驗證經過,則容許安裝;若是驗證不經過,則不容許安裝並警告。
1)數字證書位置

[root@love2 yum.repos.d]# ll  /mnt/cdrom/RPM-GPG-KEY-CentOS-6 
-r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6

2)數字證書導入

[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
選項:  
--import 導入數字證書

#查詢已經安裝的證書
[root@love2 yum.repos.d]# rpm -qa | grep  gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3
2.8 RPM包中文件的提取

有時候咱們會將某些軟件的文件誤刪,因此咱們能夠經過命令提取特定文件。
1)使用命令 rpm2cpio+ cpio

[root@localhost ~]# rpm2cpio 包全名 | cpio -iduv .文件絕對路徑   
rpm2cpio  將 rpm 包轉換爲 cpio 格式的命令
cpio      是一個標準工具,它用於建立軟件檔案文件和從檔案文件中提取文件
cpio還原時,命令解釋。
-i:copy-in 模式,還原  
-v:顯示還原過程  
-c:使用較新的 portable format 存儲方式  
-d:還原時自動新建目錄  
-u:自動使用較新的文件覆蓋較舊的文件

2)示例、假如咱們不當心 將位於 /bin/find 刪掉了。咱們能夠經過如下步驟恢復

一、先查出該命令對應的軟件包名
[root@love2 ~]# rpm -qf /bin/find
findutils-4.4.2-9.el6.x86_64
二、提取文件到當前文件下
[root@love2 ~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv  ./bin/find
三、將find命令移動到/bin目錄下
[root@love2 ~]# mv bin/find  /bin/

三 、rpm包在線安裝(yum安裝)

3.1 yum源文件解析

yum 源配置文件保存在/etc/yum.repos.d/目錄中,文件的擴展名必定是「.repo」。也就是說, yum 源配置文件只要擴展名是「.repo」就會生效。

[root@love2 ~]# ls /etc/yum.repos.d/
bak  CentOS-Media.repo
#因爲我配置了光盤yum源,因此將其餘 .repo 文件移動了一下。

配置文件詳情以下

[base]:容器名稱,必定要放在[]中
name:容器說明,能夠本身隨便寫。
mirrorlist:鏡像站點,這個能夠註釋掉。
baseurl:咱們的 yum 源服務器的地址。默認是 CentOS 官方的 yum 源服務器,是可使用的。 若是你以爲慢,則能夠改爲你喜歡的 yum 源地址。
enabled:此容器是否生效,若是不寫或寫成 enabled=1 則表示此容器生效,寫成 enabled=0 則表示此容器不生效。 
gpgcheck:若是爲 1 則表示 RPM 的數字證書生效;若是爲 0 則表示 RPM 的數字證書不生效
gpgkey:數字證書的公鑰文件保存位置。不用修改。
3.2 搭建本地光盤yum源

第一步:放入 CentOS 安裝光盤,並掛載光盤到指定位置

[root@love2 ~]# mkdir /mnt/cdrom # 建立 cdrom 目錄,做爲光盤的掛載點 
[root@localhost ~]# mount /dev/sr0  /mnt/cdrom/ #掛載

第二步:修改其餘幾個 yum 源配置文件的擴展名,讓它們失效,由於只有擴展名是「*.repo」的 文件才能做爲 yum 源配置文件。固然你也能夠將不須要的移動到另外的目錄。

自行選擇

第三步:修改光盤 yum 源配置文件 CentOS-Media.repo,參照如下方法修改:

[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
#       file:///media/cdrom/
#       file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

第四步 清除原先yum緩存,而且創建新的緩存

yum clean all && yum makecache
3.3 yum命令

1)查詢

查詢 yum 源服務器上全部可安裝的軟件包列表
[root@love2 bak]# yum list

查詢 yum 源服務器中是否包含某個軟件包。
[root@love2 bak]# yum list bind
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安裝的軟件包
bind.x86_64                                              32:9.8.2-0.47.rc1.el6                                               c6-media

搜索 yum 源服務器上全部和關鍵字相關的軟件包
[root@love2 bak]# yum search apache   #搜索包含有apache關鍵字軟件包
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
======================================================== N/S Matched: apache ========================================================
ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant

查詢指定軟件包的信息
[root@love2 bak]# yum info bind
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安裝的軟件包
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.47.rc1.el6
Size        : 4.0 M
Repo        : c6-media
...

2)安裝

[root@love2 yum.repos.d]# yum -y install 包名 
選項:  
install  安裝  
-y   自動回答 yes。若是不加-y,那麼每一個安裝的軟件都須要手工回答 yes

3)升級

[root@love2 yum.repos.d]# yum -y update 包名 
# 升級指定的軟件包 
選項:  update:  升級  
-y:   自動回答 yes
[root@love2 yum.repos.d]# yum -y update 
# 升級本機全部軟件包

4)卸載

[root@love2 yum.repos.d]# yum remove 包名 
# 卸載指定的軟件包
3.4 yum組管理命令

1)查詢能夠安裝的軟件組

[root@love2 ~]# yum grouplist 
# 列出全部可用的軟件組列表

2)查詢軟件組內包含的軟件

[root@love2 ~]# yum groupinfo 軟件組名 
# 列出軟件組中包含的軟件
例:
[root@love2 bak]# yum groupinfo Emacs
已加載插件:fastestmirror, security
設置組進程
Loading mirror speeds from cached hostfile

組:Emacs
 描述:GNU Emacs 可擴展、可自定義的文本編輯器。
 必要的軟件包:
   emacs
 可選的軟件包:
   ctags-etags
   emacs-auctex
   emacs-gnuplot
   emacs-nox

3)安裝軟件組

[root@love2 ~]# yum groupinstall 軟件組名 
# 安裝指定軟件組,組名能夠由 grouplist 查詢出來

4)移除軟件組

[root@love2 ~]# yum groupremove 軟件組名 
# 卸載指定軟件組
相關文章
相關標籤/搜索