在linux有很多類的軟件包管理機(jī)制,但是在redhat、centos這類版本的系統(tǒng)中,都會使用一種相同的機(jī)制,就是rpm軟件包管理機(jī)制,當(dāng)然,還有其它版本的linux使用的不同機(jī)制:
10多年建站經(jīng)驗(yàn), 網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計客戶的見證與正確選擇。創(chuàng)新互聯(lián)公司提供完善的營銷型網(wǎng)頁建站明細(xì)報價表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。debian:使.deb文件,dpkg包管理器
redhat:使用.rpm文件,rpm包管理器
軟件包在使用中又分類兩種(源碼包和二進(jìn)制包):
源碼包:一般是提供了一些源碼模塊和編譯腳步組合起來的壓縮文件,命令格式如:
name-version.tar.{gz|bz2|xz} 等,這里列舉出來一個源碼包:
[root@localhost ~]# ls -l tengine-1.4.2.tar.gz
-rw-r--r-- 1 root root 1185902 Aug 15 18:57 tengine-1.4.2.tar.gz
二進(jìn)制rpm包:實(shí)現(xiàn)被編譯包的,功能模塊事先已經(jīng)被設(shè)置好的軟件,命令格式如:
rpm包的組成:
主包:
name-version-release.arch.rpm 例如:
bind-9.7.1-1.e15.i586.rpm
子包:
name-toolname-9.7.1-1.e15.i586.rpm 例如:
bind-libs-9.7.1-1.e15.i586.rpm
bind-utils-9.7.1-1.e15.i586.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
版本號說明:
主版本號:軟件包有重大改進(jìn)
此版本號:某個子功能發(fā)生重大變化
發(fā)行號:修正了部分bug,調(diào)整了一點(diǎn)功能
軟件管理器的核心功能:
1、制作軟件包;
2、安裝、卸載、升級、查詢、校驗(yàn);
注意:rpm包自身有依賴關(guān)系,及安裝軟件包時需要先安裝其依賴的軟件包
軟件包工具分類:
前段工具:yum,apt-get
后端工具:rpm,dpt
rpm命令:
rpm rpmduild
rpm數(shù)據(jù)庫:/var/lib/rpm
注意:/var/lib/rpm中的某些文件如果只是被破壞,可以通過命令來創(chuàng)建或初始化數(shù)據(jù)庫,但是文件如果都被刪除,其數(shù)據(jù)庫信息將無法恢復(fù),因此,要時常對此做備份
rpm命令使用方法:
1、安裝:
rpm -i /PATH/TO/PACKAGE_FILE 注意:這里是軟件包文件的路徑
-h:以#符號顯示進(jìn)度,每個#符號表示2%進(jìn)度
-v:顯示詳細(xì)過程
-vv:顯示更為詳細(xì)的過程
rpm -ivh /PATH/TO/PACHAGE_FILE 提示:這里一般組合使用顯示其安裝狀態(tài)
--nodeps:忽略依賴關(guān)系;
--replacepkgs:重新安裝,替換原有安裝;
--replacefiles:會替換原有文件;
--force:強(qiáng)行安裝,可以實(shí)現(xiàn)重裝或降級;
--nosgnature:不檢查來源的合法性
--nodigest:不檢查完整性
--noscripts:不執(zhí)行程序包腳步
%pre:安裝前腳步;--nopre
%post:安裝后腳本;--nopost
%preun:卸載前腳步;--nopre
%postun:卸載后腳步;--nopost
注意:有時對于來源不明的軟件包,可以使用以上選項來防止軟件包里的危險程序
2、升級:
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級,否則重裝
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果有老版本的,則升級,否則退出
--oldpackage:降級
注意事項:
1、不要對系統(tǒng)內(nèi)核進(jìn)行升級或降級安裝,Linux執(zhí)行多內(nèi)核并存,因此直接安裝新內(nèi)核即可
2、如果對kernel升級,升級前如果改變了原內(nèi)核中配置文件,那么升級后,原內(nèi)核的配置文件將被重命名為filename.rpmnew的文件,而使用新內(nèi)核的文件
3、查詢
rpm -q PACKAGE_NAME:查詢指定包是否已經(jīng)安裝
rpm -qa:查看已經(jīng)安裝的所有軟件包
rpm -qi PACKAGE_NAME:查詢指定包的安裝包的說明信息;
rpm -ql PACKAGE_NAME:查詢指定包安裝后生成的文件列表;
rpm -qc PACKAGE_NAME:查詢指定包安裝后生成配置文件;
rpm -qd PACKAGE_NAME:查詢指定包安裝的幫助文件;
rpm --scripts PACKAGE_NAME:查詢指明包中包含的腳步
rpm -qf /PATH/TO/SOMEFILE:查詢指定的文件是由哪個rpm包安裝以后生成的;
rpm --whatprovides CAPABILTTY :查詢關(guān)鍵字或命令是由哪個包替換
rpm --whatrequires CAPABILTTY:查詢指定包或命令是被哪個包所依賴
如果包尚未安裝,我們需要查詢其說明信息、安裝以后會生成的文件:
rpm -qpi /PATH/TO/PACKAGE_FILES 查看軟件包文件信息
rpm -qpl /PATH/TO/PACKAGE_FILES 查看軟件包安裝后生成哪些文件
如果安裝后的文件有所丟失,而又有配置而不像重裝去覆蓋文件,可以通過工具處理:
rpm2cpio 包文件|cpio -itv預(yù)覽包文件
rpm2cpio 包文件|cpio -idv“*.conf” 展開包文件
注意:里面可以是特定路徑或者文件通配符
rpm --scripts /PACKAGE_NAME:查詢包生成的腳步文件
-R:查詢指定的程序包所依賴庫及軟件
--provides:列出指定程序包提供的工具、命令
--changelog:查詢rpm包的更改信息
4、卸載
rpm -e PACKAGENAME
rpm --erase PACKAGENME
--nodeps:忽略依賴關(guān)系任然卸載
--test:只是測試卸載過程,并不真正卸載
--noscripts:卸載時不運(yùn)行過程腳步
--notriggers:不啟動觸發(fā)器
--allmatches:卸載全部與其相配的文件
5、校驗(yàn)
rpm -V PACKNAME PACKAGE_NAME
信息說明:
S 表示軟件更改信息
M 顯示權(quán)限信息
5 顯示加密信息
D 顯示主次設(shè)備號
L 顯示鏈接路徑數(shù)
U 顯示包用戶
G 顯示包用戶組
T 顯示更改時間
p 顯示更新對比屬性
6、校驗(yàn)軟件包來源合法性,及軟件包完整性:
密鑰文件:
/etc/pki/rpm-gpg/目錄下:
RPM-GPG-KEY-readhat-release
RPM-GPG-KEY-centos-release
檢查軟件包的完整性:
rpm -K /path/to/rpmfile
信息說明:
dsp, gpg:驗(yàn)證來源合法性,也即驗(yàn)證前面字段,可以使用--nosignature略過此項
sha1, md5:驗(yàn)證軟件包完整性,可以使用--nodigest,略過此項
在此之前需要有公鑰的存在,可以使用命令導(dǎo)入公鑰:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
卸載公鑰:
rpm -qa gpg-pubkey* 找出公鑰名稱
rpm -e gpg-pubkey...... 卸載公鑰
7、重建數(shù)據(jù)庫
數(shù)據(jù)庫文件路徑:/var/lib/rpm/
使用命令重建:
rpm
--rebuilddb:重建數(shù)據(jù)庫,一定會重新建立;
--initdb:初始化數(shù)據(jù)庫,沒有才建立,有就不建立;
案例:
#掛載CentOS鏡像到/mnt/iso文件夾
[root@mzf ~]# mount /dev/cdrom /mnt/iso/ mount: block device /dev/sr0 is write-protected, mounting read-only#cd進(jìn)入/mnt/iso目錄
[root@mzf ~]# cd /mnt/iso/ [root@mzf iso]# pwd /mnt/iso#查看軟件包存放在Packages中
[root@mzf iso]# ls CentOS_BuildTag EULA p_w_picpaths Packages repodata RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6 EFI GPL isolinux RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL#cd到此Packages目錄中
[root@mzf iso]# cd Packages/#找出tree軟件
[root@mzf Packages]# find ./ -name "tree-1.5.3-3.el6.x86_64.rpm" ./tree-1.5.3-3.el6.x86_64.rpm#發(fā)現(xiàn)已經(jīng)安裝
[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm Preparing... ########################################### [100%] package tree-1.5.3-3.el6.x86_64 is already installed#那就先卸載此文件
[root@mzf Packages]# rpm -e tree#再次安裝,顯示進(jìn)度安裝成功
[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm Preparing... ########################################### [100%] 1:tree ########################################### [100%]#安裝zsh發(fā)現(xiàn)已經(jīng)被安裝過
[root@mzf Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm Preparing... ########################################### [100%] package zsh-4.3.11-4.el6.centos.2.x86_64 is already installed#使用--force強(qiáng)制安裝并覆蓋之前的安裝
[root@mzf Packages]# rpm -ivh --force zsh-4.3.11-4.el6.centos.2.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]#查詢bind是否已經(jīng)安裝,發(fā)現(xiàn)只是一些庫和工具
[root@mzf Packages]# rpm -qa | grep '^bind' bind-libs-9.8.2-0.47.rc1.el6.x86_64 bind-utils-9.8.2-0.47.rc1.el6.x86_64#安裝一個服務(wù)器配置,顯示此包依賴于bind-9.8.2-0.47.rc1.el6包
[root@mzf Packages]# rpm -ivh bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm error: Failed dependencies: bind = 32:9.8.2-0.47.rc1.el6 is needed by bind-chroot-32:9.8.2-0.47.rc1.el6.x86_64#那么可以選擇一起安裝,也可以忽略、強(qiáng)制安裝
[root@mzf Packages]# rpm -ivh --nodeps --force bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:bind-chroot warning: group named does not exist - using root warning: group named does not exist - using root%) warning: group named does not exist - using root%) warning: group named does not exist - using root%)說明:雖然裝上了,但是顯示一些錯誤信息,因?yàn)闆]有主配置文件,這里我們還是一起安裝
[root@mzf Packages]# rpm -ivh bind-9.8.2-0.47.rc1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:bind warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew ########################################### [100%]#卸載剛才安裝的軟件
[root@mzf Packages]# rpm -e bind-chroot #沒有信息就說明已經(jīng)安裝成功#檢驗(yàn)軟件包來源合法性,這里顯示正常
[root@mzf Packages]# rpm -K bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK#而檢驗(yàn)是通過公鑰文件來處理的,如果沒有這些文件,將會檢查失效
[root@mzf Packages]# ls /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Security-6 RPM-GPG-KEY-CentOS-Testing-6#通過命令導(dǎo)入密鑰:
[root@mzf Packages]# rpm --import /mnt/iso/RPM-GPG-KEY-CentOS-6#查看剛才安裝的密鑰
[root@mzf Packages]# rpm -qa | grep 'gpg.*key' gpg-pubkey-c105b9de-4e0fd3a3#卸載此密鑰
[root@mzf Packages]# rpm -e gpg-pubkey如果安裝過的軟件的某些文件被刪除或者破壞,如何只恢復(fù)指定文件而不重裝?
#查看tree執(zhí)行文件的路徑
[root@mzf Packages]# which tree /usr/bin/tree#刪除出tree執(zhí)行文件
[root@mzf Packages]# rm -f /usr/bin/tree#再次執(zhí)行已經(jīng)找不到此命令
[root@mzf Packages]# tree -bash: tree: command not found#通過rpm2cpio將rpm包生成的文件列表寫成數(shù)據(jù)流傳給cpio查看
[root@mzf Packages]# rpm2cpio ./tree-1.5.3-3.el6.x86_64.rpm | cpio -tv -rwxr-xr-x 1 root root 41136 Jan 14 2015 ./usr/bin/tree drwxr-xr-x 2 root root 0 Jan 14 2015 ./usr/share/doc/tree-1.5.3 -rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.5.3/LICENSE -rw-r--r-- 1 root root 4167 Oct 20 2009 ./usr/share/doc/tree-1.5.3/README -rw-r--r-- 1 root root 3375 Jan 14 2015 ./usr/share/man/man1/tree.1.gz#根據(jù)上面顯示時說明展開默認(rèn)在當(dāng)前當(dāng)文件夾
#那么我們切換到家目錄
[root@mzf Packages]# cd#只展開出tree命令
[root@mzf~]#rpm2cpio /mnt/iso/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -idv ./usr/bin/tree ./usr/bin/tree 132 blocks#拷貝這個命令到原來tree命令所在的目錄
[root@mzf ~]# cp usr/bin/tree /usr/bin/tree#發(fā)現(xiàn)tree命令又可以使用了
[root@mzf ~]# tree . ├── anaconda-ks.cfg ├── checkdisk.sh重建庫文件
#查詢庫文件
[root@mzf ~]# ls /var/lib/rpm/ Basenames __db.001 __db.003 Dirnames Group Name Packages Provideversion Requirename Sha1header Triggername Conflictname __db.002 __db.004 Filedigests Installtid Obsoletename Providename Pubkeys Requireversion Sigmd5#備份移動庫文件
[root@mzf ~]# mkdir backup [root@mzf ~]# mv /var/lib/rpm/* backup/#已經(jīng)沒有任何庫文件
[root@mzf ~]# ls /var/lib/rpm/#初始化庫文件
[root@mzf ~]# rpm --initdb [root@mzf ~]# ls /var/lib/rpm/ __db.001 __db.002 __db.003 __db.004 Packages#重建庫文件
[root@mzf ~]# rpm --rebuilddb [root@mzf ~]# ls /var/lib/rpm/ Packages#查詢已經(jīng)失效
[root@mzf ~]# rpm -qa 說明:這里的重建只是重新生成庫文件,但以前的記錄已經(jīng)沒有了,這時我們還原#將剛才的文件再次移動到/var/lib/rpm下
[root@mzf ~]# mv -f backup/* /var/lib/rpm/#查詢之前安裝的軟件,發(fā)現(xiàn)可以查看了
[root@mzf ~]# rpm -qa | grep '^bind.*' bind-libs-9.8.2-0.47.rc1.el6.x86_64 bind-9.8.2-0.47.rc1.el6.x86_64bind-utils-9.8.2-0.47.rc1.el6.x86_64
注意:這里如果只是一點(diǎn)文件或者鎖文件破壞,還可以使用重建數(shù)據(jù)庫拯救,但是如果/var/lib/rpm里的文件都被刪除了,就算重建了,記錄是找不回來的,這時就需要對庫文件進(jìn)行備份了
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前標(biāo)題:Linux入門學(xué)習(xí)之rpm軟件包管理-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://jinyejixie.com/article2/ichic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、定制網(wǎng)站、ChatGPT、網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容