Linux程序包管理(一)RPM使用

Linux程序包管理


在早期我們使用源代碼的方式安裝軟件時,都需要先把源程序代碼編譯成可執行的二進制應用程序,然后進行安裝。意味著每次安裝軟件都需要經過 預處理 
–> 編譯 –> 匯編–> 鏈接, 這個復雜的過程。為簡化安裝步驟,程序提供商就在特定的系統上面編譯好相關程序的安裝文件并進行打包,提供給人們下載,我們只需要根據自己的系統去下載相應的安裝包進行安裝即可,這里可以對比理解,windows和linux在程序包方面有類似的方面,都是由程序開發者將應用程序編譯好打包供需要的人下載,不同的地方是windows平臺應用程序的開發者是將應用程序編譯打包成二進制格式的可執行程序,而linux平臺應用程序開發者則是將應用程序編譯打包成rpm格式的軟件包。 
那么既然應用程序都被打包,肯定需要一樣工具來管理程序包,這個工具就叫做程序包管理器.

什么是程序包管理器?

顧名思義“程序包管理器”,主要作用肯定是對軟件程序包進行管理的一種工具,那么我們在學習的時候就這理解。在Linux上,程序包管理器是用于管理Linux下軟件包的軟件,其主要功能是:

將編譯好的程序好的程序打包成一個文件或多個文件,可用于實現軟件的安裝、卸載升級、查詢等功能。


常見的程序包管理器有哪些?

兩大主流:

debian:deb,dpt。debian系。deb管理器,程序包以dpt結尾。
edhat:rpm,rpm。rhel系。 rpm管理器,程序包以rpm結尾。

程序包的組成部分以及安裝之后的存放路徑

– 二進制程序

存放路徑:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

– 庫文件

存放路徑:/lib64,/usr/lib64,/usr/local/lib64等

– 配置文件

存放路徑:/etc或者conf目錄中

– 幫助文件

存放路徑:/usr/share/man,/usr/local/share/man等


rpm包命名方式

  • name-VERSION-release.arch.rpm 

    • VERSION:major.minor.release 依次是主版本號.次版本號.發行號 
      ??release.arch:rpm自身的發行號.平臺編號

    • 常見的arch: 
      ??x86(32位):i386,i486,i586,i686 
      ??x86_64(64位):x64,x86_64,amd64 
      eg: 
      ??zsh-5.0.2-14.el7.x86_64.rpm 
      ???5.0.2:5(主版本號).0(次版本號).2(發行號) 
      ???14.el7.x86_64:14(rpm自身的發行號).el7(表示適用redhat 7).x86_64(適用64位操作系統)

    • 分包機制:對于一個程序來說,其可能有很多功能,包括常用功能和非常用功能,弱把所有的功能打包到一塊兒,無疑程序包增大許多,一些普通用戶無需使用的功能都需一并下載安裝,無形之中造成了資源的浪費,所以,程序包在打包時就出現了分包機制,主要分為主包和支包。 
      eg: 
      ??zlib-1.2.7-15.el7.x86_64.rpm –>主包 
      ??zlib-devel-1.2.7-15.el7.x86_64.rpm –>支包 
      ??zlib-static-1.2.7-15.el7.x86_64.rpm –>支包


管理程序包的方式:

使用報管理器:rpm 
使用前端管理工具:yum,dnf


獲取程序包的途徑


CentOS系統上rpm命令管理程序包:

包括安裝、卸載、升級、查詢、校驗、數據庫維護


  • 安裝: 
    ??rpm {-i|–install} [install-options] PACKAGE_FILE … 
    ?????-v: verbose 
    ?????-vv: 
    ?????-h: 以#顯示程序包管理執行進度;每個#表示2%的進度 
    ??rpm -ivh PACKAGE_FILE…

