rpm程序包管理器

linux程序包管理器:

協作用戶管理應用程序:安裝、升級、查詢、校驗、卸載等

軟件程序包生成過程:

    源代碼——》目標二進制格式–》組織成為一個或有限幾個包文件

    源代碼:程序員寫好的純文本文檔格式的代碼

    目標二進制:通過編譯器編輯成為的二進制代碼

程序包管理器:(每一個發行版管理器各有不同)

     debian:程序包以“.deb”為后綴

         dpt/dpkg:管理工具

     redhat:程序包以“ .rpm”為后綴

         rpm:管理工具

     S.u.SE:程序包以“.rpm”為后綴

         rpm:管理工具

源代碼命令格式:

    name-VERSION-.tar.gz

        VERSION:major(主)、minor(次)、release(發行號)

        major:重大版本發生改變才會更改此版本號

        minor:某一功能增加或減少會更改

        release:修復bug等一些小的操作


rpm包命令格式:

    name-Version-release.arch.rpm

        VERSION:major(主)、minor(次)、release(發行號)

        major:重大版本發生改變才會更改此版本號

        minor:某一功能增加或減少會更改

        release:修復bug等一些小的操作

        release.arch:rpm包的發行號(包括release.arch)

        arch:表示程序包適合應用在什么平臺架構上

         #redis-3.0.2-2.el7.i386.rpm

         redis:名字

         3.0.2:版本號分別一一對應

         2:第二次制作

         el7:rhel7

         i386:適用在架構兼容i386的cpu上

包的依賴關系

        在linux系統中,所有應用程序功能都非常單一,簡單(linux哲學思想之一,組合小程序完成復雜任務,除hadoop程序外)所以,一個程序包的運行可能會依賴于氣筒程序包功能的存在性,所以,程序包和程序包之間存在依賴關系。

        比如安裝A程序包,而A程序包依賴于B程序包的功能,而B程序包又依賴于D程序包,這就叫做依賴關系

自動解決包依賴關系的前端工具

         yum:rpm包管理的前端工具(rhel系列的都用此為前端工具)

         apt-get:deb包管理的前端工具(debain,Ubuntu系列)

         zyyper:suse的rpm包管理前端工具

         dnf:fedora 22以上的系統上的rpm管理前端工具

        

rpm包程序管理器:

        功能:將編譯好的應用程序的個組成文件打包成為一個或幾個程序包文件,從而更方便的實現程序包的安裝,升級,卸載,查詢等管理操作

    1.程序包的組成清單(每個包都是獨立的各自存在的清單)

        有安裝所需的文件清單、安裝及卸載時的腳本等。

    2.數據庫(公共的存放系統上所有程序包的信息數據庫)

        用于存儲程序包的名稱和版本、依賴關系、功能說明、安裝生成的個文件的文件路徑及校驗碼信息

Centos系統上rpm命令管理程序包

        功能:安裝、升級、查詢、校驗、數據庫維護等

rpm命令:

rpm [options][Package_file]

     安裝:-i  –install

   升級:-U  –update,  -F –freshen

   卸載:-e    –erase

   查詢:-q   –query

   校驗:-V  –verify

   數據庫維護:–rebulidb、–initdb

    通用選項,用于所有功能:

     -v:verbose 詳細信息

     -vv:更詳細的信息

1.安裝:

rpm  {-i|–install} [install-options] Package_file…

在安裝時必須使用的選項(i和–install)其中一個,在結合其他安裝選項及包文件地址進行安裝

    [install – options]安裝選線:

    -h:進度條
    --test:測試安裝,用于檢查安裝時所有的依賴關系及錯誤報告等信息
    --nodeps:忽略依賴關系進行安裝,(雖能安裝成功,但不一定能運行成功)
    --replacepkgs:覆蓋安裝,重新安裝并覆蓋原有文件
    --force:強制安裝

注:在安裝程序包時常用的組合選項:

  #rpm -ivh  PACKage_file

2.升級(會替換原有的程序包)

     rpm  {-U|–install} [install-options] Package_file…

     rpm  {-F|–install} [install-options] Package_file…

     -U:表示安裝和升級,當時用此升級程序時,如果原本程序不存在,則會安裝程序包

     -F:表示只升級程序包,如果原程序不存在,則不會進行升級或安裝操作)

     常用組合選項:

     rpm -Uvh  Packages_file (會替換原有的文件包)

     rpm -Fvh  Packages_file   

    

       可用于安裝選項(如:–test、nodeps、noplacepkgs、–force等)

     –oldpackage:降級安裝

     –force:忽略高版本強行降級到舊版本

