在linux上,一個軟件一般由二進制程序,庫文件,配置文件和幫助文件組成。其中:php
在應用中,每次要安裝程序時經過找源代碼而後去編譯成二進制文件,這個過程要花費大量的時間,因此就有了程序包管理器。前端
程序包管理器的功能是:將編譯好的應用程序的各組文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操做。node
利用這種程序包管理器咱們只能手動解決包之間的依賴關係。所謂自動解決依賴關係,無非就是在某個程序安裝以前對該程序包文件進行分析看其都依賴哪些程序,而後將這些程序一併安裝,從而解決軟件包的依賴文件,咱們將自動解決依賴關係的工具稱爲解決依賴關係的前端工具。linux
Linux發行版本主要分爲兩類:類RedHat和類Debain,不一樣的發行版本上所使用的程序包管理器各不相同,下圖是各發行版本所使用的程序包管理器:數據庫
一個rpm程序包的格式爲:httpd-2.2.15-59.el7.x86_64.rpm,其中:segmentfault
rpm程序包管理器主要實現的功能有:安裝、升級、查詢、校檢以及數據庫維護centos
rpm命令格式:ide
rpm [OPTIONS] [PACKAGE_FILE]
命令選項:函數
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: 不檢查包完整性信息; --noscripts: 安裝時不執行腳本文件
注意:rpm能夠自帶腳本
rpm包中的腳本分四類: preinstall: 安裝過程開始以前運行的腳本,%pre,--nopre postinstall: 安裝過程完成以後運行的腳本,%post,--nopost preuninstall: 卸載過程真正開始執行以前運行的腳本,%preun,--nopreun postuninstall: 卸載過程完成以後運行的腳本,%postun,--nopostun
安裝命令演示
(1) 安裝一個rpm軟件包
(2) 忽略依賴關係安裝
安裝php的rpm包時出現依賴關係錯誤,此時能夠忽略依賴關係對軟件包進行安裝
(3) 測試安裝
(4) 從新安裝
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U: 升級或安裝 -F: 升級 rpm -Uvh PACKAGE_FILE... rpm -Fvh PACKAGE_FILE...
[install-options]
--oldpackage: 降級
--foece: 強制升級
注意:
(1)不要對內核作升級操做;Linux支持多內核版本並存,所以,直接安裝新版內核; (2)若是某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供;
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--allmarches: 卸載全部匹配指定名稱的程序包的各版本; --nodeps: 忽略依賴關係; --test: 測試卸載,dry run模式
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包的changelog;
-l, --list: 程序包安裝生成的全部文件列表;
-i, --info: 程序包相關的信息,版本號、大小、所屬組等;
-c, --configfiles: 查詢指定的程序提供的配置文件;
-d, --docfiles: 查詢指定的程序包提供的文檔;
--provides: 列出指定程序包提供的全部CAPABILITY;
-R, --require: 查詢指定程序包的依賴關係;
--scripts: 查詢程序包自帶的腳本片斷;
查詢命令演示
(1) 查詢指定的安裝後的程序
(2) 查詢指定的文件由哪一個程序安裝包生成
(3) 查詢程序包安裝後生成的文件列表或者某程序的文件列表
(4) 列出指定程序包提供的全部CAPABILITY
(5) 查詢指定的CAPABILITY由哪一個包提供
(6) 查詢指定的CAPABILITY被哪一個包所依賴
(7) 查詢指定程序包的依賴關係
(8) 查詢程序包自帶的腳本片斷
軟件包的校驗通常是驗證其來源的合法性以及軟件包完整性的驗證;來源合法性驗證利用數字簽名奇數,完整性驗證利用單項函數加密技術。
軟件包校驗命令
rpm {-V|--verify} [select-options] [verify-options]
校驗過程:
(1) 首先獲取並導入信任的包製做者的密鑰
對於CentOS發行版來講,利用下面的命令進行密鑰的導入:
# rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
(2) 驗證
a. 安裝此組織簽名的程序時,會自動執行驗證;
b. 手動驗證:rmp -K PACKAGE_FILE
rpm管理器數據庫的路徑/var/lib/rpm/
獲取rpm數據庫工具的幫助
CentOS 6: man rpm
CentOS 7: man rpmdb
數據庫重建的命令
rpm {--initdb|--rebuilddb}