天天看點

Linux的rpm包管理

我們都知道,windows的程式無法直接在linux中運作,windows中大量的木馬和病毒也無法被linux識别,這樣加強了linux的安全性,但所有的軟體包都必須針對linux再做單獨的開發。

一、軟體包分類

 源碼包 (把源代碼直接開放的包)

   腳本安裝包(源碼包寫一個安裝界面,不需要手動安裝)

 二進制包(RPM包、系統預設包)

源碼包的優點:

1.開源,如果有足夠的能力,可以修改源代碼

2.可以自由選擇所需的功能

3.軟體是編譯安裝,是以更加适合自己的系統,更加的穩定也效率更高

4.解除安裝友善

缺點:

1.安裝步驟較多,尤其在安裝較大的軟體集合時(如LAMP環境搭建),容易出現拼寫錯誤

2.編譯過程時間過長,安裝比二進制安裝時間長

3.因為是編譯安裝,安裝過程中一旦報錯新手很難解決。

二進制包的優點:

1.包管理系統簡單,隻通過幾個指令就可以實作包的安裝、更新、查詢和解除安裝

2.安裝速度比源碼包安裝快的多

1.經過編譯,不再可以看到源代碼

2.功能選擇不如源碼包靈活

3.依賴性(當安裝一個軟體包須先安裝另一個軟體包)

二、RPM:紅帽子包管理器(RedHat Package Manager)

 (1)rpm包管理方法

     rpm指令管理

     yum線上管理

rpm包命名規則

所有的rpm包都在CD光牒裡,在Packages目錄

httpd-2.2.15-15.el6.x86_64.rpm

httpd   2.2.15   1 5         el6.       x86_64.       rpm

軟體包名 軟體版本 軟體釋出的次數 适合的Linux平台 适合的硬體平台  rmp 擴充名

需要注意的是包名和包全名是有差別的

包全名:操作的包是沒有安裝的軟體包時,使用包全名。而且要注意安裝路徑。(如安裝,更新)

包名:操作已經安裝的軟體包時,使用包名。是搜尋/var/lib/rpm中的資料庫。(如查詢,解除安裝)

  (2)RPM包依賴性

樹形依賴:a——b——c

安裝時隻能先安裝c,再安裝b,最後安裝a,解除安裝時解除安裝c,再解除安裝b,再解除安裝a

環形依賴:a——b——c——a

用一條指令把abc同時安裝

子產品依賴:子產品依賴查詢網站(www.rpmfind.net)

<a href="http://s4.51cto.com/wyfs02/M01/86/CA/wKiom1fKvbGBsQslAABN3kNEob0322.png" target="_blank"></a>

隻要是.so.2的都為庫依賴包,不是獨立的包,是某一個軟體包的軟體,我們隻要把軟體所在的包安裝上,也就自動安裝上了,依賴性就會被解決。把需要的依賴包進行查詢,如圖中的是libodcinst.so.2,進去查詢。

yum線上管理(解決依賴性)

實作準備一個包含所有rpm包的網站,作為我的線上伺服器源,我們隻要用線上指令去安裝軟體,不管我去依賴任何哪一個包,都不需要用使用者解決,yum會自動去伺服器下載下傳需要的包,然後所有的依賴性都自己解決。

是不是非要上網?不是,除了可以拿網絡yum源作為伺服器,還可以拿本地CD光牒作為yum源,因為CD光牒裡包含了所有的rpm包。但是是需要收費的。

 (3)RPM常用指令

<code>RPM  安裝</code>

<code>rpm 【選項】 包全名 (一定是包全名,而且是絕對路徑或者去/mnt/cdrom/Packages)</code>

<code>-i (install)   安裝</code>

<code>-v (verbose) 顯示詳細資訊</code>

<code>-h (hash)    顯示進度</code>

<code>--nodeps       不檢測依賴性 (雖然有這個選項,但根據上面的理論,你覺得會用它嗎?)</code>

當然,事項都是先将CD光牒挂載上的。