注意:   

(1)不要對內核做升級操作;linux支持多內核版本并存,因此,直接安裝新版本內核

(2)如果某源程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.remnew)  

 

3.卸載: 

注意:卸載時、查詢時都是package name,安裝和升級都是package file

        rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

    –allmatches :卸載所有匹配指定名稱的程序包的各版本

    –nodeps :忽略依賴關系

    –test:測試卸載(會顯示依賴關系等信息,但不真正卸載)


4.查詢:(有兩類選項)***非常重要***

    rpm {-q|–query} [select-options] [query-options]

第一類:select-options:選擇選項

    查詢時直接給定包名

        #rpm -q package_name  //查詢指定的程序包是否安裝及其版本

    -a:查詢所有已安裝上的所有包

        #rpm -qa pachage_name   //可使用正則表達式進行匹配

    -f:查詢某文件是由哪個程序包安裝生成:

        #rpm -qf /path/to/somefile

    -p:查詢的未安裝的程序包執行查詢操作,(配合選項進行查看):

        # rpm -qpi package_file    //查詢指定的程序包的詳細信息

    –whatprovides CAPABILITY(能力):查詢指定的能力由哪個程序包提供:

        #rpm -q whatprovides bash //查詢bash能力是由誰(那個程序包)提供的

        #rpm -q –whatprovides “config(bash)”//查詢bash

    –whatrequires CAPAbILITY (能力):查詢指定的能力被哪個包所依賴

        #rpm -q –whatrequires bash //查詢指定的bash能力被那些個包所依賴

第二類query-options: 

    –changelog :查詢rpm包的changelog(包改變日志);(rpm包的,而非源碼包的)

        #rpm -q –changelog PACKAGE name 

    -l  :查詢某包安裝生成的文件列表

        #rpm -ql P—name

    -i : 查詢程序包的相關信息(如:版本號,大小、所屬的包組等)

        #rpm -qi P-name

    -c (configfles):查詢指定的程序包提供的配置文件;

        #rpm -qc bash(P-name)

    -d(docfiles):查詢指定的程序包提供的文檔

        #rpm -qd bash (P-name)

    –provides :列出指定的程序包提供的所有能力(CAPBILITY)

        #rpm -q –provides bash(P-name)//查看bash提供能力

        #rpm -q –whatprovides bash

    -R:查詢指定程序包所依賴的各種資源

        #rpm -q -R bash

    –scripts:查看程序包自帶的腳本片段

        #rpm -q –scripts bash

用法:

   – qi PACkAGE,-qf FILE,-qc PACkAGE ,-ql PAckage,-qd PACKAGE

   -qpi PACKAGE_file, -qpl PACKAGE_file ,-qpc PACHAGE_file


5.校驗:“V”

    查看程序包安裝之后有沒有被更改過

      可指定只檢查指定

      # rpm -V zsh

      #rpm -V –nofiles bash

    用rpm -V P-name  查看出來的結果顯示

   [root@CentOs6 mnt]# rpm -V tree
   [root@CentOs6 mnt]# rpm -Va
    S.5....T.  c /etc/bashrc
    S.5....T.  c /etc/profile   
     //如果對應的有顯示下面的選項,則改包發生了對應的改變,根據數據來進行查找(數據庫地址/var/lib/rpm)

       S:文件大小發生改變 (file Size differs)

       M:文件權限和類型發生改變(Mode differs (includes permissions and file type)

       5:文件內容發生改變MD5這一種指紋的內容已經不同(digest (formerly MD5 sum) differs)   

       D:設備的主次號發生改變( Device major/minor number mismatch)

       L:link路徑已經被改變(readLink(2) path mismatch)

       U:文件的屬主已被改變(User ownership differs)

       G:文件的屬組已被改變 (Group ownership differs)

       T:文件的時間戳(創建時間)發生改變 (mTime differs)

       P:文件所提供的能力發生改變 ( caPabilities differ)

包合法性驗證和完整性驗證:

        在軟件安裝之前我們最好是要對即將安裝的軟件進行合法驗證,這樣可以檢查出軟件是否來源合法,內容合法等,在一定程度上避免不必要的安全因素導致的不安全事件

來源和法性:

        由我們信任的制作者提供的依賴于制作者的數字簽名,簽名是作者使用自己的私鑰加密程序包的特性碼進行的。

內容合法性:

        包未被二次修改;完整性校驗成功,依賴于制作者提供的程序特征碼

驗證方式:

        安裝者用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的特征碼相比較

驗證其光盤中程序包的來源及完整性:

    先導入合法的KEY文件:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)

