linux软件包管理-rpm
1.程序包管理
功能:將編譯好的應(yīng)用程序的各組件組成文件打包成一個(gè)或幾個(gè)程序包文件,從而更方便快捷實(shí)現(xiàn)程序包的安裝升級(jí),卸載和查詢等管理操作
?
?1 程序包的組成清單(每個(gè)程序包都單獨(dú)實(shí)現(xiàn))
?文件清單
?安裝或卸載是運(yùn)行的腳本
2 數(shù)據(jù)庫部分(公共)
程序包名稱和版本
依賴關(guān)系
功能說明
安裝生成各文件位置路徑及校驗(yàn)碼信息
程序包我們?cè)谀墨@取了?
1)系統(tǒng)發(fā)行的光盤或官方文件服務(wù)器或鏡像站點(diǎn):
最常用的例如像
http://mirrors.aliyun.com
http://mirrors.souhu.com
http://mirrors.163.com
2)程序官方站點(diǎn)下載
3)第三方組織的rpm包
(a)EPEL:紅帽站點(diǎn)論壇組織,提供高效的yum原?
(b)搜索引擎搜索
pkgs.org
rpmfind.net
rpm.pbone.net
4)自己做
ps:下載時(shí)注意其合法性,來源合法
rpm?:readhat package manager ;rpm is package manager?
2.rpm包命名格式
tree-1.5.3-3.el6.x86_64.rpm
name-version-release.arch.rpm
versiom:是指源代碼版本
release.arch:rpm包的發(fā)行號(hào)
archetecture:架構(gòu)號(hào):i386,x64(amd64)..
? e16適用平臺(tái) 6
3.rpm 特性
1,rpm分包機(jī)制
? ? 將一個(gè)包的功能拆成n個(gè)不同功能支包
? 主包:name-version-release.arch.rpm
? 支包:name-function-version-release.arch.rpm
? function:功能 例如:devel開發(fā)功能
? ? ? ? untils工具程序
? ? ? ? libs庫文件等
2,依賴關(guān)系
? ?依賴關(guān)系:因?yàn)閘inux程序做到短小精湛,程序彼此之間依賴其他程序提供的功能,然后才能運(yùn)行,所以導(dǎo)致包和包之間有著復(fù)雜的依賴關(guān)系
3,解決依賴
前端工具的出現(xiàn)自動(dòng)解決包之間的依賴關(guān)系;
yum :rpm包管理器的前端工具
apt-get(apt-cache)deb包管理器的前端工具 用于debian?
zypper :suse的rpm管理器前端工具
dnf:fedora-22+系統(tǒng)上的rpm包管理器的前端工具
4.rpm命令管理程序包:
安裝升級(jí)、卸載、查詢、效驗(yàn)、數(shù)據(jù)庫維護(hù)、幫助
使用方法
rpm?[OPTION]?[PACKAGE_FILE]? ?
安裝?
例如:安裝tree包
[root@localhost?Packages]#?rpm?-ivh?tree-1.6.0-10.el7.x86_64.rpm? warning:?tree-1.6.0-10.el7.x86_64.rpm:?Header?V3?RSA/SHA256?Signature,?key?ID?f4a80eb5:?NOKEY Preparing...??????????????????????????#################################?[100%]package?tree-1.6.0-10.el7.x86_64?is?already?installed??升級(jí)?
?rpm?{-U|--upgrade}?[install-options]?PACKAGE_FILE?...rpm?{-F|--freshen}?[install-options]?PACKAGE_FILE?... -U?升級(jí)或安裝 -F升級(jí) rpm?-Uvh? rpm?-Fvh --oldpackage:降級(jí); --force:強(qiáng)制升級(jí);升級(jí)會(huì)影響依賴關(guān)系可能 #ps:1)不要對(duì)內(nèi)核做升級(jí)操作;linux支持多內(nèi)核,直接安裝新版本內(nèi)核即可; #????2)如果原程序包配置文件安裝后被修改過,升級(jí)是,新版本程序提供的同一個(gè)配置文件不會(huì) 覆蓋原有版本的配置文件,會(huì)將新文件重命名后保留;例如:驗(yàn)證?如果原程序包配置文件安裝后被修改過,升級(jí)是,新版本程序提供的同一個(gè)配置文件不會(huì)覆蓋原有版本的配置文件,會(huì)將新文件重命名后保留;
[root@localhost?Packages]#?rpm?-ivh?vsftpd-3.0.2-10.el7.x86_64.rpm? warning:?vsftpd-3.0.2-10.el7.x86_64.rpm:?Header?V3?RSA/SHA256?Signature,?key?ID?f4a80eb5:?NOKEY Preparing...??????????????????????????#################################?[100%] Updating?/?installing...1:vsftpd-3.0.2-10.el7??????????????#################################?[100%] [root@localhost?Packages]#? #安裝vsftp[root@localhost?vsftpd]#?cat?vsftpd.conf|wc?-l 127 [root@localhost?vsftpd]#?vim?vsftpd.conf [root@localhost?vsftpd]#?cat?vsftpd.conf|wc?-l 27 #修改其配置文件(刪除文件中100行內(nèi)容)[root@localhost?Packages]#?rpm?-Uvh?vsftpd-3.0.2-10.el7.x86_64.rpm?--force warning:?vsftpd-3.0.2-10.el7.x86_64.rpm:?Header?V3?RSA/SHA256?Signature,?key?ID?f4a80eb5:?NOKEY Preparing...??????????????????????????#################################?[100%] Updating?/?installing...1:vsftpd-3.0.2-10.el7??????????????#################################?[100%] #升級(jí)安裝vsftpd??? [root@localhost?vsftpd]#?cat?vsftpd.conf|wc?-l 27 #配置文件行數(shù)與之前安裝修改行數(shù)一樣卸載
rpm?{-e|--erase}?[--allmatches]?[--nodeps]?[--noscripts][--notriggers]?[--test]?PACKAGE_NAME?... --allmatches:刪除所有所匹配指定名稱的程序包版本 --nodeps:忽略依賴關(guān)系 --test?測(cè)試卸載,不真正執(zhí)行卸載例如:卸載vsftpd
[root@localhost?Packages]#?rpm?-e?--nodeps?vsftpd? warning:?/etc/vsftpd/vsftpd.conf?saved?as?/etc/vsftpd/vsftpd.conf.rpmsave #卸載vsftpd包 [root@localhost?~]#?ll?/etc/vsftpd/ total?4 -rw-------.?1?root?root?1127?Aug?23?21:10?vsftpd.conf.rpmsave [root@localhost?~]#?cat?/etc/vsftpd/vsftpd.conf.rpmsave?|ec?-l bash:?ec:?command?not?found... [root@localhost?~]#?cat?/etc/vsftpd/vsftpd.conf.rpmsave?|wc?-l 27 #卸載后將配置文件備份成了一個(gè)新文件查詢?
rpm?{-q|--query}?[select-options]?[query-options] 1)select-options: PACKAGE_NAME?直接給出包名查看是否已經(jīng)安裝 -a,--all?查詢所有已安裝的包?rpm?-qa [root@localhost?~]#?rpm?-qa?|grep?http -f,--file?查詢文件的生成安裝包 [root@localhost?~]#?rpm?-qf?/etc/fstab? setup-2.8.71-6.el7.noarch -p?--pachage?查尋未安裝的包 --whatprovides?CAPABILITY:查詢指定的CAPABILITY安裝包--whatrequires?CAPABILITY:查詢指定的CAPABILITY安裝包有哪些依賴包 2)query-options: --changelog?查看rpm改進(jìn)日志 -l,?--list?安裝生成的文件 rpm?-ql?查看安裝這個(gè)程序包后生成了哪些文件 -i?--info?查詢程序包相關(guān)的信息(版本,大小,所屬的包組) rpm?-qi?程序名-c,?--configfiles?查詢指定程序包提供的配置文件-d,?--docfiles?查詢指定程序包提供的文檔--provides?列出程序提供的CAPABTLITY--scripts?查看指定程序安裝后的腳本查詢舉例:?
#查詢某個(gè)包是否已經(jīng)安裝的多個(gè)方法 [root@localhost?vsftpd]#?rpm?-q?vsftpd package?vsftpd?is?not?installed [root@localhost?vsftpd]#?rpm?-qa?vsftpd [root@localhost?vsftpd]#?rpm?-qa?|grep?vsftpd [root@localhost?vsftpd]#?rpm?-q?vsftpd vsftpd-3.0.2-10.el7.x86_64 [root@localhost?vsftpd]#?rpm?-qa?|grep?vsftpd vsftpd-3.0.2-10.el7.x86_64。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#查詢某個(gè)文件是由哪個(gè)安裝包生成的 [root@localhost?vsftpd]#?rpm?-qf?/etc/vsftpd/ vsftpd-3.0.2-10.el7.x86_64。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#查詢指定程序包包含的配置文件 [root@localhost?Packages]#?rpm?-qc?vsftpd /etc/logrotate.d/vsftpd /etc/pam.d/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#查詢指定程序包提供的文檔 [root@localhost?Packages]#?rpm?-qd?vsftpd /usr/share/doc/vsftpd-3.0.2/AUDIT /usr/share/doc/vsftpd-3.0.2/BENCHMARKS /usr/share/doc/vsftpd-3.0.2/BUGS /usr/share/doc/vsftpd-3.0.2/COPYING /usr/share/doc/vsftpd-3.0.2/Changelog /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow /usr/share/doc/vsftpd-3.0.2/EXAMPLE/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README /usr/share/doc/vsftpd-3.0.2/FAQ /usr/share/doc/vsftpd-3.0.2/INSTALL /usr/share/doc/vsftpd-3.0.2/LICENSE /usr/share/doc/vsftpd-3.0.2/README /usr/share/doc/vsftpd-3.0.2/README.security /usr/share/doc/vsftpd-3.0.2/REWARD /usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN /usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION /usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW /usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST /usr/share/doc/vsftpd-3.0.2/SIZE /usr/share/doc/vsftpd-3.0.2/SPEED /usr/share/doc/vsftpd-3.0.2/TODO /usr/share/doc/vsftpd-3.0.2/TUNING /usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd /usr/share/man/man5/vsftpd.conf.5.gz /usr/share/man/man8/vsftpd.8.gz效驗(yàn) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
rpm?{-V|--verify}?[select-options]?[verify-options]--nodepsDon't?verify?dependencies?of?packages.--nodigestDon't?verify?package?or?header?digests?when?reading.--nofilesDon't?verify?any?attributes?of?package?files.--noscriptsDon't??execute??the??%verifyscript??scriptlet?(ifany).S?file?Size?differsM?Mode?differs?(includes?permissions?and?file?type)5?digest?(formerly?MD5?sum)?differsD?Device?major/minor?number?mismatchL?readLink(2)?path?mismatchU?User?ownership?differsG?Group?ownership?differsT?mTime?differsP?caPabilities?differ 不添加任何參數(shù)默認(rèn)就是檢查所有參數(shù) rpm?-V?--nodeps程序包的合法性驗(yàn)證:
????來源合法:由制作者提供,依賴于制作者的數(shù)字簽名,簽名是作者使用自己的私鑰加密程序包的特性碼進(jìn)行的;
????內(nèi)容合法:包未被二次修改,依賴于:制作者提供的程序特征碼;
? ? ?驗(yàn)正方式:安裝者用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的相比較;
舉例:
rpm?--import?/misc/cd/RPM-GPG-KEY-CentOS-6? rpm?-K?vsftpd-3.0.2-10.el7.x86_64.rpm? vsftpd-3.0.2-10.el7.x86_64.rpm:?rsa?sha1?(md5)?pgp?md5?OK??
數(shù)據(jù)庫維護(hù)
rpm管理器數(shù)據(jù)庫:/var/lib/rpm rpmdb?{--initdb|--rebuilddb}?[-v]?[--dbpath?DIRECTORY]--initdb:?初始化數(shù)據(jù)庫,數(shù)據(jù)庫不存在,才會(huì)新建;--rebuilddb:?無論當(dāng)前數(shù)據(jù)庫是否存在,都會(huì)直接重建此庫;舉例:
#刪除庫 [root@localhost?rpm]#?ls Basenames?????__db.001??__db.003??Group???????Name??????????Packages?????Requirename??Sigmd5 Conflictname??__db.002??Dirnames??Installtid??Obsoletename??Providename??Sha1header???Triggername [root@localhost?rpm]#?rm?-fr?* [root@localhost?rpm]#?ls #使用查詢重新生成庫 [root@localhost?rpm]#?rpm?-qa?vsftpd [root@localhost?rpm]#?ls Basenames?????__db.001??__db.003??Group???????Name??????????Packages?????Requirename??Sigmd5 Conflictname??__db.002??Dirnames??Installtid??Obsoletename??Providename??Sha1header???Triggername [root@localhost?rpm]# #使用命令rpmdb?--initdb生成庫 [root@localhost?rpm]#?rm?-fr?* [root@localhost?rpm]#?ll total?0 [root@localhost?rpm]#?rpmdb?--initdb [root@localhost?rpm]#?ll total?388 -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Basenames -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Conflictname -rw-r--r--.?1?root?root?270336?Aug?23?22:19?__db.001 -rw-r--r--.?1?root?root??81920?Aug?23?22:19?__db.002 -rw-r--r--.?1?root?root?107048?Aug?23?22:19?__db.003 -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Dirnames -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Group -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Installtid -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Name -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Obsoletename -rw-r--r--.?1?root?root??12288?Aug?23?22:19?Packages -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Providename -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Requirename -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Sha1header -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Sigmd5 -rw-r--r--.?1?root?root???8192?Aug?23?22:19?Triggername??
幫助
? 1. man?rpm??
2.?man?rpmdb
轉(zhuǎn)載于:https://blog.51cto.com/liaoxz/1841791
總結(jié)
以上是生活随笔為你收集整理的linux软件包管理-rpm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 格式化大容量硬盘为fat32
- 下一篇: Jdk1.6 JUC源码解析(13)-L