<a href="http://s3.51cto.com/wyfs02/M01/86/CA/wKiom1fKverin4G2AAAsS2zK6bA586.png" target="_blank"></a>

随機測試了個,沒有出現依賴包問題,若提示出現的依賴包,就一層一層的安裝。

<code>RPM包的更新</code>

<code>-U  (upgrade)  更新</code>

rpm -Uvh 包全名

需要有個比目前系統的包更進階的包,我們現在用的都是CD光牒中的包,沒有更進階的包。

<code>RPM 解除安裝</code>

<code>-e (erase)解除安裝</code>

<code>--nodeps  不檢查依賴性</code>

<code>rpm -e 包名 (包名,因為是已經裝過的包,在背景資料庫搜尋)</code>

(4)RPM的查詢方式

安裝和解除安裝用yum方法更為簡單,因為它會自動解決依賴性,但是查詢隻能通過rpm指令來查詢。yum有查詢,但是沒有rpm查詢的多。

<code>rpm -q 包名  查詢包是否安裝</code>

<code>-q (query)查詢</code>

<code>-a(all) 所有</code>

<code>-l (list) 清單</code>

<code>rpm -qa 【包名】  查詢所有已經安裝過的RPM包</code>

<code>rpm -ql 【包名】  查詢包中檔案的安裝位置</code>

<code>-p (package)    查詢未安裝包資訊</code>

有人看到這裡就開始郁悶了,包都沒安裝,怎麼檢視安裝位置啊。其實linux包安裝位置是組建包的時候就決定好的,即使沒安裝,我們也可以檢視它打算裝哪

<a href="http://s3.51cto.com/wyfs02/M00/86/CA/wKioL1fKviah_2kmAACzCZdYaXw888.png" target="_blank"></a>

查詢系統檔案屬于哪個RPM包

<code>rpm -qf 系統檔案檔案名</code>

<code>-f (</code><code>file</code><code>)查詢系統檔案屬于哪個軟體包</code>

必須是通過包裝出來的,才能反向追查

<a href="http://s4.51cto.com/wyfs02/M01/86/CA/wKioL1fKvkODVlKBAAAVOfeLD7s308.png" target="_blank"></a>

查詢軟體包的依賴性

rpm -qR 包名

-R (requires)  查詢軟體包的依賴性

<a href="http://s2.51cto.com/wyfs02/M02/86/CA/wKiom1fKvmCDK_E5AABwA36z_ZQ969.png" target="_blank"></a>

安裝appach需要裝這麼多這麼多包。。。查詢已經安裝過的包的依賴性沒有什麼意義,主要還是查詢為安裝包的依賴性。

<a href="http://s2.51cto.com/wyfs02/M02/86/CA/wKiom1fKvnmy3FM-AACgfU2H4Dw169.png" target="_blank"></a>

RPM校驗

把rpm包裝完之後,把特征記錄下來,然後把現在這個檔案和原先的檔案進行比較,看兩個檔案之間是否有什麼變化。

<code>rpm -V 已安裝的包名</code>

<code>-V (verify)校驗指定RPM包中的檔案</code>

<a href="http://s3.51cto.com/wyfs02/M02/86/CA/wKioL1fKvpjzmg0uAAARfTU775g174.png" target="_blank"></a>

沒有任何提示資訊,就說明是初始狀态

<a href="http://s2.51cto.com/wyfs02/M00/86/CA/wKiom1fKvrTC5rcAAAAVuTYrznA905.png" target="_blank"></a>

<code>驗證内容中</code><code>8</code><code>個資訊的具體内容如下;</code>

<code>S  檔案的大小是否發生改變</code>

<code>M  檔案的類型或檔案權限是否被改變</code>

<code>5</code>  <code>檔案MD5校驗和是否改變(可以看成檔案的内容是否改變)</code>

<code>D  裝置的中,從代碼是否發生改變</code>

<code>L  檔案的路徑是否改變</code>

<code>U  檔案的所有者是否改變</code>