列如:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-6 //獲取程序包的秘鑰

驗證:rpm -K Package_file 用光盤中的key與程序包奧的秘鑰相對比

      –nosignature:不檢查來源合法性

     –nodigest:不檢查完整性

獲取并導入信任的包制作者的秘鑰:

對于Centos發行版來說:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)

驗證:

 (1)安裝此組織簽名的程序時,會自動執行驗證

(2)手動驗證:rpm -K Package-FILE

來源合法性驗證:

數字簽名:用自己的私鑰去加密對應數據的特征碼,這樣來源合法性和數據完整性得到驗證

制作者:

     1.使用單向加密法提取包的特征碼

     2.用自己的私鑰去加密特征碼,然后附加在文件后面

使用者:

     拿到包之后,要檢驗包的來源合法性,拿到制作者的公鑰。然后解密特征碼,如果能解密則通過。這樣包的來源合法性和數據完整性得到驗證

6.數據庫重建

rpm管理器數據路徑:/var/lib/rpm

查詢操作:通過此處的數據庫進行,

數據庫操作查詢:

   Centos6:man rpm

   Centos7:man rpmdb

rpm {–initdb} –rebuliddb

       –initdb:初始化數據庫,當前完全沒有數據庫存在時,可自動創建一個新的,如果有則不創建。

       –rebuliddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新構建,(無論當前數據庫存在與否,都會直接重建此庫;構建的數據庫存放在/var/lib/rpm中)

原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/37553

(0)
LiiLii
上一篇 2016-08-19 11:36
下一篇 2016-08-19 11:50

相關推薦

  • bash 基礎特性1

    bash 基礎特性 命令模式 systemctl set-default multi-user.target 圖形模式 systemctl set-default graphical.target   # rmdir [OPTION]…DIRECTORY…-p:刪除某錄后,如果其父目錄為空,則一并刪除之-v:顯示過程# mk…

    Linux干貨 2017-06-01
  • 內置數據結構,列表及其方法

    List:列表有若干個元素,元素可以是任意對象,元素有順序,可以使用索引和迭代,使用線性結構,使用[ ]進行描述,在內存中的空間是連續的,每個元素在內存中的空間是一樣的………列表是可變的,列表不能一開始就定義大小,列表索引不可以超界   列表索引l.index(),從左向右搜索,發現第一個匹配的,自動返回搜索的值的索引;匹配不到,拋出異常Value…

    Linux干貨 2018-03-25
  • 文件查找——藏的在深也沒用

    locate 依賴與事先構建好的數據庫查找          系統自動實現(周期性任務)          手動更新數據庫(updatedb) 工作特性    …

    Linux干貨 2016-08-15
  • Linux基礎知識(三)

     本文的主要內容是:  1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。  2、取出最后登錄到當前系統的用戶的相關信息。  3、取出當前系統上被用戶當作其默認shell的最多的那個shell。  4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全…

    Linux干貨 2016-10-03
  • 0803權限管理作業練習

    0803權限管理作業練習 題目:創建組sales,gid 3000,passwd :centos,sales 的組管理員admins:user2 將用戶user1,user2,user3加入到sales輔助組 希望user1創建新文件默認的所屬組為sales user2將用戶user3從sales組移除   答案:   &nbs…

    Linux干貨 2016-08-05
  • Shell腳本編程基礎中() (()) [ ] [[ ]] 的使用

    Shell腳本編程基礎中() (()) [ ] [[ ]] 的使用 () 生成子進程,括號內的命令將會在子進程中運行,父進程不能夠讀取在子進程中創建的變量 例: 新建個腳本文件,寫入 則執行結果為 $()相當于 ` `? ,返回括號內命令執行結果 (( )) 用作四則運算和邏輯運算,并且支持多個表達式 例: 當 (( )) 加$,則是將獲得表達式值,賦值給左…

    2017-11-26
欧美性久久久久