[root@Daniel Packages]# rpm -qa lshw
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]# rpm -ivh lshw-B.02.17-5.el7.x86_64.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...   1:lshw-B.02.17-5.el7               ################################# [100%]
[root@Daniel Packages]# rpm -qa lshw lshw-B.02.17-5.el7.x86_64
[root@Daniel Packages]# rpm -e lshw 
[root@Daniel Packages]# rpm -qa lshw 
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]#
     [install-options]
        --test: 測試安裝,但不真正執行安裝過程;dry run模式;
        --nodeps:忽略依賴關系;
        --replacepkgs: 重新安裝;
        --nosignature: 不檢查來源合法性;
        --nodigest:不檢查包完整性;
        --noscipts:不執行程序包腳本片斷;
    %pre: 安裝前腳本; --nopre
    %post: 安裝后腳本; --nopost
    %preun: 卸載前腳本; --nopreun
    %postun: 卸載后腳本;  --nopostun
[root@Daniel Packages]# rpm -ivh --test unixODBC-2.3.1-11.el7.x86_64.rpm 
準備中...                          ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -ivh --test unixODBC-2.3.1-11.el7.x86_64.rpm 
準備中...                          ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -ivh  unixODBC-2.3.1-11.el7.x86_64.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...   1:unixODBC-2.3.1-11.el7            ################################# [100%]
[root@Daniel Packages]# rpm -qa unixODBC-2.3.1-11.el7.x86_64
[root@Daniel Packages]#
  • 升級

    ?rpm {-U|–upgrade} [install-options] PACKAGE_FILE … 
    ?rpm {-F|–freshen} [install-options] PACKAGE_FILE … 
    ?upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”; 
    ?freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作; 
    ??rpm -Uvh PACKAGE_FILE … 
    ??rpm -Fvh PACKAGE_FILE …

[root@Daniel Packages]# rpm -Uvh unixODBC-2.3.1-11.el7.x86_64.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...   1:unixODBC-2.3.1-11.el7            ################################# [100%]
[root@Daniel Packages]# rpm -fvh unixODBC-2.3.1-11.el7.x86_64.rpm 
rpm:--hash (-h) 選項只能在軟件包安裝和擦除時指定
[root@Daniel Packages]# rpm -Fvh unixODBC-2.3.1-11.el7.x86_64.rpm 
[root@Daniel Packages]# echo $?
0
[root@Daniel Packages]#
    --oldpackage:降級;
    --force: 強行升級;