<code>G  檔案的所屬組是否改變</code>

<code>T  檔案的修改時間是否改變</code>

檔案類型:

<code>c  配置檔案 (config </code><code>file</code><code>)</code>

<code>d  普通檔案  (documentation)</code>

<code>g  “鬼”檔案(ghost </code><code>file</code><code>),很少見,就是該檔案不應該被這個RPM包包含</code>

<code>l   授權檔案(license </code><code>file</code><code>)</code>

<code>r   描述檔案(read me)</code>

RPM包中檔案提取

最常用的是誤操作,不小心删除某個檔案,不需要重新安裝服務

rpm2cpio 包全名 |

cpio -idv .檔案絕對路徑

rpm2cpio   将rmp包轉換為cpio格式的指令

cpio  是一個标準工具,它用于建立軟體檔案檔案和從檔案檔案中提取檔案。

c

<code>pio 【選項】 &lt;【檔案|裝置】</code>

<code>-i  copy-</code><code>in</code><code>模式,還原</code>

<code>-d  還原時自動建立目錄</code>

<code>-v  顯示還原過程</code>

<a href="http://s2.51cto.com/wyfs02/M01/86/CA/wKioL1fKvtGyDqwjAAA1cBA5M9g978.png" target="_blank"></a>

首先檢視下ls屬于哪個軟體包,然後用mv造成誤删的假象,再用rpm2cpio提取出ls檔案來。

這條指令的意思是把

/mnt/cdrom/Packages/coreutils-8.4.31.el6.x86_64.rpm 轉變成cpio格式,然後管道指令從轉換後的檔案中提取/bin/ls儲存到目前路徑

RPM包管理——yum 線上管理

rpm安裝的依賴性非常多,安裝非常麻煩,yum就是為了解決依賴性所産生的方法,你隻需告訴你的系統需要安裝哪個包,它就會自動到伺服器上下載下傳軟體包,同時,把他依賴的軟體包也會自動下載下傳,會自動安裝所有的包。

網絡yum源

<a href="http://s4.51cto.com/wyfs02/M00/86/CA/wKiom1fKvvPwcdmNAABu9pbpHLo977.png" target="_blank"></a>

<code>[base]    容器名稱,一定要放在[]中</code>

<code>name     容器說明,可以自己随便寫</code>

<code>mirrorlist  鏡像站點,這個可以注釋掉</code>

<code>baseurl    我們的yum源伺服器的位址,預設是redhat官方的源服務位址,是可以使用的,當然你也可以更改你喜歡的yum源位址</code>

<code>enabled    此容器是否生效,如果不寫或者寫成enabled=</code><code>1</code><code>都是生效的,寫成enabled=</code><code>0</code>

<code>         </code><code>就是不生效</code>

<code>gpgcheck   如果是</code><code>1</code><code>是指rpm的數字證書生效,如果是</code><code>0</code><code>則不生效</code>

<code>gpgkey    數字證書的公鑰檔案儲存位置,不用改</code>

網絡yum源預設是配置好的,什麼都不用更改,直接利用官方網站的yum源伺服器進行性下載下傳安裝更新

常用yum指令

1.查詢

<code>yum list  查詢所有可用軟體包清單</code>

<code>  </code><code>yum search 關鍵字  搜尋伺服器上所有和關鍵字相關的包</code>

包名和包全名的概念隻對rpm指令生效,是以搜尋的時候輸入包名就可以了,不像rpm,它沒有安裝,就得輸入包全名,yum是去伺服器搜尋

安裝

<code>yum -y install 包名</code>

<code>install  安裝</code>

<code>-y  自動回答yes</code>

<code> </code> 

<code>更新</code>

<code>yum -y update 包名</code>

<code>update  更新</code>

<code>解除安裝</code>

<code>yum -y remove 包名</code>

<code>remove  解除安裝</code>

