RPM(8) System Manager's Manual RPM(8) 名字 rpm - RPM 軟件包管理器 語法 查詢軟件包: rpm {-q|--query} [select-options] [query-options] 校驗軟件包: rpm {-V|--verify} [select-options] [verify-options] 安裝軟件包: rpm {-i|--install} [install-options] PACKAGE_FILE ... 升級軟件包: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 更新軟件包: rpm {-F|--freshen} [install-options] PACKAGE_FILE ... 卸載軟件包: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ... 其餘雜項: rpm {--querytags|--showrc} rpm {--setperms|--setugids} PACKAGE_NAME ... select-options [PACKAGE_NAME] [-a,--all] [-f,--file FILE] [-g,--group GROUP] [-p,--package PACKAGE_FILE] [--hdrid SHA1] [--pkgid MD5] [--tid TID] [--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME] [--whatprovides CAPABILITY] [--whatrequires CAPABILITY] query-options [--changelog] [-c,--configfiles] [--conflicts] [-d,--docfiles] [--dump] [--filesbypkg] [-i,--info] [--last] [-l,--list] [--obsoletes] [--provides] [--qf,--queryformat QUERYFMT] [-R,--requires] [--scripts] [-s,--state] [--triggers,--triggerscripts] verify-options [--nodeps] [--nofiles] [--noscripts] [--nodigest] [--nosignature] [--nolinkto] [--nofiledigest] [--nosize] [--nouser] [--nogroup] [--nomtime] [--nomode] [--nordev] [--nocaps] install-options [--allfiles] [--badreloc] [--excludepath OLDPATH] [--excludedocs] [--force] [-h,--hash] [--ignoresize] [--ignorearch] [--ignoreos] [--includedocs] [--justdb] [--nocollections] [--nodeps] [--nodigest] [--nosignature] [--noorder] [--noscripts] [--notriggers] [--oldpackage] [--percent] [--prefix NEWPATH] [--relocate OLDPATH=NEWPATH] [--replacefiles] [--replacepkgs] [--test] 描述 rpm 是一個強大的軟件包管理器,能夠用來構建、安裝、查詢、校驗、升級、卸載單獨的軟件包。 一個"包"包括文件的歸檔以及用來安裝和卸載歸檔中文件的元數據。 元數據包括輔助腳本、文件屬性、以及相關的描述性信息。 軟件包有兩種: 二進制包,用來封裝已經編譯好的二進制文件; 源代碼包,用來封裝源代碼和要構建二進制包須要的信息。 必須選擇下列"模式"之一: Query(查詢), Verify(校驗), Install/Upgrade/Freshen(安裝/升級/更新), Uninstall(卸載), Set Owners/Groups(設置屬主/屬組), Show Querytags(顯示查詢標記), Show Configuration(顯示配置) 通用選項 下列選項能夠用於全部不一樣的模式。 -?, --help 打印詳細的幫助信息 --version 打印一行詳細的版本號信息 --quiet 輸出儘量少的信息,一般只有錯誤信息纔會顯示出來。 -v 輸出冗餘信息,例如進度之類的信息。 -vv 輸出大量冗長的調試信息 --rcfile FILELIST FILELIST 中冒號分隔的每一個文件都被 rpm 按順序讀取,從中得到配置信息。 只有列表中的第一個文件必須存在,波浪線將被替換爲 $HOME 。默認值是: /usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:/etc/rpmrc:~/.rpmrc --pipe CMD 將 rpm 的輸出經過管道送到 CMD 命令。 --dbpath DIRECTORY 使用 DIRECTORY 中的數據庫,而不是默認的 /var/lib/rpm --root DIRECTORY 以 DIRECTORY 做爲根文件系統進行操做。這意味着將使用 DIRECTORY 中的數據庫來進行依賴性檢測, 而且任何操做(好比安裝時的 %post 和構建時的 %prep)都將 chroot 到 DIRECTORY 下執行。 -D, --define='MACRO EXPR' 將 MACRO 宏的值定義爲 EXPR --undefine='MACRO' 撤銷 MACRO 宏 -E, --eval='EXPR' 打印出值 EXPR 對應的宏 安裝/升級/更新選項 下列選項中的 PACKAGE_FILE 既能夠是二進制的 rpm 文件, 也能夠是 ASCII 格式的軟件包清單文件(manifest)(參見"包選擇選項")。 而且能夠指定爲 ftp 或 http 的 URL ,在這種狀況下,會在安裝或升級前自動下載指定的文件。 詳見"FTP/HTTP 選項"以瞭解 rpm 內部對 ftp 與 http 客戶端的支持。 安裝一個新軟件包的通常形式是: rpm {-i|--install} [install-options] PACKAGE_FILE ... 安裝或升級軟件包到新版本[與安裝相似,只是全部其餘版本都將被移除]: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 更新軟件包到新版本[僅當系統中確實存在老版本時,纔會升級軟件包,不然什麼也不作]: rpm {-F|--freshen} [install-options] PACKAGE_FILE ... [注意]下文中只要提到"升級",就同時包含了"更新"在內。也就是說"更新"只是"升級"的一種特例。 --allfiles 安裝或升級軟件包中全部文件,即便它們可能應該被跳過。 --badreloc 與 --relocate 搭配使用,容許從新定位全部文件的路徑, 而不只僅是二進制包中重定位提示(hint)包含的那些 OLDPATH 。 --excludepath OLDPATH 不安裝名字以 OLDPATH 開頭的文件。 --excludedocs 不安裝任何被標記爲文檔的文件(包括手冊頁和 texinfo)。 --force 與同時使用 --replacepkgs, --replacefiles, --oldpackage 的效果相同。 -h, --hash 在包被解壓時,輸出50個井號(#),與 -v|--verbose 配合使用,獲得漂亮一點的輸出。 --ignoresize 安裝前不檢查已掛載文件系統的空閒空間是否夠用。 --ignorearch 容許安裝或升級,即便二進制包的硬件架構與主機不匹配。 --ignoreos 容許安裝或升級,即便二進制包的操做系統與主機不匹配。 --includedocs 安裝文檔文件。這是默認行爲。 --justdb 只更新數據庫,而不更新文件系統。 --nodigest 讀取時不校驗包或頭部的摘要信息。 --nomanifest 不將非包文件(non-package file)當作軟件包清單文件(manifest)處理。 --nosignature 讀取時不校驗包或頭部的簽名。 --nodeps 在安裝或升級前,不進行依賴性檢測。 --noorder 不爲安裝重排序。一般軟件包列表會被重排序,以知足依賴關係。 --noscripts --nopre --nopost --nopreun --nopostun 不執行對應的程序/腳本。 單獨的一個 --noscripts 等價於同時使用 --nopre --nopost --nopreun --nopostun 的組合。 它將會把 %pre, %post, %preun, %postun 段對應的程序/腳本所有關閉。 --notriggers --notriggerin --notriggerun --notriggerprein --notriggerpostun 不執行任何對應的觸發程序/腳本。 單獨的一個 --notriggers 等價於同時使用 --notriggerprein --notriggerin --notriggerun --notriggerpostun 的組合。 它將會把 %triggerprein, %triggerin, %triggerun, %triggerpostun 段對應的程序/腳本所有關閉。 --oldpackage 容許用舊軟件包替換新軟件包。 --percent 打印從軟件包中解壓文件的百分比。這是爲了使 rpm 在其餘工具中運行時更簡單一些。 --prefix NEWPATH 對於可重定位的包,將把軟件包重定位提示中全部以安裝前綴(prefix)開頭的文件路徑轉換爲以 NEWPATH 開頭。 --relocate OLDPATH=NEWPATH 對於可重定位的二進制包,將軟件包重定位提示中全部以 OLDPATH 開頭的文件路徑轉換爲以 NEWPATH 開頭。 若是軟件包中有多個 OLDPATH 要重定位的話,這一選項可使用屢次。 --replacefiles 強制安裝軟件包,即便它將覆蓋其餘已安裝軟件包的文件。 --replacepkgs 強制安裝軟件包,即便其中有些軟件包已經被安裝到了系統中。 --test 不安裝軟件包,僅僅檢測並報告可能的衝突。 卸載選項 卸載命令的通常形式是 rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ... 同時還能夠用下列選項: --allmatches 刪除匹配 PACKAGE_NAME 的軟件包的全部版本。 默認狀況下,若是 PACKAGE_NAME 匹配多個軟件包將致使錯誤。 --nodeps 在卸載前不檢測依賴關係。 --noscripts --nopreun --nopostun 不執行對應的程序/腳本。 單獨的一個 --noscripts 等價於同時使用 --nopreun --nopostun 的組合。 它將會把 %preun, %postun 段對應的程序/腳本所有關閉。 --notriggers --notriggerun --notriggerpostun 不執行任何對應的觸發程序/腳本。 單獨的一個 --notriggers 等價於同時使用 --notriggerun --notriggerpostun 的組合。 它將會把 %triggerun, %triggerpostun 段對應的程序/腳本所有關閉。 --test 並不真正卸載任何東西,僅僅嘗試它們。與 -vv 選項聯合使用,在調試時頗有用。 查詢選項 查詢命令的通常形式是 rpm {-q|--query} [select-options] [query-options] 還可使用下面的選項指定軟件包信息的輸出格式: --qf|--queryformat QUERYFMT QUERYFMT 是格式字符串,是標準的 printf(3) 格式的修改版本。 格式包括靜態字符串(包括標準的C語言轉義字符、新行符、跳格以及其餘特殊字符)以及 printf(3) 類型標記。 由於 rpm 已知輸出類型,因此應當忽略類型標記,轉而使用包含在 {} 中的頭部標記名來代替。 標記名是大小寫無關的,而且標記名中以 RPMTAG_ 開頭的部分能夠被忽略。 可選的輸出格式可使用":tag"這樣格式的標記表示。當前支持的標記以下: :armor 以 ASCII 形式編碼的公鑰 :arraysize 在數組標記中顯示單元數目 :base64 使用 base64 編碼二進制數據 :date 使用 strftime(3) 的 "%c" 格式 :day 使用 strftime(3) 的 "%a %b %d %Y" 格式 :depflags 格式化依賴比較操做符 :deptype 格式化依賴類型 :expand 對宏進行展開 :fflags 格式化文件標記 :fstate 格式化文件狀態 :fstatus 格式化文件校驗狀態 :hex 以16進制格式化 :octal 以八進制格式化 :perms 格式化文件權限 :pgpsig 顯示簽名指紋和時間 :shescape 對單引號進行轉義(爲了能夠在腳本中使用) :triggertype 顯示觸發器後綴 :vflags 文件校驗標記 :xml 以 XML 格式編碼數據 例如,只輸出所查詢的軟件包的名稱,可使用 %{NAME} 做爲格式化字符串。 要分兩列輸出軟件包名稱和發行版信息,能夠用 %-30{NAME}%{DISTRIBUTION} 若是使用 --querytags 參數,rpm 將輸出它已知的全部標記列表。 查詢的選項有兩個子集:選擇選項和查詢選項。 包選擇選項[子集1] PACKAGE_NAME 查詢名稱爲 PACKAGE_NAME 的已安裝軟件包 -a, --all 查詢全部已安裝的軟件包 -f, --file FILE 查詢 FILE 所屬的軟件包 -g, --group GROUP 查詢屬組爲 GROUP 的軟件包 --hdrid SHA1 查詢包含特定頭部標識符的軟件包。也就是不可變頭部區域的 SHA1 摘要信息。 -p, --package PACKAGE_FILE 查詢未安裝的軟件包(PACKAGE_FILE)。 若是 PACKAGE_FILE 是一個 ftp/http 協議的 URL ,軟件包頭部將被下載並查詢。 詳見"FTP/HTTP 選項"以瞭解 rpm 內部對 ftp 與 http 客戶端的支持。 若是 PACKAGE_FILE 不是二進制文件,那麼將被看成 ASCII 格式的軟件包清單文件(除非使用了 --nomanifest 選項)。 清單文件中以'#'開頭的是註釋行,其餘每行均可以包含以空格分隔的 glob 表達式(包括 URL), 這些 glob 表達式將被擴展爲路徑,取代軟件包清單文件,做爲查詢的附加 PACKAGE_FILE 參數。 --pkgid MD5 查詢含有特定標識符的軟件包。也就是包的頭部以及有效內容的 MD5 摘要信息。 --querybynumber HDRNUM 直接查詢第 HDRNUM 個數據庫入口,僅用於調試。 --specfile SPECFILE 解析並查詢 SPECFILE ,就好像它是一個軟件包。儘管並不是全部信息均可得到(好比文件清單), 但這種查詢容許 rpm 從 spec 文件中抽取信息,而沒必要本身再去寫一個解析器。 --tid TID 查詢包含給定 TID 事務標識符的軟件包。當前使用 unix 時間戳做爲事務標識符。 任何在一次事務中安裝或卸載的軟件包都擁有相同的標識符。 --triggeredby PACKAGE_NAME 查詢被軟件包 PACKAGE_NAME 觸發的軟件包。 --whatprovides CAPABILITY 查詢提供了 CAPABILITY 功能的軟件包。 --whatrequires CAPABILITY 查詢全部須要 CAPABILITY 功能才能運行的軟件包。 包查詢選項[子集2] --changelog 顯示軟件包的變動信息 -c, --configfiles 只顯示配置文件(隱含 -l) --conflicts 顯示此軟件包與哪些功能有衝突 -d, --docfiles 只顯示文檔文件(隱含 -l) --dump 轉儲文件下列信息(隱含 -l):path size mtime digest mode owner group isconfig isdoc rdev symlink --filesbypkg 列出每一個所選軟件包中的文件 -i, --info 顯示軟件包信息,包括名稱、版本、描述。 若是同時還使用了 --queryformat 選項,那麼就按照它指定的格式顯示。 --last 列出軟件包時以安裝時間排序,最新的在上面。 -L, --licensefiles 只顯示許可證文件(隱含 -l) -l, --list 列出軟件包中的文件 --obsoletes 列出被此軟件包廢棄的軟件包 --provides 列出軟件包提供的功能 -R, --requires 列出此軟件包所依賴的功能(一般是一個軟件包) --scripts 列出軟件包自定義的小程序/腳本,他們是安裝和卸載等過程的一部分。 -s, --state 顯示軟件包中文件的狀態(隱含 -l)。狀態是 normal, not installed, replaced 之一。 --triggers, --triggerscripts 顯示軟件包中包含的觸發腳本,若是有的話。 校驗選項 校驗命令的通常形式是 rpm {-V|--verify} [select-options] [verify-options] 校驗軟件包,是指將已安裝的文件信息與保存在 rpm 數據庫中的元數據(來自於rpm包)進行比較。 校驗將會比較每一個文件的大小、摘要信息(哈希值)、權限、類型、屬主與屬組。任何不一致的地方都將被顯示出來。 軟件包中未安裝的文件(例如在安裝過程當中使用"--excludedocs"跳過的文檔),將被忽略。 軟件包的選擇選項與軟件包查詢選項是相同的(包括以清單文件做爲參數)。其餘獨有的選項包括: --nodeps 不校驗軟件包的依賴關係 --nodigest 讀取時不校驗軟件包或頭部的摘要信息(哈希值) --nofiles 不校驗文件的任何屬性 --noscripts 不執行 %verifyscript 小程序/腳本(若是有的話)。 --nosignature 讀取時不校驗軟件包或頭部簽名 --nolinkto --nofiledigest (之前是 --nomd5) --nosize --nouser --nogroup --nomtime --nomode --nordev 不校驗相應的文件屬性 輸出是9個字符的字符串,可能的屬性標記爲: c %config 配置文件 d %doc 文檔文件 g %ghost 佔位文件,也就是文件內容不包含在軟件包有效內容裏面 l %license 許可證文件 r %readme 說明文件 從頭部開始,接下來是文件名,每9個字符表示將文件屬性與數據庫中記錄的值進行比較的結果。 一個單獨的"."表示測試經過了,一個單獨的"?"表示測試可能沒法進行(例如,文件禁止了讀權限)。 最後,粗體的字母表示相應的 --verify 測試失敗了: S 大小不一致 M 模式不一致(包括權限和文件類型) 5 MD5校驗和不一致 D 主/次設備號不匹配 L readLink(2) 路徑不匹配 U User 屬主不一致 G Group 屬組不一致 T mTime 不一致 P 功能不一致 雜項命令 rpm --showrc 顯示 rpm 使用的、在 rpmrc 和 macros 配置文件中定義的選項的值。 rpm --setperms PACKAGE_NAME 設置 PACKAGE_NAME 軟件包中的文件權限 rpm --setugids PACKAGE_NAME 設置 PACKAGE_NAME 軟件包中的屬主/屬組 FTP/HTTP 選項 rpm 內置 FTP/HTTP 客戶端,能夠查詢或安裝互聯網上的軟件包。 能夠安裝、升級、查詢用 URL 指定的軟件包文件,好比: ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm 若是省略 :PASSWORD 部分,將爲每一個用戶名/主機對提示一次密碼。 若是忽略了用戶名和密碼,將使用匿名FTP。在全部狀況下,都會使用被動FTP(PSAV)。 rpm 容許在使用 ftp URL 時使用下面的選項: --ftpproxy HOST 使用主機 HOST 做爲全部 FTP 傳輸的代理服務器,容許經過防火牆代理訪問 FTP 。 這個選項也能夠用宏 %_ftpproxy 指定。 --ftpport PORT 鏈接到 FTP 代理服務器的 PORT 端口,而不是默認端口。 這個選項也能夠用宏 %_ftpport 指定。 rpm 容許在使用 http URL 時使用下面的選項: --httpproxy HOST 使用主機 HOST 做爲全部 HTTP 傳輸的代理服務器,容許經過防火牆代理訪問 HTTP 。 這個選項也能夠用宏 %_httpproxy 指定。 --httpport PORT 鏈接到 HTTP 代理服務器的 PORT 端口,而不是默認端口。 這個選項也能夠用宏 %_httpport 指定。 歷史遺留問題 執行 rpmbuild rpm "構建模式"以被移至 /usr/bin/rpmbuild 可執行文件中。 請參見 rpmbuild(8) 文檔瞭解詳情。 文件 rpmrc 配置文件 /usr/lib/rpm/rpmrc /usr/lib/rpm/redhat/rpmrc /etc/rpmrc ~/.rpmrc Macro 配置文件 /usr/lib/rpm/macros /usr/lib/rpm/redhat/macros /etc/rpm/macros ~/.rpmmacros 數據庫 /var/lib/rpm/Basenames /var/lib/rpm/Conflictname /var/lib/rpm/Dirnames /var/lib/rpm/Group /var/lib/rpm/Installtid /var/lib/rpm/Name /var/lib/rpm/Obsoletename /var/lib/rpm/Packages /var/lib/rpm/Providename /var/lib/rpm/Requirename /var/lib/rpm/Sha1header /var/lib/rpm/Sigmd5 /var/lib/rpm/Triggername 臨時文件 /var/tmp/rpm* 參見 popt(3), rpm2cpio(8), rpmbuild(8), rpmdb(8), rpmkeys(8), rpmsign(8), rpmspec(8), rpm --help http://www.rpm.org/ Red Hat, Inc. 13 February 2014 RPM-4.11.2(8)