??注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核; 
?????(2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;


  • 查詢:

    rpm {-q|--query} [select-options] [query-options]
       [select-options]
            -a: 所有包
            -f: 查看指定的文件由哪個程序包安裝生成
            -p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作
            --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
            --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
        [query-options]
            --changelog:查詢rpm包的changlog
            -c: 查詢程序的配置文件
            -d: 查詢程序的文檔
            -i: information
            -l: 查看指定的程序包安裝后生成的所有文件;
            --scripts:程序包自帶的腳本片斷
            -R: 查詢指定的程序包所依賴的CAPABILITY;
            --provides: 列出指定程序包所提供的CAPABILITY;
        用法:
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
        -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
        -qa
[root@Daniel Packages]# rpm -qi time
Name        : time
Version     : 1.7
Release     : 45.el7
Architecture: x86_64
Install Date: 2016年02月21日 星期日 19時41分51秒
Group       : Applications/System
Size        : 47926
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 13時33分47秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : time-1.7-45.el7.src.rpm
Build Date  : 2014年06月12日 星期四 21時29分00秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem < 
Vendor      : CentOS
URL         :  
Summary     : A GNU utility for monitoring a program's use of system resources
Description :The GNU time utility runs another program, collects information aboutthe resources used by that program while it is running, and displaysthe results.

[root@Daniel Packages]# rpm -qf /etc/grub.d/
grub2-tools-2.02-0.29.el7.centos.x86_64
[root@Daniel Packages]# rpm -ql time 
/usr/bin/time/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/AUTHORS
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/ChangeLog
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

  • 卸載:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
          [--notriggers] [--test] PACKAGE_NAME ...
            -e:表示擦除,卸載
            --allmatcher:表示所有匹配到的
            --nodeps:不依賴,表示僅卸載當前包
            --noscripts:卸載時不執行腳本
            --notriggers:卸載時不執行觸發器
            --test:卸載測試,并不真正卸載
[root@Daniel Packages]# rpm -qa unixODBC
unixODBC-2.3.1-11.el7.x86_64
[root@Daniel Packages]# rpm -e --test unixODBC 
錯誤:依賴檢測失?。?nbsp;   
libesoobS.so.2()(64bit) 被 (已安裝) 
unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libmimerS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libnn.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbccr.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg1S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg2S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcminiS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要   
libodbcnnS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbctxtS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboplodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboraodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libsapdbS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtdsS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtemplate.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
unixODBC(x86-64) = 2.3.1-11.el7 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要
[root@Daniel Packages]# rpm -e --test unixODBC --nodeps
[root@Daniel Packages]# rpm -qa unixODBC
[root@Daniel Packages]# rpm -e unixODBC 
錯誤:依賴檢測失?。?nbsp;   
libesoobS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libmimerS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libnn.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbccr.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg1S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcdrvcfg2S.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcminiS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbcnnS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libodbctxtS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboplodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
liboraodbcS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libsapdbS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtdsS.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
libtemplate.so.2()(64bit) 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要    
unixODBC(x86-64) = 2.3.1-11.el7 被 (已安裝) unixODBC-devel-2.3.1-11.el7.x86_64 需要
[root@Daniel Packages]# rpm -e unixODBC --nodeps
[root@Daniel Packages]# echo $?
0

  • 校驗:

?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

?包來源合法性驗正及完整性驗正: 
?完整性驗正:SHA256 
?來源合法性驗正:RSA 
?公鑰加密: 
?對稱加密:加密、解密使用同一密鑰; 
?非對稱加密:密鑰是成對兒的, 
?public key: 公鑰,公開所有人 
?secret key: 私鑰, 不能公開 
?導入所需要公鑰: 
??rpm –import /PATH/FROM/GPG-PUBKEY-FILE 
CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7

原創文章,作者:Daniel-W,如若轉載,請注明出處:http://www.www58058.com/17055

(2)
Daniel-WDaniel-W
上一篇 2016-06-01
下一篇 2016-06-01

相關推薦

  • N26-第七周

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@localhost ~]# fdi…

    Linux干貨 2017-03-05
  • vim文本編輯器之快捷鍵滿天飛

    vim文本編輯器不同于nano的是其功能非常強大,強大的功能還支持各種快捷鍵,讓我們編輯文本的時候更方便更快捷。 本文將會按照下圖所展示的功能來對命令一一講解,           打開文件:       &n…

    Linux干貨 2016-08-11
  • 文件的查找命令 find 和 locate

    文件的查找命令 find 和 locate find 功能:實時查找工具,通過遍歷指定路徑完成文件查找 工作特點: ?  查找速度略慢?  精確查找?  實時查找?  可能只搜索用戶具備讀取和執行權限的目錄 語法:   find [OPTION]… [查找路徑] [查找條件] [處理動作] 查找路徑:指定具…

    Linux干貨 2016-08-16
  • 文件相關操作練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限: 2、編輯/etc/group文件,添加組hadoop: 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop: 4、復制/etc/sk…

    2017-11-17
  • 誤刪除libc.so.6時,該怎么恢復

           一周一周光陰似流水,轉瞬即逝,又到了該說點什么的時候了。這周老師給我們出了一道實驗題,內容是當你不小心誤刪除了libc.so.6這個庫文件時,怎么恢復。意不意外?驚不驚喜?那下面就來簡單說說(呃……為什么不是詳細說說呢,因為這個這個水平有限,也只能是理解多少,給…

    2017-08-11

評論列表(2條)

  • stanley
    stanley 2016-06-01 15:34

    已置頂,歡迎加入免檢家庭

    • Daniel-W
      Daniel-W 2016-06-01 22:11

      @stanley感謝老師

欧美性久久久久