版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在本文中,學(xué)習(xí)如何在Linux系統(tǒng)上使用RPM和YUM包管理工具管理包。學(xué)習(xí):使用RPM和YUM安裝、卸載、升級(jí)和刪除包獲取版本、狀態(tài)、依賴關(guān)系、完整性和簽名等RPM包相關(guān)信息判斷一個(gè)包提供哪些文件,查明某個(gè)文件來(lái)自哪個(gè)包先決條件為了最有效地利用本系列中的文章,您應(yīng)該具有基本的Linux知識(shí),并需要準(zhǔn)備一個(gè)Linux系統(tǒng)用于練習(xí)本文介紹的命令。有時(shí)候不同版本的程序輸出格式不同,因此您所得到的結(jié)果未必總是與這里所示的清單和圖相同,特別是許多輸出高度依賴于系統(tǒng)上已經(jīng)安裝的包。您自己的輸出可能很不一樣,但是應(yīng)該能夠看出重要的共同點(diǎn)。包管理簡(jiǎn)介過(guò)去,許多Linux程序以源代碼的形式發(fā)行,用戶把源代碼構(gòu)建為所需的程序或程序集;源代碼還附帶必需的手冊(cè)頁(yè)、配置文件等等?,F(xiàn)在,大多數(shù)Linux發(fā)行商使用稱為包的預(yù)構(gòu)建的程序或程序集,包便于在發(fā)行版上安裝。在本文中,學(xué)習(xí)幫助安裝、更新和刪除包的包管理工具。本文主要關(guān)注RedHat開發(fā)的RedHatPackageManager(RPM),以及DukeUniversity物理系最初為管理RedHatLinux系統(tǒng)開發(fā)的YellowdogUpdaterModified(YUM)。從用戶的角度來(lái)說(shuō),基本的包管理功能由命令提供。Linux開發(fā)人員一直致力于讓Linux更容易使用,他們開發(fā)了其他工具(包括GUI工具)來(lái)補(bǔ)充基本工具,這對(duì)最終用戶隱藏了基本工具的一部分復(fù)雜性。在本文和學(xué)習(xí)Linux,101:Debian包管理中,我們主要討論基本工具,但是也會(huì)提到一些其他工具,讓您能夠繼續(xù)研究它們。RPM、YUM和APT(適用于Debian系統(tǒng))有許多相似之處。它們都可以安裝和刪除包。關(guān)于安裝的包的信息保存在數(shù)據(jù)庫(kù)中。它們都有基本的命令行功能,同時(shí)通過(guò)其他工具提供對(duì)用戶更友好的界面。它們都可以從Internet獲取包。在安裝Linux系統(tǒng)時(shí),通常會(huì)安裝許多包。這個(gè)集合可能是根據(jù)系統(tǒng)的用途定制的,比如服務(wù)器、桌面或開發(fā)工作站。有時(shí)候,可能需要安裝新的包以添加新功能,更新現(xiàn)有的包,甚至刪除不再需要或已經(jīng)被新的包取代的包。我們來(lái)看看如何完成這些任務(wù)以及如何解決一些相關(guān)的難題,比如尋找包含某一命令的包。RPMRedHat于1995年引入了RPM。RPM現(xiàn)在是LinuxStandardBase(LSB)中采用的包管理系統(tǒng)。rpm命令選項(xiàng)分為三組:用于查詢和檢查包用于安裝、升級(jí)和刪除包用于執(zhí)行其他功能在本文中,我們主要關(guān)注前兩組命令選項(xiàng)。在RPM的手冊(cè)頁(yè)中可以找到其他功能的相關(guān)信息。還應(yīng)該注意rpm是操作RPM的主要命令,而.rpm是RPM文件使用的擴(kuò)展名。所以“一個(gè)rpm”或“某某rpm”一般是指RPM文件,而rpm通常指命令。YUMYUM在RPM系統(tǒng)中增加了自動(dòng)更新和包管理,包括依賴關(guān)系管理。與DebianAdvancedPackagingTool(APT)一樣,除了了解系統(tǒng)上安裝的包之外,YUM還使用存儲(chǔ)庫(kù)。存儲(chǔ)庫(kù)是包的集合,通??梢酝ㄟ^(guò)網(wǎng)絡(luò)連接訪問(wèn)它們。安裝RPM包假設(shè)您想學(xué)Lisp,一位同事讓您使用gcl命令。您試著輸入gcl
--help、which
gcl或type
gcl。但是,如果系統(tǒng)無(wú)法找到gcl,您可能會(huì)看到與清單1相似的輸出。清單1.沒有找到gcl命令[ian@echidna~]$gcl--helpbash:gcl:commandnotfound[ian@echidna~]$whichgcl/usr/bin/which:nogclin(/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ian/bin)[ian@echidna~]$typegclbash:type:gcl:notfound您可能會(huì)問(wèn)同事要安裝哪個(gè)包,也可能猜想gcl命令應(yīng)該在gcl包中。這種猜測(cè)常常是對(duì)的,但是也不總是。我們稍后會(huì)看到如何尋找正確的包。在這里,需要gcl包。假設(shè)您已經(jīng)下載或以其他方式獲得了這個(gè)包的拷貝,可以使用帶-i(代表安裝)選項(xiàng)的rpm命令安裝它,見清單2。清單2.用rpm安裝gcl——第一次嘗試[root@echidna~]#rpm-igcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpmerror:Faileddependencies:gcl-selinuxisneededbygcl-2.6.8-0.6.20090701cvs.fc12.x86_64rpm命令知道這個(gè)包有一個(gè)依賴包,但是它并不幫助您解決依賴問(wèn)題。您需要自己獲取依賴包,然后再次嘗試,看看是否還有其他依賴包—重復(fù)這個(gè)過(guò)程,直到滿足所有依賴關(guān)系為止。好消息是,可以向rpm命令提供要安裝的包的列表,如果滿足所有依賴關(guān)系,它會(huì)以正確的次序安裝所有包。因此,您至少不必以正確的次序手工安裝每個(gè)包。如果您使用過(guò)Debian的APT,可能希望有像apt-get命令一樣的功能,apt-get命令會(huì)尋找需要的東西(包括依賴包)并安裝它們。對(duì)于基于RPM的系統(tǒng),YUM(YellowdogUpdaterModified)提供這種功能。清單3說(shuō)明如何使用帶install選項(xiàng)的yum命令安裝gcl和必需的gcl-selinux包。清單3.使用yum安裝gcl[root@echidna~]#yuminstallgclLoadedplugins:presto,refresh-packagekitSettingupInstallProcessResolvingDependencies-->Runningtransactioncheck--->Packagegcl.x86_640:2.6.8-0.7.20100201cvs.fc12settobeupdated-->ProcessingDependency:gcl-selinuxforpackage:gcl-2.6.8-0.7.20100201cvs.fc12.x86_64-->Runningtransactioncheck--->Packagegcl-selinux.x86_640:2.6.8-0.7.20100201cvs.fc12settobeupdated-->FinishedDependencyResolutionDependenciesResolved=====================================================================================PackageArchVersionRepositorySize=====================================================================================Installing:gclx86_642.6.8-0.7.20100201cvs.fc12updates6.3MInstallingfordependencies:gcl-selinuxx86_642.6.8-0.7.20100201cvs.fc12updates17kTransactionSummary=====================================================================================Install2Package(s)Upgrade0Package(s)Totaldownloadsize:6.4MInstalledsize:40MIsthisok[y/N]:yDownloadingPackages:SettingupandreadingPrestodeltametadataupdates/prestodelta|964kB00:01ProcessingdeltametadataPackage(s)datastilltodownload:6.4M(1/2):gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm|6.3MB00:12(2/2):gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm|17kB00:00-------------------------------------------------------------------------------------Total398kB/s|6.4MB00:16Runningrpm_check_debugRunningTransactionTestTransactionTestSucceededRunningTransactionInstalling:gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_641/2Installing:gcl-2.6.8-0.7.20100201cvs.fc12.x86_642/2Installed:gcl.x86_640:2.6.8-0.7.20100201cvs.fc12DependencyInstalled:gcl-selinux.x86_640:2.6.8-0.7.20100201cvs.fc12Complete!清單3中的輸出表明,YUM在名為“updates”的存儲(chǔ)庫(kù)中找到了gcl.x86_640:2.6.8-0.7.20100201cvs.fc12和gcl-selinux.x86_640:2.6.8-0.7.20100201cvs.fc12(稍后詳細(xì)討論),并判斷出總下載大小。按“y”同意之后,它下載這兩個(gè)包,然后安裝依賴包,最后安裝gcl。在本文后面會(huì)進(jìn)一步討論依賴關(guān)系。包的位置在前一節(jié)中,學(xué)習(xí)了如何安裝RPM包。但是,包來(lái)自什么地方呢?yum如何知道從哪里下載包?起點(diǎn)是/etc/yum.repos.d/目錄,這個(gè)目錄常常包含幾個(gè)repo文件。這是repo的默認(rèn)位置,但是可以在YUM配置文件(通常是/etc/yum.conf)中指定其他位置。清單4給出fedora-updates.repo,我們從它所對(duì)應(yīng)的位置獲取gcl并安裝在我的Fedora12系統(tǒng)上。典型的repo文件分為三個(gè)部分,一個(gè)用于一般的包,一個(gè)用于調(diào)試包,最后一個(gè)用于源代碼包。常??梢詮牟煌奈恢茫寸R像)獲取發(fā)行版的包拷貝。所以repo文件告訴yum在哪里可以找到每個(gè)部分的最新鏡像列表。注意,發(fā)行版的發(fā)布級(jí)別和機(jī)器架構(gòu)表示為參數(shù),所以對(duì)于我的x86_64Fedora12系統(tǒng),yum會(huì)從/metalink?repo=updates-released-f12&arch=x86_64下載列表。除了存儲(chǔ)庫(kù)位置之外,repo文件還指出某個(gè)存儲(chǔ)庫(kù)是否啟用了,以及是否應(yīng)該使用GPG簽名檢查下載的包。清單4.fedora-updates.repo[ian@echidna~]$cat/etc/yum.repos.d/fedora-updates.repo[updates]name=Fedora$releasever-$basearch-Updatesfailovermethod=priority#baseurl=/pub/fedora/linux/updates/$releasever/$basearch/mirrorlist=/metalink?repo=updates-released-f$releasever&arch=$basearchenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch[updates-debuginfo]name=Fedora$releasever-$basearch-Updates-Debugfailovermethod=priority#baseurl=/pub/fedora/linux/updates/$releasever/$basearch/debug/mirrorlist=/metalink?repo=updates-released-debug-f$releasever&arch=$basearchenabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch[updates-source]name=Fedora$releasever-UpdatesSourcefailovermethod=priority#baseurl=/pub/fedora/linux/updates/$releasever/SRPMS/mirrorlist=/metalink?repo=updates-released-source-f$releasever&arch=$basearchenabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearchYUM和RPM使用本地?cái)?shù)據(jù)庫(kù)判斷安裝的包。本地?cái)?shù)據(jù)庫(kù)中存儲(chǔ)的包元數(shù)據(jù)是從啟用的存儲(chǔ)庫(kù)獲取的。盡管很少需要為本地?cái)?shù)據(jù)庫(kù)操心,但是可以使用yum
clean命令清除本地存儲(chǔ)的信息的不同部分,使用yum
makecache在本地?cái)?shù)據(jù)庫(kù)中為啟用的repo創(chuàng)建信息。例如,如果修改了repo配置,就可能需要這么做。刪除RPM包如果要?jiǎng)h除包,可以使用yum的remove選項(xiàng)或rpm的-e選項(xiàng)。使用rpm
-e刪除gcl的試運(yùn)行見清單5。如果可以刪除這個(gè)包,就不會(huì)有輸出。清單5.試刪除gcl[root@echidna~]#rpm-e--testgcl與使用apt-get模擬刪除Debian包不同,RPM系統(tǒng)并不維護(hù)自動(dòng)安裝的包的相關(guān)信息,所以無(wú)法通過(guò)試刪除查明哪些依賴包也可以刪除。但是,如果在單一命令中指定多個(gè)要?jiǎng)h除的包,那么沒有依賴關(guān)系的包會(huì)先于有依賴關(guān)系的包刪除。與安裝包不同,當(dāng)使用rpm刪除包時(shí),在刪除包之前沒有提示。但是,如果試圖刪除其他包需要的包,它不會(huì)執(zhí)行刪除操作,您會(huì)看到清單6所示的錯(cuò)誤消息。清單6.用rpm刪除依賴包[root@echidna~]#rpm-egcl-selinuxerror:Faileddependencies:gcl-selinuxisneededby(installed)gcl-2.6.8-0.7.20100201cvs.fc12.x86_64如果使用yum
remove,在執(zhí)行事務(wù)測(cè)試之后會(huì)顯示提示。如果試圖刪除的包是其他已安裝包的依賴包,YUM會(huì)提議刪除這些包和依賴包,見清單7。清單7.用yum刪除依賴包[root@echidna~]#yumremovegcl-selinuxLoadedplugins:presto,refresh-packagekitSettingupRemoveProcessResolvingDependencies-->Runningtransactioncheck--->Packagegcl-selinux.x86_640:2.6.8-0.7.20100201cvs.fc12settobeerased-->ProcessingDependency:gcl-selinuxforpackage:gcl-2.6.8-0.7.20100201cvs.fc12.x86_64-->Runningtransactioncheck--->Packagegcl.x86_640:2.6.8-0.7.20100201cvs.fc12settobeerased-->FinishedDependencyResolutionDependenciesResolved=====================================================================================PackageArchVersionRepositorySize=====================================================================================Removing:gcl-selinuxx86_642.6.8-0.7.20100201cvs.fc12@updates90kRemovingfordependencies:gclx86_642.6.8-0.7.20100201cvs.fc12@updates40MTransactionSummary=====================================================================================Remove2Package(s)Reinstall0Package(s)Downgrade0Package(s)Isthisok[y/N]:nExitingonuserCommandComplete!升級(jí)RPM包既然已經(jīng)了解了如何安裝和刪除RPM,我們來(lái)看看如何把RPM包升級(jí)到更高級(jí)別??梢允褂脃um
update更新整個(gè)系統(tǒng),還可以指定單一包或通配符。清單8說(shuō)明如何更新所有名稱以“gr”開頭的包。注意,這里使用撇號(hào)防止shell展開“*”。清單8.使用yumupdate執(zhí)行更新[root@echidna~]#yumupdate'gr*'Loadedplugins:presto,refresh-packagekitSettingupUpdateProcessResolvingDependencies-->Runningtransactioncheck--->Packagegrep.x86_640:2.6.3-1.fc12settobeupdated--->Packagegroff.x86_640:-20.fc12settobeupdated-->FinishedDependencyResolutionDependenciesResolved=====================================================================================PackageArchVersionRepositorySize=====================================================================================Updating:grepx86_642.6.3-1.fc12updates228kgroffx86_64-20.fc12updates1.5MTransactionSummary=====================================================================================Install0Package(s)Upgrade2Package(s)Totaldownloadsize:1.7MIsthisok[y/N]:yDownloadingPackages:SettingupandreadingPrestodeltametadataProcessingdeltametadataDownloaddeltasize:854k/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm:[Errno14]HTTPError404:/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpmTryingothermirror.(1/2):grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm|214kB00:00(2/2):groff--18.fc12_-20.fc12.x86_64.drpm|640kB00:00Finishingrebuildofrpms,fromdeltarpms<deltarebuild>|1.7MB00:02Prestoreducedtheupdatesizeby52%(from1.7Mto854k).Runningrpm_check_debugRunningTransactionTestTransactionTestSucceededRunningTransactionUpdating:grep-2.6.3-1.fc12.x86_641/4Updating:groff--20.fc12.x86_642/4Cleanup:grep-2.5.3-6.fc12.x86_643/4Cleanup:groff--18.fc12.x86_644/4Updated:grep.x86_640:2.6.3-1.fc12groff.x86_640:-20.fc12Complete!如果知道RPM文件的位置,或者已經(jīng)下載了它們,那么也可以使用rpm命令執(zhí)行更新。這與安裝相似,只是要使用-U或-F選項(xiàng)而不是-i選項(xiàng)。這兩個(gè)選項(xiàng)的差異是,-U選項(xiàng)更新現(xiàn)有的包,如果這個(gè)包還沒有安裝,就安裝它;而-F選項(xiàng)只升級(jí)或刷新已經(jīng)安裝的包。因此,經(jīng)常使用-U選項(xiàng),尤其是在命令行包含RPM列表的情況下。這樣的話,就會(huì)安裝未安裝的包,升級(jí)已經(jīng)安裝的包。常常使用另外兩個(gè)選項(xiàng)-v(詳細(xì))和-h(#標(biāo)志)提供進(jìn)度顯示。清單9說(shuō)明如何使用rpm命令更新vim-common、vim-enhanced和vim-minimal包。我們已經(jīng)把vim-common和vim-enhanced包下載到根用戶的主目錄中,而vim-minimal包要從一個(gè)更新鏡像獲取。清單9.用rpm更新包[root@echidna~]#ls*.rpmvim-common-7.2.411-1.fc12.x86_64.rpmvim-enhanced-7.2.411-1.fc12.x86_64.rpm[root@echidna~]#rpm-Uvh*.rpm/pub/linux/distributions\>/fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpmRetrieving/pub/linux/distributions/fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpmPreparing...###########################################[100%]1:vim-common###########################################[33%]2:vim-enhanced###########################################[67%]3:vim-minimal###########################################[100%]查詢RPM包您在前面的示例中看到,用rpm命令安裝rpm需要包文件的完整名稱(或URL),比如gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm。另一方面,用yum安裝或用這兩個(gè)命令刪除rpm只需要包名,比如gcl。與APT一樣,RPM在內(nèi)部數(shù)據(jù)庫(kù)中維護(hù)安裝的包的信息,因此允許使用包名操作安裝的包。在本節(jié)中,看看可以使用rpm的-q(代表查詢)選項(xiàng)或相關(guān)聯(lián)的yum查詢從數(shù)據(jù)庫(kù)獲取的一些信息?;静樵冎粰z查包是否已經(jīng)安裝了,如果安裝了,就查詢版本。增加-i選項(xiàng)會(huì)得到包的相關(guān)信息。注意,安裝、升級(jí)或刪除包需要根權(quán)力,但是非根用戶也可以查詢r(jià)pm數(shù)據(jù)庫(kù)。清單10.顯示gcl的相關(guān)信息[ian@echidna~]$yumlistgclLoadedplugins:presto,refresh-packagekitInstalledPackagesgcl.x86_642.6.8-0.7.20100201cvs.fc12@updates[ian@echidna~]$rpm-qgclgcl-2.6.8-0.7.20100201cvs.fc12.x86_64[ian@echidna~]$yuminfogclLoadedplugins:presto,refresh-packagekitInstalledPackagesName:gclArch:x86_64Version:2.6.8Release:0.7.20100201cvs.fc12Size:40MRepo:installedFromrepo:updatesSummary:GNUCommonLispURL:/software/gcl/License:GPL+andLGPLv2+Description:GCLisaCommonLispcurrentlycompliantwiththeANSIstandard.:Lispcompilationproducesnativecodethroughtheintermediaryof:thesystem'sCcompiler,fromwhichGCLderivesefficient:performanceandfacileportability.CurrentlyusesTCL/TkasGUI.[ian@echidna~]$rpm-qigclName:gclRelocations:(notrelocatable)Version:2.6.8Vendor:FedoraProjectRelease:0.7.20100201cvs.fc12BuildDate:Tue23Mar201003:20:36PMEDTInstallDate:Wed05May201001:01:34PMEDTBuildHost:Group:Development/LanguagesSourceRPM:gcl-2.6.8-0.7.20100201cvs.fc12.src.rpmSize:41667750License:GPL+andLGPLv2+Signature:RSA/8,Tue23Mar201004:14:06PMEDT,KeyID9d1cc34857bbccbaPackager:FedoraProjectURL:/software/gcl/Summary:GNUCommonLispDescription:GCLisaCommonLispcurrentlycompliantwiththeANSIstandard.Lispcompilationproducesnativecodethroughtheintermediaryofthesystem'sCcompiler,fromwhichGCLderivesefficientperformanceandfacileportability.CurrentlyusesTCL/TkasGUI.詳細(xì)的清單顯示與RPM包相關(guān)聯(lián)的一些標(biāo)記。注意,rpm和yum以不同的格式顯示不同的信息。在本文中,我們都使用標(biāo)準(zhǔn)命令選項(xiàng)提供的基本輸出。如果希望使用rpm
--queryformat選項(xiàng)定制查詢輸出,請(qǐng)參考手冊(cè)頁(yè)。如果希望了解您的rpm版本支持的所有標(biāo)記,應(yīng)該運(yùn)行rpm
--querytags。如清單10所示,可以使用yum列出安裝的包。還可以用它列出有更新可用的包、可以安裝的包以及具有其他性質(zhì)的包,比如廢棄的包或存儲(chǔ)庫(kù)中最近添加的包。甚至可以使用yum搜索包。在清單11中可以看到,texmacs包還沒有安裝,但是可以從fedora存儲(chǔ)庫(kù)獲取它。如果搜索“texmacs”,會(huì)看到提到它的四個(gè)包。很容易看出為什么會(huì)找到TeXmacs*包。使用yum
info
pydot查明為什么也會(huì)找到pydot包。清單11.搜索"texmacs"[ian@echidna~]$yumlisttexmacsLoadedplugins:presto,refresh-packagekitAvailablePackagesTeXmacs.x86_64-2.fc12fedora[ian@echidna~]$yumsearchtexmacsLoadedplugins:presto,refresh-packagekit=================================Matched:texmacs==================================TeXmacs-devel.i686:DevelopmentfilesforTeXmacsTeXmacs-devel.x86_64:DevelopmentfilesforTeXmacsTeXmacs.x86_64:Structuredwysiwygscientifictexteditorpydot.noarch:PythoninterfacetoGraphviz'sDotlanguage對(duì)于后面的查詢示例,我們主要使用rpm,因?yàn)樗倪x項(xiàng)更豐富。許多示例也可以使用yum完成,yum有一些基本rpm選項(xiàng)不具備的功能。RPM包和其中的文件用戶常常希望知道一個(gè)包中有哪些文件,或者某個(gè)文件來(lái)自哪個(gè)包。使用-ql選項(xiàng)列出gcl包中的文件,見清單12。這個(gè)包中有許多文件,所以這里只給出部分輸出。清單12.顯示gcl包中的文件[ian@echidna~]$rpm-qlgcl/usr/bin/gcl/usr/lib/gcl-2.6.8/usr/lib/gcl-2.6.8/clcs/usr/lib/gcl-2.6.8/clcs/sys-proclaim.lisp/usr/lib/gcl-2.6.8/cmpnew/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpmain.lsp/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpopt.lsp/usr/lib/gcl-2.6.8/cmpnew/gcl_collectfn.lsp.../usr/share/info/.gz/usr/share/info/-1.gz/usr/share/info/-2.gz/usr/share/info/-3.gz/usr/share/info/-4.gz/usr/share/info/-5.gz/usr/share/info/-6.gz/usr/share/info/-7.gz/usr/share/info/-8.gz/usr/share/info/-9.gz/usr/share/info/.gz/usr/share/man/man1/gcl.1.gz通過(guò)在查詢中添加-c選項(xiàng),可以把列出的文件限制為配置文件。-d選項(xiàng)把輸出限制為文檔文件。查詢包文件上面的包查詢命令在RPM數(shù)據(jù)庫(kù)中查詢已經(jīng)安裝的包。如果剛下載了一個(gè)包,想獲取同類信息,可以在查詢中使用-p(代表包文件)選項(xiàng)并指定包的文件名(與安裝包時(shí)一樣)。清單13顯示前面下載的兩個(gè)vim包的信息。我們只作為根用戶運(yùn)行它,因?yàn)槲募诟脩舻闹髂夸浿???梢蕴砑悠渌樵冞x項(xiàng),比如用-l列出文件,用-i列出信息。清單13.顯示兩個(gè)vim包的包文件信息[root@echidna~]#rpm-qp*.rpmvim-common-7.2.411-1.fc12.x86_64vim-enhanced-7.2.411-1.fc12.x86_64查詢安裝的所有包-a選項(xiàng)把查詢應(yīng)用于安裝的所有包。這會(huì)生成許多輸出,所以通常同時(shí)使用一個(gè)或多個(gè)篩選器,比如用sort進(jìn)行排序,用more或less進(jìn)行分頁(yè)輸出,用wc獲取包或文件內(nèi)容,用grep搜索您不確定名稱的包。清單14給出以下查詢:系統(tǒng)上所有包的排序列表系統(tǒng)上所有包的數(shù)量系統(tǒng)上所有包中的所有文件的數(shù)量用RPM安裝的所有文檔文件的數(shù)量搜索名稱中包含“gcl”的所有包(區(qū)分大小寫)清單14.對(duì)所有包執(zhí)行查詢[ian@echidna~]$rpm-qa|sort|moreaalib-libs-1.4.0-0.18.rc5.fc12.x86_64abrt-1.0.8-2.fc12.x86_64abrt-addon-ccpp-1.0.8-2.fc12.x86_64abrt-addon-kerneloops-1.0.8-2.fc12.x86_64abrt-addon-python-1.0.8-2.fc12.x86_64abrt-desktop-1.0.8-2.fc12.x86_64abrt-gui-1.0.8-2.fc12.x86_64abrt-libs-1.0.8-2.fc12.x86_64abrt-plugin-bugzilla-1.0.8-2.fc12.x86_64abrt-plugin-logger-1.0.8-2.fc12.x86_64abrt-plugin-runapp-1.0.8-2.fc12.x86_64abyssinica-fonts-1.0-5.fc12.noarchacl-2.2.49-2.fc12.x86_64...[ian@echidna~]$rpm-qa|wc-l1792[ian@echidna~]$rpm-qal|wc-l281052[ian@echidna~]$rpm-qad|wc-l45686[ian@echidna~]$rpm-qa|grep-igclgcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64gcl-2.6.8-0.7.20100201cvs.fc12.x86_64使用rpm-qa可以簡(jiǎn)化對(duì)多個(gè)系統(tǒng)的管理。如果把排序的輸出重定向到一臺(tái)機(jī)器上的文件,然后在另一臺(tái)機(jī)器上也這么做,就可以使用diff程序?qū)ふ也町?。哪個(gè)包包含某一文件?既然可以列出所有包和一個(gè)包中的所有文件,現(xiàn)在就掌握了查明哪個(gè)包包含某一文件所需的所有信息。但是,rpm命令的-f(或--file)選項(xiàng)可以幫助找到包含某一文件的包。假設(shè)您想知道前面看到的哪個(gè)vim包提供vim命令。您需要文件的完整路徑。清單15說(shuō)明如何使用which命令得到vim命令的完整路徑,可以使用這個(gè)輸出作為rpm-qf命令的輸入。注意,`whichguile-config`前后的符號(hào)是反撇號(hào)。在Bashshell中,另一種使用方法是$(whichvim)。清單15.哪個(gè)包提供vim可執(zhí)行文件[ian@echidna~]$whichvim/usr/bin/vim[ian@echidna~]$rpm-qf`whichvim`vim-enhanced-7.2.411-1.fc12.x86_64[ian@echidna~]$rpm-qf$(whichvim)vim-enhanced-7.2.411-1.fc12.x86_64RPM依賴關(guān)系在前面看到刪除gcl-selinux包的操作失敗了,這是因?yàn)榇嬖谝蕾囮P(guān)系。除了文件之外,RPM包可能包含其他包所依賴的任意功能。如您所見,依賴關(guān)系通常會(huì)正常發(fā)揮作用。如果需要同時(shí)安裝幾個(gè)包,其中一些依賴于其他包,那么只需使用yum,或者向rpm-Uvh命令提供完整的列表,它會(huì)分析依賴關(guān)系并按正確的次序執(zhí)行安裝。除了在安裝或刪除包時(shí)產(chǎn)生的錯(cuò)誤消息之外,還可以通過(guò)幾種方法查明包需要或依賴的文件或功能。rpm命令提供的一個(gè)選項(xiàng)可以查詢安裝的包或包文件,從而查明它們依賴或需要什么功能。這個(gè)選項(xiàng)是--requires,它可以簡(jiǎn)寫為-R。清單16顯示gcl需要的功能。如果要查詢包文件而不是RPM數(shù)據(jù)庫(kù),那么添加-p選項(xiàng)并使用完整的RPM文件名。清單16.gcl需要什么[ian@echidna~]$rpm-qRgcl/bin/sh/bin/sh/bin/sh/sbin/install-info/sbin/install-infogcl-selinuxlibX11.so.6()(64bit)libc.so.6()(64bit)libc.so.6(GLIBC_2.11)(64bit)libc.so.6(GLIBC_2.2.5)(64bit)libc.so.6(GLIBC_2.3)(64bit)libc.so.6(GLIBC_2.3.4)(64bit)libc.so.6(GLIBC_2.4)(64bit)libc.so.6(GLIBC_2.7)(64bit)libc.so.6(GLIBC_2.8)(64bit)libdl.so.2()(64bit)libgmp.so.3()(64bit)libm.so.6()(64bit)libm.so.6(GLIBC_2.2.5)(64bit)libreadline.so.6()(64bit)libtcl8.5.so()(64bit)libtk8.5.so()(64bit)libz.so.1()(64bit)rpmlib(CompressedFileNames)<=3.0.4-1rpmlib(FileDigests)<=4.6.0-1rpmlib(PayloadFilesHavePrefix)<=4.0-1rtld(GNU_HASH)rpmlib(PayloadIsXz)<=5.2-1把功能與提供它們的包聯(lián)系起來(lái)不太容易。帶deplist選項(xiàng)的yum命令可以提供幫助。如果只指定包名,沒有版本號(hào),可能會(huì)得到其他已知版本的列表。清單17說(shuō)明如何獲得安裝的gcl版本的依賴列表。清單17.使用yumdeplist查明gcl需要什么[ian@echidna~]$yumdeplist$(rpm-qgcl)Loadedplugins:presto,refresh-packagekitFindingdependencies:package:gcl.x86_642.6.8-0.7.20100201cvs.fc12dependency:libc.so.6(GLIBC_2.3.4)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:gcl-selinuxprovider:gcl-selinux.x86_642.6.8-0.6.20090701cvs.fc12provider:gcl-selinux.x86_642.6.8-0.7.20100201cvs.fc12dependency:libgmp.so.3()(64bit)provider:gmp.x86_644.3.1-5.fc12dependency:libc.so.6(GLIBC_2.8)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libc.so.6(GLIBC_2.4)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libc.so.6()(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:/sbin/install-infoprovider:info.x86_644.13a-7.fc12provider:info.x86_644.13a-9.fc12dependency:libX11.so.6()(64bit)provider:libX11.x86_641.3-1.fc12dependency:libc.so.6(GLIBC_2.7)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libtcl8.5.so()(64bit)provider:tcl.x86_641:8.5.7-4.fc12provider:tcl.x86_641:8.5.7-5.fc12dependency:libc.so.6(GLIBC_2.11)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libtk8.5.so()(64bit)provider:tk.x86_641:8.5.7-2.fc12provider:tk.x86_641:8.5.7-3.fc12dependency:libc.so.6(GLIBC_2.3)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libm.so.6()(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libz.so.1()(64bit)provider:zlib.x86_641.2.3-23.fc12dependency:rtld(GNU_HASH)provider:glibc.i6862.11-2provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6provider:glibc.i6862.11.1-6dependency:libdl.so.2()(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libreadline.so.6()(64bit)provider:readline.x86_646.0-3.fc12dependency:/bin/shprovider:bash.x86_644.0.33-1.fc12provider:bash.x86_644.0.35-3.fc12dependency:libc.so.6(GLIBC_2.2.5)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6dependency:libm.so.6(GLIBC_2.2.5)(64bit)provider:glibc.x86_642.11-2provider:glibc.x86_642.11.1-6這個(gè)列表還顯示每個(gè)功能可能的提供者??梢钥吹酱蠖鄶?shù)依賴功能可以由多個(gè)包級(jí)別提供。例如,/bin/sh可以來(lái)自bash的兩個(gè)級(jí)別之一。通過(guò)使用創(chuàng)造性的篩選,可以把輸出縮減為清單18所示的包名列表。清單18.把yumdeplist的輸出縮減為只列出包名[ian@echidna~]$yumdeplist$(rpm-qgcl)|grep"provider:"|\>awk'{print$2}'|sort|uniqbash.x86_64gcl-selinux.x86_64glibc.i686glibc.x86_64gmp.x86_64info.x86_64libX11.x86_64readline.x86_64tcl.x86_64tk.x86_64zlib.x86_64如果只想知道需要安裝哪些包,可以運(yùn)行yum
install,查看在提示接受安裝提議之前顯示的列表。除了查明包需要的功能之外,還可能需要了解哪個(gè)包提供某一功能。前面演示了如何查明哪個(gè)包包含某一文件。清單19說(shuō)明如何使用rpm或yum查明哪個(gè)包提供gcl-selinux(x86-64)功能。除了顯示提供此功能的已安裝包的信息之外,YUM還顯示存儲(chǔ)庫(kù)中可用的包或版本??梢钥吹?,原來(lái)的2.6.8-0.6版來(lái)自fedora存儲(chǔ)庫(kù),而updates存儲(chǔ)庫(kù)中有更新的2.6.8-0.7版。清單19.哪個(gè)包提供gcl-selinux(x86-64)功能[ian@echidna~]$rpm-q--whatprovides'gcl-selinux(x86-64)'gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64[ian@echidna~]$yumwhatprovides'gcl-selinux(x86-64)'Loadedplugins:presto,refresh-packagekitgcl-selinux-2.6.8-0.6.20090701cvs.fc12.x86_64:SELinuxpolicyforGCLimagesRepo:fedoraMatchedfrom:Other:gcl-selinux(x86-64)gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64:SELinuxpolicyforGCLimagesRepo:updatesMatchedfrom:Other:gcl-selinux(x86-64)gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64:SELinuxpolicyforGCLimagesRepo:installedMatchedfrom:Other:Provides-match:gcl-selinux(x86-64)RPM包文件完整性為了確保完整性,RPM包包含一個(gè)摘要(比如MD5或SHA1),常常經(jīng)過(guò)數(shù)字簽名。數(shù)字簽名的包需要用公共密鑰進(jìn)行檢驗(yàn)。使用rpm的--checksig(簡(jiǎn)寫為-K)選項(xiàng)檢查RPM包文件的完整性。添加-v選項(xiàng)以生成更詳細(xì)的輸出常常有幫助。清單20給出的示例檢查vim-enhancedRPM的完整性。清單20.檢查vim-enhanced包文件的完整性[root@echidna~]#rpm-vKvim-enhanced-7.2.411-1.fc12.x86_64.rpmvim-enhanced-7.2.411-1.fc12.x86_64.rpm:HeaderV3RSA/SHA256signature:OK,keyID57bbccbaHeaderSHA1digest:OK(f9a199545a515f7ff0716729768b41eb68fe29a8)V3RSA/SHA256signature:OK,keyID57bbccbaMD5digest:OK(d4045f1f72d48073e3f401ee9d1f71cf)可能會(huì)產(chǎn)生下面的輸出:V3DSAsignature:NOKEY,keyID16a61572這意味著這個(gè)包是經(jīng)過(guò)簽名的,但是您的RPM數(shù)據(jù)庫(kù)中沒有所需的公共密鑰。注意,以前版本的RPM可能以不同的方式提供檢驗(yàn)。如果包是經(jīng)過(guò)簽名的,您希望根據(jù)簽名檢驗(yàn)它,就需要找到適當(dāng)?shù)暮灻募阉鼘?dǎo)入RPM數(shù)據(jù)庫(kù)。應(yīng)該首先下載密鑰,然后檢查它的指紋,最后使用rpm--import命令導(dǎo)入它。更多信息參見RPM手冊(cè)頁(yè)。還可以在RPM主頁(yè)上找到關(guān)于簽名的二進(jìn)制代碼的更多信息(見參考資料中的鏈接)。檢驗(yàn)安裝的包與檢查rpm的完整性一樣,還可以使用rpm-V檢查已安裝的文件的完整性。這個(gè)步驟確保從rpm安裝文件之后文件沒有修改過(guò)。如清單21所示,如果包仍然良好,這個(gè)命令沒有輸出;但是,可以添加-v選項(xiàng)以產(chǎn)生更詳細(xì)的輸出。清單21.檢驗(yàn)已安裝的vim-common包[ian@echidna~]$rpm-Vvim-common現(xiàn)在,我們作為根用戶刪除/usr/bin/xxd并把/usr/share/vim/vim72/syntax/bindzone.vim替換為/bin/bash。然后再次檢查。結(jié)果見清單22。清單22.篡改vim-common包[root@echidna~]#rpm-qf/usr/bin/xxd/usr/share/vim/vim72/syntax/bindzone.vimvim-common-7.2.411-1.fc12.x86_64vim-common-7.2.411-1.fc12.x86_64[root@echidna~]#rm/usr/bin/xxdrm:removeregularfile`/usr/bin/xxd'?y[root@echidna~]#cp/bin/bash/usr/share/vim/vim72/syntax/bindzone.vimcp:overwrite`/usr/share/vim/vim72/syntax/bindzone.vim'?y[root@echidna~]#rpm-Vvim-commonmissing/usr/bin/xxdS.5....T./usr/share/vim/vim72/syntax/bindzone.vim輸出表明對(duì)/usr/share/vim/vim72/syntax/bindzone.vim文件的MD5和、文件大小和mtime檢查失敗了。解決這個(gè)問(wèn)題的一種方法是刪除這個(gè)包,然后重新安裝,依賴于vim-common的其他已安裝包仍然可以正常運(yùn)行。這個(gè)解決方案使用rpm的--force選項(xiàng)或yum的reinstall功能強(qiáng)制重新安裝。清單23演示如何用yum重新安裝,然后檢查包現(xiàn)在是否良好,檢查刪除的文件是否已經(jīng)恢復(fù)了。清單23.重新安裝vim-common包[root@echidna~]#yumreinstallvim-commonLoadedplugins:presto,refresh-packagekitSettingupReinstallProcessResolvingDependencies-->Runningtransactioncheck--->Packagevim-common.x86_642:7.2.411-1.fc12settobeupdated-->FinishedDependencyResolutionDependenciesResolved=====================================================================================PackageArchVersionRepositorySize=====================================================================================Reinstalling:vim-commonx86_642:7.2.411-1.fc12updates6.0MTransactionSummary=====================================================================================Remove0Package(s)Reinstall1Package(s)Downgrade0Package(s)Totaldownloadsize:6.0MInstalledsize:17MIsthisok[y/N]:yDownloadingPackages:SettingupandreadingPrestodeltametadataupdates/prestodelta|969kB00:00ProcessingdeltametadataPackage(s)datastilltodownload:6.0Mvim-common-7.2.411-1.fc12.x86_64.rpm|6.0MB00:01Runningrpm_check_debugRunningTransactionTestTransactionTestSucceededRunningTransactionWarning:RPMDBalteredoutsideofyum.Installing:2:vim-common-7.2.411-1.fc12.x86_641/1Installed:vim-common.x86_642:7.2.411-1.fc12Complete![root@echidna~]#rpm-Vvim-common[root@echidna~]#ls/usr/bin/xxd/usr/bin/xxd如果需要更有力的措施包管理系統(tǒng)通??梢曰謴?fù)包。但是,如果刪除了包中的重要文件,重新安裝包但不刪除無(wú)法解決問(wèn)題,那么可能需要在重新安裝之前刪除包。對(duì)于這種情況,可能希望刪除現(xiàn)有的拷貝并重新安裝,但是不希望卸載和重新安裝依賴它的所有包。為此,在刪除包時(shí),可以使用rpm命令的--nodeps選項(xiàng)繞過(guò)依賴關(guān)系檢查。在清單24中,刪除了vim-common中的/usr/bin/xxd文件,然后演示如何恢復(fù)這個(gè)包。清單24.用rpm更新包[root@echidna~]#rm/usr/bin/xxdrm:removeregularfile`/usr/bin/xxd'?y[root@echidna~]##Oops!weneededthatfile[root@echidna~]#rpm-Fvhvim-common-7.2.411-1.fc12.x86_64.rpm[root@echidna~]#ls/usr/bin/xxdls:cannotaccess/usr/bin/xxd:Nosuchfileordirectory[root@echidna~]##Oh!Fresheningthepackagedidn'treplacethemissingfile[root@echidna~]#rpm-evim-commonerror:Faileddependencies:vim-common=2:7.2.411-1.fc12isneededby(installed)vim-enhanced-2:7.2.411-1.fc12.x86_64[root@echidna~]##Can'tremovevim-commonbecausevim-enhancedneedsit[root@echidna~]#rpm-e--nodepsvim-common[root@echidna~]##Bypassingthedependencycheckallowedremoval[root@echidna~]#rpm-Uvhvim-common-7.2.411-1.fc12.x86_64.rpmPreparing...###########################################[100%]1:vim-common###########################################[100%][root@echidna~]##Update(orinstall)vim-commonagain[root@echidna~]#ls/usr/bin/xxd/usr/bin/xxd[root@echidna~]##And/usr/bin/xxdisback現(xiàn)在,如果發(fā)生意外或一般的更新失敗,您可以以幾種方法更新或修復(fù)。注意,在安裝RPM時(shí)也可以繞過(guò)依賴關(guān)系檢查,但是這通常不是好做法。從存儲(chǔ)庫(kù)下載RPM盡管yum會(huì)自動(dòng)地從存儲(chǔ)庫(kù)獲取包,但是您可能希望下載并保存RPM,比如為了在不連網(wǎng)的系統(tǒng)上安裝它們、為了檢查它們的內(nèi)容或有其他原因??梢允褂们鍐?5所示的yumdownloader命令。對(duì)于我們的示例,這個(gè)包已經(jīng)安裝了,所以沒有要下載的包。如果有這樣的包,可以使用--resolve選項(xiàng)再次下載它們。清單25.下載gcl包[ian@echidna~]$yumdownloader--resolvegclLoadedplugins:presto,refresh-packagekitadobe-linux-i386
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度科技園區(qū)研發(fā)場(chǎng)地租賃合同范本下載3篇
- 《框架結(jié)構(gòu)荷載分析》課件
- 2024簡(jiǎn)單工程勞務(wù)合同范本
- 稅務(wù)業(yè)務(wù)知識(shí)培訓(xùn)課件
- 世紀(jì)生物醫(yī)藥研發(fā)與轉(zhuǎn)讓合同(04版)
- 個(gè)人住宅抵押貸款法律協(xié)議(2024版)版
- 2024版人力資源服務(wù)合同
- 2024年03月陜西中國(guó)銀行信息科技運(yùn)營(yíng)中心(西安)春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 二零二五年度餐飲行業(yè)員工福利保障合同3篇
- 2025年度新型裝配式彩鋼房拆除與改造施工合同范本4篇
- 人教版小學(xué)數(shù)學(xué)(2024)一年級(jí)下冊(cè)第一單元 認(rèn)識(shí)平面圖形綜合素養(yǎng)測(cè)評(píng) B卷(含答案)
- 企業(yè)年會(huì)攝影服務(wù)合同
- 電商運(yùn)營(yíng)管理制度
- 二零二五年度一手房購(gòu)房協(xié)議書(共有產(chǎn)權(quán)房購(gòu)房協(xié)議)3篇
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 城市公共交通運(yùn)營(yíng)協(xié)議
- 內(nèi)燃副司機(jī)晉升司機(jī)理論知識(shí)考試題及答案
- 2024北京東城初二(上)期末語(yǔ)文試卷及答案
- 2024設(shè)計(jì)院與職工勞動(dòng)合同書樣本
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 電工高級(jí)工練習(xí)題庫(kù)(附參考答案)
評(píng)論
0/150
提交評(píng)論