更新和下載下傳都需注意,後面不加包名就是更新和解除安裝所有,解除安裝所有大家都知道,但就是解除安裝某個軟體,之前提過依賴包的問題,安裝a需要依賴包b,安裝b需要依賴包c,他/它會先安裝c再安裝b,最後才是我們想要的軟體a,解除安裝的時候,會先解除安裝軟體a,再下載下傳依賴包b,最後解除安裝依賴包a,但依賴包a被不止一個軟體c所依賴,yum解除安裝把依賴包c解除安裝了,導緻其他軟體無法使用,甚至系統依賴a,導緻系統崩潰。更新所有,會把linux核心也更新了,更新玩linux核心後,需要做下配置如果是在遠端登入的話,那麼就無法連接配接了。是以建議安裝使用最小化安裝,不安裝多于軟體,盡量不解除安裝

yum軟體組管理指令

<code>yum grouplist   列出所有可用的軟體組清單</code>

<code>yum groupinstall 軟體組名  (安裝指定軟體組,組名可以有grouplist查詢出來,組名有空</code>

<code>                           </code><code>格,用雙引号括起來)</code>

<code>yum groupremove  軟體組名  解除安裝指定軟體組</code>

CD光牒yum源搭建

<code>1</code><code>.挂載CD光牒</code>

<code>mount /dev/cdrom /mnt/cdrom</code>

<code>2</code><code>.讓網絡yum原檔案失效</code>

<code>将enabled該為</code><code>0</code><code>,也可以将字尾名更改為不是repo結尾的</code>

<code>3</code><code>.修改CD光牒yum源檔案an</code>

<code>baseurl=</code><code>file</code><code>:</code><code>///mnt/cdrom   CD光牒的挂載位址(這裡是三個///,file://是協定名,第三個/是跟路徑)</code>

源碼包安裝:

上面說了源碼包和rpm包的差別,還有個很大的差別的就是安裝的位置的差別。

rpm是安裝在預設位置中

/etc

配置檔案安裝目錄

/usr/bin

可執行的指令的安裝目錄

/usr/lib

程式所使用的函數庫儲存位置

/usr/share/doc

基本的軟體使用手冊儲存位置

/usr/share/man

幫助檔案儲存位置

源碼包安裝位置

安裝在指定位置中,一般是/usr/local/軟體名

/etc/init.d/包名 start

service 包名 start (紅帽專有指令,一開始玩kali的時候...你們懂得)不管是什麼方法,service去搜尋的是安裝的預設路徑,歸根到底是用絕對路徑的方式

<code>1</code><code>.安裝c語言gcc的編輯器</code>

<code>2</code><code>.下載下傳源碼包 (http:</code><code>//mirror.bit.edu.cn)</code>

<code>3</code><code>.解壓下載下傳的源碼包</code>

<code>4</code><code>.進入解壓路徑(進入一般都會有INSTALL安裝說明和README使用說明,可以檢視安裝說明進行安裝)</code>

<a href="http://s2.51cto.com/wyfs02/M02/86/CA/wKioL1fKvxXBA8sAAAC436fr-Sc891.png" target="_blank"></a>

1../configure 軟體配置與檢查(定義需要的功能選項,檢測系統環境是否符合安裝要求,把定義好的功能選項和檢測系統環境的資訊都寫入Makefile,用于後續的編輯)

2.make 進行編譯

3.make install 編譯安裝

源碼包解除安裝直接把目錄删除就行了

腳本安裝包

認為把安裝過程寫成了自動安裝的腳本,隻要執行腳本,定義簡單的參數,就可以完成安裝。

同樣的,下載下傳軟體,解壓縮,進入壓縮目錄,隻想能夠安裝腳本

<a href="http://s5.51cto.com/wyfs02/M01/86/CA/wKiom1fKvzGzl65QAACK1MlzU6s277.png" target="_blank"></a>

./setup.sh 執行下一步下一步,是不是回到的windows的感覺,源碼安裝隻是簡單的介紹下,我平時常用的就是用rpm指令進行查詢,然後用yum進行安裝。

本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1845991

繼續閱讀