1、程序包管理概述php
1.程序包語言前端
(1)系統級開發:通常直接調用硬件java
C/C++:httpd, vsftpd, nginxnode
go語言python
(2)應用級開發:java/Python/perl/ruby/php:nginx
java: hadoop, hbase, (基於jvm虛擬機)c++
Python:openstack, (基於pvm虛擬機)web
perl: (perl解釋器)數據庫
ruby: (ruby解釋器)express
php: (php解釋器)
2.程序語言格式
(1)C/C++程序格式:
源代碼:文本格式的程序代碼;
編譯開發環境:編譯器、頭文件、開發庫
二進制格式:文本格式的程序代碼 --> 編譯器 --> 二進制格式(二進制程序、庫文件、配置文件、幫助文件)
(2)java/python程序格式:
源代碼:編譯成可以在其虛擬機(jvm/pvm)運行的格式;
開發環境:編譯器、開發庫
二進制
3.項目構建工具:
c/c++: make
java: maven
4.程序包管理器:要完成安裝、升級、卸載、查詢、校驗(校驗爲Linux全部)功能
(1)功能
將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操做;
(2)組成方式
1)程序包的組成清單(每一個程序包都單獨實現):文件清單、 安裝或卸載時運行的腳本
2)數據庫(公共):/var/lib/rpm/
程序包的名稱和版本、依賴關係、 功能說明、安裝生成的各文件的文件路徑及校驗碼信息...
(3)不一樣系列Linux所用程序包管理器:
debian:dpt, dpkg, ".deb"
redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;
S.u.S.E:rpm, ".rpm",
Gentoo:ports
ArchLinux:
5.包的命名格式
(1)源代碼:name-VERSION.tar.*z
VERSION:major.minor.release 主版本號.次版本號.發行號
(2)RPM包:name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的發行號,arch 平臺號
6.RHEL製做RPM包時會拆包:主包和支包,方便安裝所須要組件而非所有
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function(功能):devel, utils, libs, ...
7.程序包管理器前端工具:自動解決依賴關係;
yum:rhel系列系統上rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+系統上rpm包管理器的前端工具,yum的升級版;
8.獲取程序包的途徑:
(1)系統發行版的光盤或官方的文件服務器(或鏡像站點):
http://mirrors.aliyun.com、http://mirrors.sohu.com、http://mirrors.163.com
(2)各個項目本身的官方站點
(3)第三方組織:
1) EPEL等可靠地開源社區組織
2) 搜索引擎:http://pkgs.org、 http://rpmfind.net 、http://rpm.pbone.net
(4)自動編譯二進制代碼、製做
2、RPM包管理
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, --install
升級:-U, --update, -F, --freshen
卸載:-e, --erase
查詢:-q, --query
校驗:-V, --verify
數據庫維護:--builddb, --initdb
1.安裝:
(1)rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE ...
GENERAL OPTIONS(通用選項):
-v:verbose,詳細信息
-vv:更詳細的輸出
[install-options]:
-h:hash marks輸出進度條;每一個#表示2%的進度;
--test:測試安裝,檢查並報告依賴關係及衝突消息等;
--nodeps:忽略依賴關係;不建議;
--replacepkgs:從新安裝
--nosignature:不檢查包簽名信息,不檢查來源合法性;
--nodigest:不檢查包完整性信息;
注意:rpm能夠自帶腳本;
四類:--noscripts
preinstall:安裝過程開始以前運行的腳本,%pre , --nopre
postinstall:安裝過程完成以後運行的腳本,%post , --nopost
preuninstall:卸載過程真正開始執行以前運行的腳本,%preun, --nopreun
postuninstall:卸載過程完成以後運行的腳本,%postun , --nopostun
(2)實例演示
1)[root@localhost Packages]#rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm #安裝zsh程序,顯示過程
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:zsh-5.0.2-28.el7 ################################# [100%]
2.升級:
(1)rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升級或安裝 -Uvh; rpm -Uvh PACKAGE_FILE ...
-F:純粹升級,必須存在老版本,不支持安裝操做 -Fvh rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級;
--force:強制升級;
注意:
1) 不要對內核作升級操做;Linux支持多內核版本並存,可直接安裝新版本內核;
2) 若是某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件 不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供;
(2)實例演示
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm 準備中... ################################# [100%] 軟件包 zsh-5.0.2-28.el7.x86_64 已經安裝
3.卸載:
(1)rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸載全部匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關係
--test:測試卸載,dry run模式
(2)實例演示
1)[root@localhost Packages]#rpm -e --test zsh #測試卸載zsh
[root@localhost Packages]#rpm -ql zsh #查看zsh程序安裝所生成的全部文件列表
結論:--test不會真的卸載程序
[root@localhost Packages]# rpm -e --test zsh [root@localhost Packages]# rpm -ql zsh /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile
2)[root@localhost Packages] rpm -e zsh
#卸載程序
[root@localhost Packages]# rpm -e zsh [root@localhost Packages]# rpm -ql zsh 未安裝軟件包 zsh [root@localhost Packages]#
4.查詢:
(1)rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
-a, --all:查詢全部已經安裝過的包;
-f FILE:查詢指定的文件由哪一個程序包安裝生成;
-p, --package PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操做;
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個程序包提供;
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴;
[query-options]
--changelog:查詢rpm包的changlog;
-l, --list:程序安裝生成的全部文件列表;
-i, --info:程序包相關的信息,版本號、大小、所屬的包組,等;
-c, --configfiles:查詢指定的程序包提供的配置文件;
-d, --docfiles:查詢指定的程序包提供的文檔;
--provides:列出指定的程序包提供的全部的CAPABILITY;
-R, --requires:查詢指定的程序包的依賴關係;
--scripts:查看程序包自帶的腳本片段;
用法總結:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...d
(2)實例演示
1)[root@localhost Packages]# rpm -ql sed
#查詢程序安裝因此生成的全部文件列表
[root@localhost Packages]# rpm -ql sed
2)[root@localhost Packages]# rpm -qi sed
#顯示程序的相關信息
[root@localhost Packages]# rpm -qi sed Name : sed Version : 4.2.2 Release : 5.el7 Architecture: x86_64 Install Date: 2018年12月10日 星期一 05時28分49秒 Group : Applications/Text Size : 601208 License : GPLv3+ Signature : RSA/SHA256, 2014年07月04日 星期五 12時58分02秒, Key ID 24c6a8a7f4a80eb5 Source RPM : sed-4.2.2-5.el7.src.rpm Build Date : 2014年06月10日 星期二 09時01分55秒 Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://sed.sourceforge.net/ Summary : A GNU stream text editor Description : The sed (Stream EDitor) editor is a stream or batch (non-interactive)
3)[root@localhost Packages]# rpm -qd sed #查看包所提供文檔位置
[root@localhost Packages]# rpm -qd sed /usr/share/doc/sed-4.2.2/AUTHORS /usr/share/doc/sed-4.2.2/BUGS /usr/share/doc/sed-4.2.2/COPYING /usr/share/doc/sed-4.2.2/COPYING.DOC /usr/share/doc/sed-4.2.2/NEWS /usr/share/doc/sed-4.2.2/README /usr/share/doc/sed-4.2.2/THANKS /usr/share/doc/sed-4.2.2/sedfaq.txt.gz /usr/share/info/sed.info.gz /usr/share/man/man1/sed.1.gz
4)[root@localhost Packages]# rpm -qc zsh #顯示zsh相關的配置文件的位置
[root@localhost Packages]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
5)[root@localhost Packages]# rpm -q --changelog zsh #查詢zsh的改變日誌
# 從近到遠顯示出該程序每次改版更新的相關信息
[root@localhost Packages]# rpm -q --changelog zsh \* 四 2月 16 2017 Kamil Dudka <kdudka@redhat.com> - 5.0.2-28 - zero new space allocated in prompt buffer (#1408619) * 一 11月 28 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-27 - fix parsing of parameter subscript expression with NOEXEC (#1398740) * 一 10月 17 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-26 - fix crash while parsing the here-document syntax (#1374752) * 四 7月 14 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-25 - improve use of new command substitution in completion (#1356388) * 五 6月 10 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-24 - fix off-by-one error in completion utility cache code (#1344599)
5.校驗:
(1)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 #MD5校驗碼是否改變
D Device major/minor number mismatch #設備的主次版本號是否錯配
L readLink(2) path mismatch # readlink路徑是否錯配
U User ownership differs #用戶自己關係
G Group ownership differs # 用戶組自己關係
T mTime differs # 修改時間modify time
P caPabilities differ
(2)實例演示
測試安裝的程序的校驗信息
[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7_0.3.x86_64.rpm
[root@localhost Packages]# rpm -V php
# 忽略依賴關係安裝php程序,此處爲了測試使用
#測試程序的校驗信息
[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:php-5.4.16-45.el7 ################################# [100%] [root@localhost Packages]# rpm -V php 未知足的依賴關係 php-5.4.16-45.el7.x86_64: php-common(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 須要 php-cli(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 須要
6.包來源合法性驗正和完整性驗證:
(1) 檢驗方式
數字簽名:用私鑰加密對應程序的特徵碼
(2) 獲取並導入信任的包製做者的密鑰:
[root@localhost rpm-gpg]# cd /etc/pki/rpm-gpg/ [root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-7
(3)驗證:
1) 安裝此組織簽名的程序時,會自動執行驗證;
2) 手動驗正:rpm -K PACKAGE_FILE
在導入祕鑰的CentOS7.1上驗證
[root@localhost Packages]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 肯定
7.數據庫重建:
(1)rpm管理器數據庫路徑:/var/lib/rpm/
查詢操做:經過此處的數據庫進行;
(2)獲取幫助:CentOS命令查詢位置不一樣
CentOS 6:man rpm
CentOS 7:man rpmdb
(3)rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可實始化建立一個新的;當前有時不執行任何操做;
--rebuilddb:從新構建,經過讀取當前系統上全部已經安裝過的程序包進行從新建立;
[--dbpath DIRECTORY] :指明創建位置
(4)實例演示
1)在指定目錄下/rpmdb下初始化一個rpm的數據庫
注意:此時的庫是沒用的,因此大小和原來的庫不一樣
[root@localhost Packages]# rpm -initdb --dbpath /rpmdb/ [root@localhost Packages]# ll /rpmdb/ 總用量 440 -rw-r--r--. 1 root root 8192 12月 16 16:05 Basenames -rw-r--r--. 1 root root 8192 12月 16 16:05 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:05 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:05 __db.002 -rw-r--r--. 1 root root 107048 12月 16 16:05 __db.003 -rw-r--r--. 1 root root 8192 12月 16 16:05 Dirnames -rw-r--r--. 1 root root 8192 12月 16 16:05 Group -rw-r--r--. 1 root root 8192 12月 16 16:05 Installtid -rw-r--r--. 1 root root 8192 12月 16 16:05 Name -rw-r--r--. 1 root root 8192 12月 16 16:05 Obsoletename -rw-r--r--. 1 root root 12288 12月 16 16:05 Packages -rw-r--r--. 1 root root 8192 12月 16 16:05 Providename -rw-r--r--. 1 root root 8192 12月 16 16:05 Requirename -rw-r--r--. 1 root root 8192 12月 16 16:05 Sha1header -rw-r--r--. 1 root root 8192 12月 16 16:05 Sigmd5 -rw-r--r--. 1 root root 8192 12月 16 16:05 Triggername
2)查看/var/lib/rpm
[root@localhost Packages]# cd /var/lib/rpm [root@localhost rpm]# ll 總用量 101428 -rw-r--r--. 1 root root 5173248 12月 16 15:55 Basenames -rw-r--r--. 1 root root 16384 12月 13 21:25 Conflictname -rw-r--r--. 1 root root 311296 12月 16 16:02 __db.001 -rw-r--r--. 1 root root 90112 12月 16 16:02 __db.002 -rw-r--r--. 1 root root 1318912 12月 16 16:02 __db.003 -rw-r--r--. 1 root root 1376256 12月 16 15:55 Dirnames -rw-r--r--. 1 root root 32768 12月 16 15:55 Group -rw-r--r--. 1 root root 24576 12月 16 15:55 Installtid -rw-r--r--. 1 root root 81920 12月 16 15:55 Name -rw-r--r--. 1 root root 36864 12月 16 15:55 Obsoletename -rw-r--r--. 1 root root 92139520 12月 16 15:55 Packages -rw-r--r--. 1 root root 2527232 12月 16 15:55 Providename -rw-r--r--. 1 root root 614400 12月 16 15:55 Requirename -rw-r--r--. 1 root root 147456 12月 16 15:55 Sha1header -rw-r--r--. 1 root root 86016 12月 16 15:55 Sigmd5 -rw-r--r--. 1 root root 8192 12月 13 22:33 Triggername
參考博客:https://blog.51cto.com/xuding/1727510