1、程序包管理器簡述html
在計算機中,程序員編寫的程序源代碼是文本格式的,爲了讓計算機能識別這些代碼,須要經過編輯器將其轉換成二進制格式。前端
一個完整的編譯好的程序應該包括二進制程序文件、庫文件、配置文件和幫助文件。在Linux上,爲了能讓程序能正常運行,則須要將上述四個文件放在相應的目錄上並作好連接。如node
二進制程序文件:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin程序員
庫文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64shell
配置文件:/etc,/usr/local/local,/etc/ProgramName數據庫
幫助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/docvim
根據不一樣的需求,咱們須要對程序進行安裝、升級、卸載、查詢、校驗等各類操做,則須要對上述文件進行修改,這樣大大增長了程序管理的難度,爲了解決這個問題,程序包管理器就出現了。centos
程序包管理器能夠把應用程序編譯好的各組成文件打包成一個或有限幾個的「包」文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操做。緩存
程序包管理器也是一個應用程序,它包含了每一個程序包的組成清單(文件清單和安裝卸載時的腳本)和公共數據庫(程序包名稱版本,依賴關係,功能說明及安裝生成的各文件的文件路徑及校驗碼信系)。安全
在CentOS上,咱們經常使用的程序包管理器有rpm和yum。
2、rpm
一、rpm介紹
rpm全名Red Hat Package Manager,常見於Reahat系Liunx系統,用來對應該程序進行安裝、升級、卸載、查詢、校驗以及數據庫維護等操做。
二、rpm命名
rpm包的命名格式通常爲name-VERSION-release.OS.arch.rpm,其中VERSION爲major.minor.release。
name:包名
major:主要版本號,通常在重大更新時變動
minor:次要版本號
release-release:修訂的版本號,前一個爲程序釋放版本號,後一個爲程序bug或功能修復版本號
OS:適用的Linux發行版
arch:適用的平臺架構
zsh-5.0.2-14.1.noarch.x86_64.rpm
如上,zsh表示包名,5.0.2-14表示程序包的版本號,noarch表示全平臺可用,x86_64表示64位平臺架構可用。
三、rpm命令
rpm命令的通常用法爲:rpm [option] [package_file],根據option的不一樣,可分爲安裝、升級、卸載、查詢、校驗和數據庫維護等各類功能。
a)安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
經常使用選項:rpm -ivh PACKAGE_FILE ...
[install-options]:
-v:詳細的信息
-vv:更詳細的信息
-h:hash marks輸出進度條;每一個#號表示2%的進度
-test:測試安裝,檢查並報告依賴關係及衝突消息等
--nodeps:忽略依賴關係(不建議使用,可能會致使程序安裝好後沒法運行)
--replacepkgs:從新安裝
--nosignature:不檢查包簽名信息,不檢查來源合法性
--nodigest:不檢查包完整性信息
[root@centos7 Packages]# rpm -ivh --test zsh-5.0.2-7.el7.x86_64.rpm 警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY 準備中... ################################# [100%]
b)升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
經常使用格式:
rpm -Uvh PACKAGE_FILE ..
rpm -Fvh PACKAGE_FILE ..
[install-options]:
-U:升級或安裝
-F:只升級
--oldpackage:降級
--force:強制升級
[root@centos7 Packages]# rpm -Uvh zsh-5.0.2-7.el7.x86_64.rpm 警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY 準備中... ################################# [100%] 正在升級/安裝... 1:zsh-5.0.2-7.el7 ################################# [100%]
注意:(1)不要對內核作升級操做;Linux支持多內核版本並存,所以,直接安裝新版本內核。
(2)若是某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)。
c)卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
經常使用格式:
rpm -evh PACKAGE_NAME ..(卸載時填的是應用程序的名字,而不是包全名)
[install-options]:
--allmatches:卸載全部匹配指定名稱的程序包版本
--nodeps:忽略依賴關係(不建議)
--test:測試卸載
[root@centos7 Packages]# rpm -evh zsh 準備中... ################################# [100%] 正在清理/刪除... 1:zsh-5.0.2-7.el7 ################################# [100%]
d)查詢:
rpm {-q|--query}[select-options][query-options]
經常使用格式:
rpm -qi PACKAGE,
rpm -qf FILE
rpm -qc PACKAGE
rpm -ql PACKAGE
rpm -qd PACKAGE
rpm -qpi PACKAGE_FILE
rpm -qpl PACKAGE_FILE
rpm -qpc PACKAGE_FILE
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本
[root@centos7 Packages]# rpm -q openssh openssh-6.6.1p1-11.el7.x86_64
-a,-all:查詢全部已安裝過的包
-f FILE:查詢指定的文件由哪一個安裝包生成
[root@centos7 Packages]# rpm -qf /etc/passwd setup-2.8.71-5.el7.noarch
-p,--package:PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操做
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個程序包提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴
[query-options]
--changelog:查詢rpm包的changelog
-l,--list:程序包安裝生成的全部文件列表(可與p連用實現對未安裝程序包的查詢)
[root@centos7 Packages]# rpm -ql bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc ...
-i,--info:程序包相關的信息,版本號、大小、所屬的包組等(可與p連用實現對未安裝程序包的查詢)
[root@centos7 Packages]# rpm -qi bash Name : bash Version : 4.2.46 Release : 12.el7 Architecture: x86_64 Install Date: 2015年12月10日 星期四 23時44分52秒 Group : System Environment/Shells Size : 3663626 ...
-c,--configfiles:查詢指定的程序包提供的配置文件(可與p連用實現對未安裝程序包的查詢)
[root@centos7 Packages]# rpm -qc bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc
-d,--docfiles:查詢指定的程序包提供的文檔(可與p連用實現對未安裝程序包的查詢)
[root@centos7 Packages]# rpm -qd vim-minimal /usr/share/man/man1/ex.1.gz /usr/share/man/man1/rvi.1.gz /usr/share/man/man1/rview.1.gz /usr/share/man/man1/vi.1.gz /usr/share/man/man1/view.1.gz /usr/share/man/man1/vim.1.gz /usr/share/man/man5/virc.5.gz
--provides:列出指定的程序包提供的全部CAPABILITY
[root@centos7 Packages]# rpm -q --provides vim-minimal /bin/vi config(vim-minimal) = 2:7.4.160-1.el7 vi = 7.4.160-1.el7 vim-minimal = 2:7.4.160-1.el7 vim-minimal(x86-64) = 2:7.4.160-1.el7
-R,--requires:查詢指定的程序包的依賴關係(可與p連用實現對未安裝程序包的查詢)
[root@centos7 Packages]# rpm -qR bash /bin/sh config(bash) = 4.2.46-12.el7 libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) ...
--scripts:查看程序包自帶的腳本片斷
e)校驗:
rpm {-V|--verify} [select-options] [verify-options]
經常使用格式:
rpm -V package_name
[verify-options]:
--nodeps:不校驗依賴關係
--nodigest:讀取時不校驗包或標題摘要
--nofiles:不校驗包的任何屬性
--noscripts:不校驗腳本信息
--nosignature:不校驗簽名信息
[root@centos7 Packages]# vim /etc/skel/.bashrc [root@centos7 Packages]# rpm -V bash-4.2.46-12.el7.x86_64 S.5....T. c /etc/skel/.bashrc
結果輸出:
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:路徑改變
U User ownership differs:屬主改變
G Group ownership differs:屬組改變
T mTime differs:修改時間改變
P caPabilities differ:ca值改變
在生產中咱們須要對包來源合法性和完整性進行驗證:
來源合法性驗證:獲取並導入信任的包製做者的密鑰
rpm --import /path/to/keyfile(/etc/pki/rpm-gpg/keyfile)
[root@centos7 Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
完整性驗證:(1)安裝此組織簽名的程序時,會自動執行驗證
(2)手動驗證:rpm -K PACKAGE_FILE
爲了獲取安全的程序包,建議經過如下途徑:
(1)系統發行版的光盤或官方的文件服務器(或鏡像站點)
(2)項目的官方站點
(3)第三方組織:EPEL、http://pkgs.org或http://rpmfind.net或http://rpm.pbone.net
(4)本身編譯
f)數據庫重建
rpm管理器數據庫路徑: /var/lib/rpm
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY]
經常使用格式:
rpm --initdb --dbpath DIRECTORY
--initdb:初始化數據庫,當前無任何數據庫可初始化建立一個新的;當前有時不執行任何操做
--rebuilddb:重建數據庫,若是rpm數據庫損壞可經過此命令從新修復
[root@centos7 Packages]# rpm --rebuilddb --dbpath /var/lib/rpm
3、yum
一、yum介紹
在rpm包的介紹中,咱們也感覺到了依賴關係的麻煩之處,爲了解決依賴關係的問題,CentOS上又推出了更好用的程序包管理器yum。
yum全稱爲Yellow Dog Updater Modified,是一款在RedHat系Linux系統上的前端程序包管理器。它基於rpm包管理器,可以從指定的服務器自動下載RPM包而且安裝,能夠自動處理依賴性關係,而且一次安裝全部依賴的軟件包,無須繁瑣地一次次下載、安裝。
二、yum倉庫配置
yum 的理念是使用一箇中心倉庫(repository)管理一部分甚至一個分配的應用程序相互關係,根據計算出來的軟件依賴關係進行相關的升級、安裝、刪除等等操做,較好的解決了rpm所存在的依賴關係問題。因此在使用yum前,咱們必須進行yum倉庫的配置。
yum客戶端配置文件路徑爲:
/etc/yum.conf:爲全部倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
[root@centos7 yum.repos.d]# vim test.repo [base] name=test_base_repo baseurl=file:///mnt gpgcheck=0 enabled=1
倉庫的文件格式:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository(同一種鏡像不一樣路徑也可)
文件服務器:ftp://
nfs://
file:///
enable={0|1} 是否啓用該yum源
gpgcheck={0|1} 是否校驗包完整性
gpgkey=URL 校驗的密鑰文件路徑
enablegroups={0|1} 是否支持包的組管理
failovermethod={roundrobin|priority} 主yum源故障時,次要yum源的選擇方式
roundrobin:隨機 priority:優先級
cost=# 默認爲1000
三、yum命令的用法:
yum [options] [command] [package ...]
顯示倉庫列表:yum repolist
[root@centos7 yum.repos.d]# yum repolist 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 源標識 源名稱 狀態 !base test_base_repo 8,652 epel/7/x86_64 Fedora EPEL 8,508 repolist: 17,160
顯示程序包:yum list
安裝程序包:yum install [package1] [package2] [...]
[root@centos7 yum.repos.d]# yum install zsh 已加載插件:fastestmirror, langpacks base | 3.6 kB 00:00:00 Loading mirror speeds from cached hostfile 正在解決依賴關係 --> 正在檢查事務 ---> 軟件包 zsh.x86_64.0.5.0.2-7.el7 將被 安裝 --> 解決依賴關係完成 依賴關係解決 ====================================================================================================================== Package 架構 版本 源 大小 ====================================================================================================================== 正在安裝: zsh x86_64 5.0.2-7.el7 base 2.4 M 事務概要 ====================================================================================================================== 安裝 1 軟件包 總下載量:2.4 M 安裝大小:5.6 M Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安裝 : zsh-5.0.2-7.el7.x86_64 1/1 驗證中 : zsh-5.0.2-7.el7.x86_64 1/1 已安裝: zsh.x86_64 0:5.0.2-7.el7 完畢!
從新安裝:yum reinstall package1 [package2] [...]
升級程序包:yum update [package1] [package2] [...]
卸載程序包:yum remove | erase package1 [package] [...]
[root@centos7 yum.repos.d]# yum remove zsh 已加載插件:fastestmirror, langpacks 正在解決依賴關係 --> 正在檢查事務 ---> 軟件包 zsh.x86_64.0.5.0.2-7.el7 將被 刪除 --> 解決依賴關係完成 依賴關係解決 ====================================================================================================================== Package 架構 版本 源 大小 ====================================================================================================================== 正在刪除: zsh x86_64 5.0.2-7.el7 @base 5.6 M 事務概要 ====================================================================================================================== 移除 1 軟件包 安裝大小:5.6 M 是否繼續?[y/N]:y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在刪除 : zsh-5.0.2-7.el7.x86_64 1/1 驗證中 : zsh-5.0.2-7.el7.x86_64 1/1 刪除: zsh.x86_64 0:5.0.2-7.el7 完畢!
查看程序包:yum info [...]
[root@centos7 yum.repos.d]# yum info zsh 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 已安裝的軟件包 名稱 :zsh 架構 :x86_64 版本 :5.0.2 發佈 :7.el7 大小 :5.6 M 源 :installed 來自源:base 簡介 : Powerful interactive shell 網址 :http://zsh.sourceforge.net/ 協議 : MIT 描述 : The zsh shell is a command interpreter usable as an interactive login : shell and as a shell script command processor. Zsh resembles the ksh : shell (the Korn shell), but includes many enhancements. Zsh supports : command line editing, built-in spelling correction, programmable : command completion, shell functions (with autoloading), a history : mechanism, and more.
查看指定特性(能夠是某文件)由哪一個程序包所提供:yum provides | whatprovides feature1 [feature2] [...]
清理本地緩存:yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all]
構建緩存:yum makecache [fast]
搜索:yum search string1 [string2] [...]
[root@centos7 yum.repos.d]# yum search zsh 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile ================================================== N/S matched: zsh ================================================== autojump-zsh.noarch : Autojump for zsh herbstluftwm-zsh.noarch : herbstluftwm zsh completion support zsh-html.x86_64 : Zsh shell manual in html format zsh.x86_64 : Powerful interactive shell zsh-lovers.noarch : A collection of tips, tricks and examples for the Z shell
查看指定包所依賴的capabilities:yum deplist package1 [package2] [...]
查看yum事務歷史:yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[root@centos7 yum.repos.d]# yum history 已加載插件:fastestmirror, langpacks ID | 登陸用戶 | 日期和時間 | 操做 | 變動數 ------------------------------------------------------------------------------- 12 | root <root> | 2015-12-27 00:33 | Erase | 1 11 | root <root> | 2015-12-27 00:31 | Install | 1 10 | root <root> | 2015-12-25 18:02 | Install | 1 9 | root <root> | 2015-12-25 17:52 | Install | 2 8 | root <root> | 2015-12-25 17:07 | Install | 2 7 | root <root> | 2015-12-25 16:21 | Install | 4 6 | root <root> | 2015-12-25 16:04 | Install | 1 5 | root <root> | 2015-12-25 15:56 | Install | 3 4 | root <root> | 2015-12-25 15:46 | Install | 2 3 | root <root> | 2015-12-25 15:03 | Install | 1 2 | root <root> | 2015-12-20 20:34 | Install | 6 1 | 系統 <空> | 2015-12-10 23:43 | Install | 1137 history list
包組管理命令:yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
[root@centos7 yum.repos.d]# yum grouplist 已加載插件:fastestmirror, langpacks 沒有安裝組信息文件 Maybe run: yum groups mark convert (see man yum) Loading mirror speeds from cached hostfile Available environment groups: 最小安裝 基礎設施服務器 計算節點 文件及打印服務器 MATE 桌面環境 基本網頁服務器 虛擬化主機 帶 GUI 的服務器 ......
yum的命令行選項
--nogpgcheck:禁止進行gpg check
-y:自動回答爲「yes」
-q:靜默模式
--disablerepo=repoidglob:臨時禁止此處指定的repo
--enablerepo=repoidglob:臨時啓用此處指定的repo
--noplugins:禁用全部插件
[root@centos7 yum.repos.d]# yum -y -q install zsh [root@centos7 yum.repos.d]#
4、總結
rpm包更適用於本地程序包的管理,但它有着依賴關係的問題。在能連上互聯網時,咱們更傾向於使用yum來管理程序包,可是前提要配好一個安全的yum倉庫。
參考:www.magedu.com
http://kgdbfmwfn.blog.51cto.com/5062471/1690005
https://en.wikipedia.org/wiki/Yum
http://www.centoscn.com/CentOS/help/2014/1128/4200.html