《LINUX入門:Linux rpm包管理詳述》要點(diǎn):
本文介紹了LINUX入門:Linux rpm包管理詳述,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
我們?nèi)粘T谑褂肳indows的時(shí)候,如果要安裝某個(gè)軟件,最簡(jiǎn)單的辦法就是在程序包的官網(wǎng)直接下載軟件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安裝成功了,但是在使用linux的操作系統(tǒng)的時(shí)候也許不是這么的友好,即使現(xiàn)在有的linux發(fā)行版也可以通過(guò)簡(jiǎn)單的搜索點(diǎn)擊安裝來(lái)實(shí)現(xiàn)軟件包的安裝,但這并不一種很好的安裝辦法,因?yàn)槟惚仨毎惭b桌面環(huán)境,消耗和占用一定的內(nèi)存資源,除非只是你日常使用.本次博客就如何使用rpm命令來(lái)實(shí)現(xiàn)CentOS上的軟件包的安裝與管理,rpm也許不是最明智的選擇,但是在學(xué)習(xí)yum之前,我們還是先來(lái)看一下rpm吧!
程序包,簡(jiǎn)單的來(lái)說(shuō)就是將源代碼通過(guò)編譯器編譯成二進(jìn)制格式的程序,然后將二進(jìn)制程序、庫(kù)文件、配置文件和贊助文件組成為一個(gè)或者有限幾個(gè)“包”文件.
在不同的linux發(fā)行版上,提供的程序包的管理器并不是都相同的,比如debian系的使用的擔(dān)保理器是dpkg(包文件后綴名.deb),在rehat和SUSE系使用都是rpm( rpm is package manager),centos作為RedHat的分支,自然使用的是rpm了,而這些包文件的后綴名就是.rpm.
來(lái)看一下這些文件吧!(這里使用grep顯示了包文件名中只含有yum的包名)
rpm包定名的格式:
先來(lái)看一下源代碼的命令格式,一般法式的官網(wǎng)會(huì)提供法式的源代碼文件,你可以通過(guò)源代碼編譯安裝:
zabbix-3.4.1.tar.gz
version:major.minor.release?
major:主版本號(hào),源碼產(chǎn)生巨大的改變,則會(huì)改變;
minor:次版本號(hào),源碼產(chǎn)生了較大的改變,則會(huì)改變;
release:刊行號(hào),當(dāng)修復(fù)了很小的bug的時(shí)候,則會(huì)改變.
再來(lái)看一下包的命令格局:
yum-3.4.3-150.el7.centos.noarch.rpm
格局:name-VERSION-release.arch.rpm
VERSION為源碼的版本號(hào);
releas為rpm包的刊行號(hào);
arch為包可以運(yùn)行的平臺(tái),如i386,x64(amd64),ppc,noarch(說(shuō)明可以在分歧的平臺(tái)上安裝)等.
如這里的yum-3.4.3-150.el7.centos.noarch.rpm,yum為包名,3.4.3為源碼版本,el7.centos代表centos7,noarch說(shuō)明你可以在分歧的平臺(tái)上使用它.
從上面的圖上我們可以看到,除了一個(gè)以yum為名字的包以外還有很多其他包括yum的包,當(dāng)我們安裝了這些包之后,可以為yum提供更多的額外的功能.
包文件的組成(每個(gè)包都是零丁實(shí)現(xiàn)的):
rpm包內(nèi)的文件;
rpm的元數(shù)據(jù),依賴關(guān)系,描寫等;
安裝和卸載時(shí)候運(yùn)行的劇本.
公共的數(shù)據(jù)庫(kù)(/var/lib/rpm):
法式包的名稱和版本;
依附關(guān)系;
功能闡明;
安裝天生的各文件的文件路徑及校驗(yàn)碼信息.
依附關(guān)系:
做為linux重要的哲學(xué)思想之一,單一程序的組合起來(lái)完成復(fù)雜的任務(wù),rpm包之間也是這樣的,如果想要實(shí)現(xiàn)一個(gè)復(fù)制的功能,可能需要多個(gè)rpm包之間相互依賴才能實(shí)現(xiàn),例如,你裝A軟件包,可能依賴于B包,那么你就需要安裝B包,你安裝B包,可能又要依賴于C包,所以你在安裝A包的時(shí)候,就需要同時(shí)報(bào)B包和C包都裝上去.這樣一個(gè)一個(gè)安裝固然很浪費(fèi)時(shí)間,所以linux也提供了一些前端工具來(lái)自動(dòng)辦理依賴關(guān)系:
yum:rhel系列系統(tǒng)上rpm擔(dān)保理器的前段工具
apt-get:deb擔(dān)保理器的前端工具
zypper:suse的rpm管理器前端對(duì)象
dnf:Fedora 22+系統(tǒng)上的rpm擔(dān)保理器的前端工具.
獲取法式包的途徑
?(1)系統(tǒng)刊行版的光盤或官方的文件服務(wù)器:
?(3)第三方組織
?(4) 毛爺爺說(shuō)過(guò):本身動(dòng)手,豐衣足食!
?centos上使用rpm命令來(lái)實(shí)現(xiàn)法式包的安裝、升級(jí)、卸載、查詢、校驗(yàn)和數(shù)據(jù)庫(kù)的維護(hù).
?一、安裝
rpm {-i|--install} [install-options] PACKAGE_FILE ... 選項(xiàng): -i,--install:安裝包 -v:verbose,詳細(xì)信息 -vv:更詳細(xì)的輸出 [install-options]: -h:hash marks輸出進(jìn)度條,每個(gè)#表示2%的進(jìn)度 --test:測(cè)試安裝,但是并沒有安裝,檢查并申報(bào)依賴關(guān)系及沖突消息等 --nodeps:忽略依賴關(guān)系安裝,不建議 --replacepkgs:重新安裝 --nosignature:不檢查包的簽名信息,不檢查來(lái)源合法性 --nodigest:不檢查包完整性信息 注意:rpm可以自帶腳本 總共有4類腳本: preinstall:安裝過(guò)程開始之前運(yùn)行的腳本,%pre postinstall:安裝過(guò)程完成之后運(yùn)行的腳本,%post preuninstall:卸載過(guò)程真正開始執(zhí)行之前運(yùn)行的腳本,%preun postuninstall:卸載過(guò)程完成之后運(yùn)行的腳本,%postun --noscripts:不執(zhí)行這四種腳本 --noper:不執(zhí)行preinstall腳本 --nopost:不執(zhí)行postinstall腳本 --nopreun:不執(zhí)行preuninstall腳本 --nopostun:不執(zhí)行postuninstall腳本
下面我們來(lái)舉一些例子吧!
1.安裝zsh,并顯示具體信息和進(jìn)度條:
[root@localhost Packages]# rpm -ivh zsh-5.0.2-25.el7.x86_64.rpm #最常用的組合 -ivh Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-25.el7 ################################# [100%] [root@localhost Packages]#
2.改動(dòng)zsh的配置文件,再執(zhí)行重新安裝:
?
[root@localhost Packages]# rpm -i --replacepkgs zsh-5.0.2-25.el7.x86_64.rpm
?闡明重新安裝并不會(huì)覆蓋原有的配置文件.
?3.疏忽依賴性安裝
[root@localhost Packages]# rpm -i xterm-295-3.el7.x86_64.rpm #提示必要以下的capability才能安裝成功 error: Failed dependencies: libICE.so.6()(64bit) is needed by xterm-295-3.el7.x86_64 libXaw.so.7()(64bit) is needed by xterm-295-3.el7.x86_64 libXmu.so.6()(64bit) is needed by xterm-295-3.el7.x86_64 libXpm.so.4()(64bit) is needed by xterm-295-3.el7.x86_64 libXt.so.6()(64bit) is needed by xterm-295-3.el7.x86_64 [root@localhost Packages]# rpm -i --nodeps xterm-295-3.el7.x86_64.rpm #忽略依賴性關(guān)系安裝?
更多詳情見請(qǐng)繼續(xù)閱讀下一頁(yè)的精彩內(nèi)容:
?二、進(jìn)級(jí)
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... 選項(xiàng): -U:升級(jí)或安裝 -F:升級(jí) [install-options]:支持安裝不部門的install-options --oldpackage:降級(jí) --force:強(qiáng)制升級(jí) 注意:(1)不要對(duì)內(nèi)核做升級(jí)操作,linux支持多內(nèi)核版本并存,因此直接安裝新版本的內(nèi)核 (2)如果某原程序包的配置文件安裝后曾被修改,升級(jí)時(shí),新版本的程序提供的同一個(gè)配置文件不會(huì)覆蓋原有的配置文件.?
?三、卸載
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ... 選項(xiàng): -e:卸載 --allmatches:卸載所有pip指定名稱的程序包的各個(gè)版本 --nodeps:忽略依賴關(guān)系 --test:測(cè)試卸載,dry run模式
舉例:
卸載zsh,卸載后被修改的配置文件會(huì)被保留為.rpmsave的文件.
[root@localhost Packages]# rpm -e zsh warning: /etc/zshrc saved as /etc/zshrc.rpmsave [root@localhost Packages]# [root@localhost Packages]# rpm -i zsh-5.0.2-25.el7.x86_64.rpm [root@localhost Packages]# [root@localhost Packages]# vim /etc/zshrc zshrc zshrc.rpmsave ?
?四、查詢
rpm {-q|--query} [select-options] [query-options] -q:查詢操作 [select-options]: PACKGE_NAME:查詢指定的程序包是否已經(jīng)依照及版本 -a,--all:查詢所有已經(jīng)依照過(guò)得包 -f FILE:查詢指定的文件是由哪個(gè)程序包安裝生成的 -p,--packges PACKAGE_FILE:用戶實(shí)現(xiàn)對(duì)未安裝的程序包執(zhí)行查詢操作 --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個(gè)程序包提供 --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個(gè)包所依賴 [query-options] --changelog:查詢r(jià)pm包的changelog -l,--list:程序包安裝生成的所有文件列表 -i,--info:程序包相關(guān)的信息,版本、大小、所屬包組等 -c,--configfiles:查詢指定的程序包提供的配置文件 -d,--docfiles:查詢指定的程序包提供的文檔 --provides:查詢指定程序包提供的所有的CAPABILITY -R,--requires:查詢指定的程序包的依賴關(guān)系 --scripts:查看程序包自帶的腳本片段
舉例:
[root@localhost Packages]# rpm -q zsh #查詢zsh是否被安裝 zsh-5.0.2-25.el7.x86_64 [root@localhost Packages]# rpm -qf /etc/zshrc #查詢/etc/zshrc是由哪個(gè)包安裝生成的 zsh-5.0.2-25.el7.x86_64 [root@localhost Packages]# rpm -q --changelog zsh #查詢zsh的改動(dòng)日志 * Thu Jul 14 2016 Kamil Dudka <kdudka@RedHat.com> - 5.0.2-25 - improve use of new command substitution in completion (#1356388) * Fri Jun 10 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-24 - fix off-by-one error in completion utility cache code (#1344599) * Mon May 23 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-23 - fix parse error on a script with unescaped exclamation mark (#1338689) ......(略) [root@localhost Packages]# rpm -ql zsh #查詢安裝zsh會(huì)生成的文件列表 /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc /usr/lib64/zsh /usr/lib64/zsh/5.0.2 ......(略) [root@localhost Packages]# rpm -qc zsh #查詢安裝zsh所生成的配置文件 /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [root@localhost Packages]# rpm -qd zsh #查詢安裝zsh所生成的文檔信息 /usr/share/doc/zsh-5.0.2/BUGS /usr/share/doc/zsh-5.0.2/CONTRIBUTORS /usr/share/doc/zsh-5.0.2/FAQ /usr/share/doc/zsh-5.0.2/FEATURES /usr/share/doc/zsh-5.0.2/LICENCE /usr/share/doc/zsh-5.0.2/MACHINES /usr/share/doc/zsh-5.0.2/NEWS ......(略) [root@localhost Packages]# rpm -q --provides zsh #查詢zsh所提供的CAPABILITY config(zsh) = 5.0.2-25.el7 zsh = 5.0.2-25.el7 zsh(x86-64) = 5.0.2-25.el7 [root@localhost Packages]# rpm -qR zsh #查詢zsh所依賴的CAPABILITY /bin/sh /bin/sh /bin/sh /bin/sh /bin/zsh /sbin/install-info /sbin/install-info config(zsh) = 5.0.2-25.el7 coreutils ......(略) [root@localhost Packages]# rpm -q --scripts zsh #查詢zsh的自定的腳本片段 postinstall scriptlet (using /bin/sh): if [ ! -f /etc/shells ] ; then echo "/bin/zsh" > /etc/shells else grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells fi if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir--entry="* zsh: (zsh). An enhanced bourne shell." fi : preuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ] ; then if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir--entry="* zsh: (zsh). An enhanced bourne shell." fi fi : postuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ] ; then if [ -f /etc/shells ] ; then TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX` grep -v '^/bin/zsh$' /etc/shells > $TmpFile cp -f $TmpFile /etc/shells rm -f $TmpFile fi fi [root@localhost Packages]# rpm -q --whatprovides 'config(zsh)' #查詢conig(zsh)是由哪個(gè)包提供的 zsh-5.0.2-25.el7.x86_64 [root@localhost Packages]# [root@localhost Packages]# rpm -q --whatrequires 'config(zsh)' #查詢config(zsh)被哪個(gè)包所依賴 zsh-5.0.2-25.el7.x86_64 [root@localhost Packages]# rpm -qpl zenity-3.8.0-5.el7.x86_64.rpm #這里的zenity是沒有安裝的,可以直接加-p選項(xiàng),進(jìn)行查詢操作,查詢zenity安裝后生成的文件列表 /usr/bin/zenity /usr/share/doc/zenity-3.8.0 /usr/share/doc/zenity-3.8.0/AUTHORS /usr/share/doc/zenity-3.8.0/COPYING /usr/share/doc/zenity-3.8.0/NEWS ......(略) [root@localhost Packages]# rpm -qp --provides zenity-3.8.0-5.el7.x86_64.rpm #查詢zenity所提供的CAPABILITY zenity = 3.8.0-5.el7 zenity(x86-64) = 3.8.0-5.el7?
五、?校驗(yàn)
rpm {-V|--verify} [select-options] [verify-options] 選項(xiàng): --nodeps:不檢查文件的依賴性關(guān)系 --nofiles:不檢查文件的任何屬性 --nosize:不檢查文件年夜小 --nouser:不檢查文件的屬主 --nogroup:不檢查文件的屬組 --nomtime:不檢查文件的時(shí)間戳
舉例:
[root@localhost Packages]# rpm -V zsh .......T. c /etc/zshrc #這里表現(xiàn)時(shí)間戳有變,沒有任何輸出代表校驗(yàn)成功 這里的每個(gè)點(diǎn)代表一個(gè)校驗(yàn)的類型: S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ
我們?cè)谶@個(gè)文件里面添加一行試試:
?
?再來(lái)校驗(yàn):
[root@localhost Packages]# rpm -V zsh S.5....T. c /etc/zshrc #文件大小產(chǎn)生改變,MD5值改變,時(shí)間戳改變 [root@localhost Packages]# rpm -V --nomtime zsh #不檢查時(shí)間戳 S.5...... c /etc/zshrc
包來(lái)源合法性驗(yàn)證和完整性驗(yàn)證:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost Packages]# rpm -K zsh-5.0.2-25.el7.x86_64.rpm zsh-5.0.2-25.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
六、RPM的數(shù)據(jù)庫(kù)
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化數(shù)據(jù)庫(kù),當(dāng)前無(wú)任何數(shù)據(jù)庫(kù)可實(shí)始化創(chuàng)建一個(gè)新的;當(dāng)前有時(shí)不執(zhí)行任何操作; --rebuilddb:重新構(gòu)建,通過(guò)讀取當(dāng)前系統(tǒng)上所有已經(jīng)安裝過(guò)的程序包進(jìn)行重新創(chuàng)建;
一般情況下我們都不要去動(dòng)RPM的數(shù)據(jù)庫(kù).
總結(jié):rpm命令的查詢功能是非常的重要的,但是安裝卻不顯的那么重要,因?yàn)槭褂胷pm安裝包,如果包存在一些依賴的包,你需要將依賴的包一個(gè)一個(gè)的安裝,這樣耗時(shí)又耗力,所以在安裝包的時(shí)候,我們一般會(huì)使用比較自動(dòng)化的工具yum,它能幫我們辦理依賴性的關(guān)系,yum將在下一篇博客中進(jìn)行詳細(xì)的介紹.
本文永遠(yuǎn)更新鏈接地址:
歡迎參與《LINUX入門:Linux rpm包管理詳述》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7042.html