亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

RedHat系Linux中的rpm包管理系統

添加時間:2016-6-9 19:36:29  添加: 思海網絡 
在linux世界里流行兩種包管理方式,分別是redhat系的rpm和debian系的deb。其中rpm的使用更為廣泛,包管理是操作系統用來維護各組件版本的一種方式,對于軟件發行者來說,將自己的程序制作成標準的rpm格式也會使得程序的安裝、升級和卸載變得非常容易。因此linux下幾乎所有流行的程序都有rpm格式的包,有些是發行者自己打包,也有些第三方提供rpm包,例如redhat發行版里的rpm都是redhat自己打包,他們定期打patch,升級并且維護包之間的依賴關系,他們制作的rpm包是最可以信任的。除此之外,http://dag.wieers.com/rpm/這個網站也提供很多較新的rpm包,在redhat官方找不到的包很多在這里都可以找到。
在網上搜索rpm包最常用的方式是通過rpmfind.net進行搜索,它會提供各個發行版下的各個版本的包下載。注意一定要找到正確的發行版下對應的包,由于依賴底層庫和庫版本的不同,不同版本的發行版的包最好不要混裝。

RPM的安裝功能
先介紹rpm的安裝,基本的安裝命令如下

代碼如下:
rpm -ivh xxxxxxx.rpm

i代表安裝,e代表卸載,v代表顯示安裝過程,h代表顯示#號樣式的進度
下面看一個簡單的例子:


代碼如下:
[leconte@localhost soft]$ sudo rpm -ivh enca-1.9-4.el5.rf.i386.rpm
warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing... ########################################### [100%]
1:enca ########################################### [100%]

rpm包這樣就裝上了,但是很多時候沒有這么順利,由于rpm包之間可能存在依賴關系,在依賴關系無法滿足的情況下默認是沒法繼續安裝的;再比如某個包已經安裝過,如果想再裝一次,也是無法繼續的。這種情況下可以通過一些參數來強制執行,但是強制執行的后果可能是裝的程序無法正常使用,因為它依賴的包你系統并沒有提供。
安裝時常用的參數如下:
--test 測試安裝,并不真實安裝而僅僅是測試能否安裝。
--nodeps 忽略依賴關系強行安裝
--force 強制替換現有版本
--nos 僅安裝文件不執行附加腳本
下面演示一個強行安裝的例子“


代碼如下:
[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm
error: Failed dependencies:
perl(LWP::UserAgent) is needed by awstats-6.9-1.noarch
[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm --nodeps
Preparing... ########################################### [100%]
1:awstats ########################################### [100%]

awstats依賴的PERL模塊LWP::UserAgent并沒有裝,因此默認是無法安裝的,但是通過nodeps可以強制安裝,而LWP::UserAgent可以通過cpan去后續安裝。也就是說,如果你明白你在做什么,那么強制安裝并不可怕。
需要注意的是,rpm包的安裝和卸載都需要在系統的rpm數據庫里保存信息,因此需要root權限。

RPM的查詢功能
接著介紹rpm的查詢功能,查詢是我們最常用的功能,例如查詢一個包里包含哪些文件、一個文件屬于哪個包、以及包之間的依賴關系等等。
rpm的-q參數是用來進行查詢的,需要明確的是rpm既可以對安裝在系統上的包進行查詢,也可以對一個未安裝的rpm包進行查詢。當一個rpm包安裝到系統上之后,安裝信息通常會保存在本地的/var/lib/rpm/目錄下,數據會以berkeley DB的方式保存。查看/var/lib/rpm/Packages文件的類型可以驗證這一點。



代碼如下:
[leconte@localhost rpm]$ file /var/lib/rpm/Packages
/var/lib/rpm/Packages: Berkeley DB (Hash, version 8, native byte-order)

這種情況下的查詢其實就是對bdb的讀訪問。而對一個未安裝的rpm包進行查詢,則是通過解讀rpm包本身而獲取信息,這一點是首先需要明確的。
下面我就簡單羅列一下rpm最常用的幾個查詢功能
1.rpm -qa 用來查詢系統安裝的所有包,a代表all
2.rpm -ql [包名] 用來查詢某個包里的文件列表,例如查詢包passwd里包含的內容


代碼如下:
[leconte@localhost rpm]$ rpm -ql passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/man/man1/passwd.1.gz

3.rpm -qi [包名] 用來查詢包信息,其中包含包的介紹,作者,打包日期等重要信息。
4.rpm -qf [文件名] 用來查詢一個文件所屬的rpm包,例如:


代碼如下:
[leconte@localhost rpm]$ rpm -qf /etc/passwd
setup-2.5.58-4.el5

系統配置文件/etc/passwd是屬于setup這個包的。
5.rpm -qV [包名] 用來驗證某個包中安裝的各文件的狀態,如果當前文件的大小、md5和安裝時數據庫里保存的信息不一致,該命令則會將不一致的文件列出來。該命令對于系統出問題的情況下的故障排查很有幫助。
上面是幾個最常用的查詢命令,都是針對查詢系統rpm包情況的。如果要查詢未安裝的rpm包則只需要加上p參數和包路徑即可。例如查詢包perl-Git-1.5.5.6-4.el5.i386.rpm的信息:


代碼如下:
[leconte@localhost soft]$ rpm -qip perl-Git-1.5.5.6-4.el5.i386.rpm
warning: perl-Git-1.5.5.6-4.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Name : perl-Git Relocations: (not relocatable)
Version : 1.5.5.6 Vendor: Fedora Project
Release : 4.el5 Build Date: 2009年06月19日 星期五 21時28分05秒
Install Date: (not installed) Build Host: xenbuilder2.fedora.redhat.com
Group : Development/Libraries Source RPM: git-1.5.5.6-4.el5.src.rpm
Size : 24878 License: GPL
Signature : DSA/SHA1, 2009年06月20日 星期六 04時07分18秒, Key ID 119cc036217521f6
Packager : Fedora Project
URL : http://kernel.org/pub/software/scm/git/
Summary : Perl interface to Git
Deion :
Perl interface to Git.

RPM包的依賴關系
rpm包之間會維持依賴關系,這是包管理系統的特色。我們都經歷過安裝一個包而因為依賴缺失而裝不上的情況。后來yum的出現能一定程度解決這個問題,但我們仍然有必要了解rpm依賴關系背后的細節。
自己打過rpm包的人都知道,在包的spec配置文件往往要明確寫出此包所依賴的包名或文件名,同時也可能需要明確寫出此包所提供的內容。這個內容可能是動態庫也可能是其他一些名字,并不一定是文件名。各個包之間正是依靠這些內容來建立依賴關系的,每個包都提供一些內容同時依賴一些別的內容,整個系統就在這樣一種相互依賴中形成了。
在看具體的例子之前先介紹幾個指令:
rpm -qR [包名] 可以用來查詢指定包所依賴的內容
rpm -q –provides [包名] 可以用來查詢指定包所提供的內容
rpm -q –whatprovides [內容] 可以用來查詢哪個包提供了指定內容
rpm -q –whatrequires [內容] 可以用來查看哪些包依賴于指定內容
例如我們以time這個包為例進行查詢,結果如下:



代碼如下:
[leconte@localhost soft]$ rpm -qR time
/bin/sh
/bin/sh
/sbin/install-info
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.3.4)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)

