目前在linux系統之上軟件安裝方式最常見的有兩種,分別是:
dpkg:這個機制最早是由Debian Linux社區所開發出來的,透過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯。只要是衍生于Debian的其他linux發行版,大多使用dpkg這個機制來管理軟件的,包括B2D、Ubuntu等等。
RPM:這個機制最早是由RedHat這家公司開發出來的,后來實在很好用,因此很多發行版就使用這個機制來作為軟件安裝的管理方式。包括Fedora、CentOS、SuSE等等知名的發行廠商。
今天要記錄的是RPM軟件管理器與RPM的前端工具YUM。
一、RPM軟件包管理器
1、RPM包命名方式
源代碼:name-VERSION.tar.gz|bz2|xz
例:bash-4.2.46-19.el7.x86_64.rpm
bash:包名
4:主版本
2:次版本
46:發行版本號
19:編譯的次數
e17:RedHat Linux的版本號
x86_64:64位系統架構
2、包的依賴關系命名
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm開發子包
Application-utils-VERSION-ARHC.rpm其它子包
Application-libs-VERSION-ARHC.rpm其它子包
注意:包之間:可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:
yum | rpm包管理器的前端工具 |
apt-get | deb包管理器前端工具 |
zypper | suse上的rpm前端管理工具 |
dnf | Fedora 18+ rpm包管理器前端管理工具 |
3、二進制的庫文件
查看二進制程序所依賴的庫文件:ldd/PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:ldconfig;/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
4、RPM包的管理器
程序包管理器
(1)功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
(2)組成(每個包獨有):RPM包內的文件和RPM的元數據,如名稱,版本,依賴性,描述以及安裝或卸載時運行的腳本
(3)包的公共數據:程序包名稱及版本;依賴關系;功能說明;包安裝后生成的各文件路徑及校驗碼信息
5、程序包的來源與管理工具
(1)管理程序包的方式:使用包管理器rpm命令;使用前端工具yum和dnf命令
(2)獲取程序包的途徑:
(1)系統發版的光盤或官方的服務器 | (2)項目官方站點 | (3)第三方組織 | (4)自己制作RPM包 |
https://www.centos.org/download/ | http://nginx.org/en/download.html(nginx) | Fedora-EPEL源 | 檢查其合法性 |
http://mirrors.aliyun.com | http://httpd.apache.org/download.cgi(httpd) | 檢查其來源性 | |
http://mirrors.sohu.com | http://tomcat.apache.org/download-90.cgi(tom) | 程序包的完整性 | |
http://mirrors.163.com | … | … |
6、RPM包的管理
CentOS系統上使用rpm命令管理程序包:安裝、卸載、升級、查詢、校驗、數據庫維護
(1)初步安裝
格式: rpm {-i|--install} PACKAGE_FILE…
選項: -v: 顯示指令執行過程 -vv:詳細顯示指令執行過程,便于排錯 -h:以#顯示程序包管理執行進度
示例1: [root@localhost ~]# ls anaconda-ks.cfg bin tree-1.6.0-10.el7.x86_64.rpm [root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:tree-1.6.0-10.el7 ################################# [100%] [root@localhost ~]#
7、安裝與管理
格式: rpm [install-options] PACKAGE_FILE…
選項: --test: 測試安裝,但不真正執行安裝;dry run模式 --nodeps:忽略依賴關系 --replacepkgs| replacefiles --nosignature: 不檢查來源合法性 --nodigest:不檢查包完整性 --noscipts:不執行程序包腳本片斷 %pre: 安裝前腳本;--nopre %post: 安裝后腳本;--nopost %preun: 卸載前腳本;--nopreun %postun: 卸載后腳本;--nopostun
8、升級
格式: rpm {-U|--upgrade} [install-options] PACKAGE_FILE... rpm {-F|--freshen} [install-options] PACKAGE_FILE...
選項: upgrade:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝” freshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作 --oldpackage:降級 --force: 強行升級
示例: rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... 升級注意事項: (1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,可直接安裝新版本內核 (2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
9、包查詢
格式: rpm [select-options]
選項: -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 -p rpmfile:針對尚未安裝的程序包文件做查詢操作 --whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供 --whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
示例: rpm2cpio 包文件|cpio–itv預覽包內文件 rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件
實例: 假設將不小心將RPM命令刪除了,而虛擬機又無法上外網,可以操作如下: [root@centos6 ~]# which rpm [root@centos6 ~]# rm -rf /bin/rpm [root@centos6 ~]# mount /dev/cdrom /mnt [root@centos6 ~]# cp -af /mnt/Packages/rpm-4.8.0-55.el6.x86_64.rpm /root/ [root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -tv| grep "/bin/rpm" [root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -id "./bin/rpm" [root@centos6 ~]# mv /root/bin/rpm /bin/ [root@centos6 ~]# source /etc/profile
10、包文件查詢
格式: rpm [query-options]
選項: --changelog:查詢rpm包的changelog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝后生成的所有文件 --scripts:程序包自帶的腳本片斷 -R: 查詢指定的程序包所依賴的CAPABILITY --provides: 列出指定程序包所提供的CAPABILITY
示例: rpm -qi PACKAGE #查看某個包的信息 rpm -qf FILE #查詢某個文件是由那個包安裝生成的 rpm -qc PACKAGE #查詢某個包的配置文件 rpm -ql PACKAGE #查詢某個包的所有文件 rpm -qd PACKAGE #查詢某個包的文檔 rpm -qpi PACKAGE_FILE # rpm -qpl PACKAGE_FILE # rpm -qa #查詢該系統中裝了哪些包
11、卸載
格式: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
示例: rpm -e|--erase PACKAGE
實例: [root@centos6 ~]# rpm -q tree tree-1.5.3-3.el6.x86_64 [root@centos6 ~]# rpm -e tree [root@centos6 ~]# rpm -q tree package tree is not installed [root@centos6 ~]#
12、包校驗
格式: rpm {-V|--verify} [select-options] [verify-options]
選項: 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
(1)包來源合法性驗正及完整性驗正: 完整性驗正:SHA256 來源合法性驗正:RSA (2)公鑰加密: 對稱加密:加密、解密使用同一密鑰 非對稱加密:密鑰是成對兒的(public key: 公鑰,公開所有人;secret key: 私鑰, 不能公開) (3)導入所需要公鑰: rpm -K|checksig rpmfile檢查包的完整性和簽名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7 rpm -qa gpg-pubkey*
13、RPM數據庫
數據庫路徑:/var/lib/rpm
格式: rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之 否則,不執行任何操作 rebuilddb:重建 無論當前存在與否,直接重新創建數據庫
二、PRM的前端工具YUM
1、簡介
YUM(YellowdogUpdate Modifier),rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具。
yum repo(yum repository),存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)
2、yum客戶端配置文件
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
/var/log/yum.log:yum的日志
yum配置文件詳解(/etc/yum.conf) [main] #倉庫名稱 cachedir=/var/cache/yum/$basearch/$releasever #yum緩存的目錄,yum在此存儲下載的rpm包和數據庫,一般是/var/cache/yum keepcache=0 #是否保留本地緩存,0為不保存 debuglevel=2 #調試級別 logfile=/var/log/yum.log #日志文件的路徑 exactarch=1 #精確匹配系統版本arch的PACKAGE obsoletes=1 gpgcheck=1 #檢驗包的來源和完整性 plugins=1 #yum支不支持插件機制 installonly_limit=5 #支持同時安裝多少個包 bugtracker_url= #追蹤bug的url distroverpkg=centos-release #發行版版本號為centos-release Tips:可以用[root@centos6 ~]# man yum.conf查看詳解
yum倉庫配置文件(/etc/yum.repos.d/CentOS-Base.repo) [base] name=CentOS-$releasever - Base #對repository的描述 mirrorlist= #指向以鏡像服務器的地址 #baseurl= #指向yum倉庫的地址 gpgcheck=1 #檢驗包的來源和完整性 gpgkey= #gpg的密鑰文件路徑 enabled=1 #是否啟用此倉庫,1為啟用(默認啟用) repo_gpgcheck=1 #檢驗包的元數據信息是否安全,1為啟用
yum倉庫文件自定義 [base] name=Centos 6.8 #定義倉庫名稱 baseurl= #定義yum中的網址路徑 gpgcheck=1 #檢驗包的來源和完整性 gpgkey= #gpg的密鑰文件路徑(第一次yum安裝會導入密鑰) enabled=1 #啟用此倉庫
3、yum-config-manager命令
格式: yum-config-manager --add-repo= yum-config-manager --disable “倉庫名" 禁用倉庫 yum-config-manager --enable “倉庫名” 啟用倉庫
實例1: 用鏡像快速創建yum倉庫 [root@centos6 ~]# mount /dev/cdrom /mnt [root@centos6 ~]# yum-config-manager --add-repo=///mnt/Packages/ Loaded plugins: fastestmirror, refresh-packagekit adding repo from: ///mnt/Packages/ [_mnt_Packages_] name=added from: ///mnt/Packages/ baseurl=///mnt/Packages/ enabled=1 [root@centos6 ~]#
4、yum庫中的查詢、安裝、升級、檢查、卸載
顯示倉庫列表:
格式: yum repolist [all|enabled|disabled]
顯示程序包:
格式 yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1]
安裝程序包:
格式: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安裝)
升級程序包:
格式: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降級)
檢查可用升級:
格式: yum check-update
卸載程序包:
格式: yum remove | erase package1 [package2] [...]
5、yum中查看、緩存、搜索、事務歷史
查看程序包information:
格式: yum info [...]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
格式: yum provides | whatprovidesfeature1 [feature2] [...]
清理本地緩存:
格式: yum clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]
構建緩存:
格式: yum makecache
搜索:
格式: yum search string1 [string2] [...] #以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities:
格式: yum deplistpackage1 [package2] [...]
查看yum事務歷史:
格式: yum history [ info | list| packages-list | packages-info | summary| addon-info | redo| undo | rollback | new | sync | stats ] yum history yum history info 6 yum history undo 6
6、yum中的升級與包組管理
安裝及升級本地程序包:
格式: yum localinstallrpmfile1 [rpmfile2] [...] #可以用install替代 yum localupdaterpmfile1 [rpmfile2] [...] #可以用update替代
包組管理的相關命令:
格式: yum groupinstallgroup1 [group2] [...] yum groupupdategroup1 [group2] [...] yum grouplist[hidden] [groupwildcard] [...] yum groupremovegroup1 [group2] [...] yum groupinfogroup1 [...]
7、yum命令中的其他選項
選項: --nogpgcheck:禁止進行gpgcheck -y: 自動回答為“yes” -q:靜默模式 --disablerepo=repoidglob:臨時禁用此處指定的repo --enablerepo=repoidglob:臨時啟用此處指定的repo --noplugins:禁用所有插件
8、yum中的repo配置文件詳解
repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號 $arch: 平臺,i386,i486,i586,x86_64等 $basearch:基礎平臺;i386 $YUM0-$YUM9:自定義變量
示例: http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i384
9、yum自建倉庫命令
格式: yum createrepo[options] <directory>
原創文章,作者:Aleen,如若轉載,請注明出處:http://www.www58058.com/37750