CentOS程序包管理工具淺析

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.nethttp://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倉庫的配置。

wKiom1Z_qOvihjm1AADX1ApbBOM579.jpg


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://

          http://

          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

相關文章
相關標籤/搜索