可見,time這個包如果要安裝,上述內容必須已經存在,否則將會提示依賴缺失而無法安裝。我們以列表中的/bin/sh為例進行反查,可以看到系統中哪個包提供了/bin/sh


代碼如下:
[leconte@localhost soft]$ rpm -q --whatprovides "/bin/sh"
bash-3.2-24.el5

很明顯,bash這個包提供了/bin/sh,正是由于bash的安裝才滿足了time的安裝需求。
time依賴于bash等包,同時它也提供了一些內容,有可能被別的包依賴:


代碼如下:
[leconte@localhost soft]$ rpm -q --provides time
time = 1.7-27.2.2
[leconte@localhost soft]$ rpm -q --whatrequires 'time'
no package requires time

不幸的是系統中并沒有包依賴于time,因為它本身屬于較上層的包。
對于一些底層內容就會有很多包依賴它,例如之前碰到的/bin/sh:


代碼如下:
[leconte@localhost soft]$ rpm -q --whatrequires '/bin/sh'
bash-3.2-24.el5
bash-3.2-24.el5
info-4.8-14.el5
ncurses-5.5-24.20060715
libxml2-2.6.26-2.1.2.7
readline-5.1-1.1

......................省略n行
由于篇幅所限就不全列舉出來了,這種依賴關系應該可以一目了然了。
和上節類似,rpm -qR和rpm -q –provides這兩個查詢指令同樣可以加上-p參數應用到一個未安裝的rpm包,例如


代碼如下:
[leconte@localhost soft]$ rpm -qp --provides enca-1.9-4.el5.rf.i386.rpm
warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
libenca.so.0
enca = 1.9-4.el5.rf

可以看到,enca這個rpm包提供了動態庫libenca.so.0和enca本身。
通過使用本節這四條依賴關系查詢指令基本可以了解到系統上眾多rpm包之間的耦合關系,明確了這一點,我們對rpm的理解也就更深了一步。


RPM包的卸載和升級
rpm包的卸載和升級的指令如下:
rpm -e [包名] 用來卸載一個rpm包
rpm -U [包文件] 用來升級一個現有的rpm
需要注意的是,如果要卸載的rpm包中的內容被別的rpm包依賴,那么則無法卸載,例如



代碼如下:
[leconte@localhost ~]$ rpm -e php-common
error: Failed dependencies:
php-common = 5.2.9-4 is needed by (installed) php-pdo-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-bcmath-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-curl-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-dba-5.2.9-4.i386
        
php-common由于被 php-pdo等包依賴而無法單獨卸載,php-pdo和php-common可以利用上節介紹過的依賴關系查詢指令查到:


代碼如下:
[leconte@localhost ~]$ rpm -qR php-pdo
config(php-pdo) = 5.2.9-4
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.3)
libc.so.6(GLIBC_2.4)
librt.so.1
libsqlite3.so.0
php-common = 5.2.9-4
..............
[leconte@localhost ~]$ rpm -q --whatrequires php-common
php-pdo-5.2.9-4
php-bcmath-5.2.9-4
php-curl-5.2.9-4
php-dba-5.2.9-4
php-gd-5.2.9-4
...............

這種情況下想要卸載php-common,只能將它依賴的所有包全部卸載掉。更暴力的方式是指定-nodeps忽略依賴關系限制,但是這樣造成的后果就是php-pdo等包將無法正常使用,因此這種方式一般不推薦。
rpm包的升級指的是rpm包的版本升級,這種情況下實際內部執行的動作分兩步,即先安裝新版本然后卸載老版本。此外,rpm也可以進行包的降級,只需要指定–oldpackages參數即可。
值得注意的是在卸載和升級的過程中,包中的配置文件會被妥善處理,rpm會根據一系列規則決定配置文件是否保留,即使被替換,舊的配置文件也會被重命名后保存起來,你之前對配置文件做過的修改不會因為rpm包的升級而丟失。

關鍵字:RedHat、Linux、rpm、包管理系統
分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站