我的學習記錄--Linux (CentOS) 程序安裝包管理,rpm

概述:

    因爲一個應用程序是由很多文件所組成,所以安裝卸載非常複雜,爲了讓用戶更加方便的管理應用程序。所以引入了程序打包管理。主要包括:安裝,卸載,升級,查詢,檢驗。


常見的包管理器:

.deb: Debian研發

.rpm: Red Hat研發(Linux上的包管理器公共標準,故我學習的爲rpm)


常見的CPU平臺:(所以選擇應用程序安裝的時候,一定選擇和自己CPU所匹配的版本)

x86:i386, i486, i586, i686

x86_64: x86_64, amd64


分包機制:

核心包:主包,主要程序。

子包:爲程序增加附加功能的包。


程序包獲取途徑:(務必在正規渠道獲得程序包)

1、系統的發行光盤鏡像或官方站點(或鏡像服務器)

    推薦站點:

        http://mirrors.sohu.com

        http://mirros.163.com

        http://mirros.aliyun.com

2、程序包的官方站點

3、可信任的第三方組織

4、程序包搜索引擎

    推薦站點:

        http://rpmfind.net

        http://rpm.pbone.net

---------------------------------------------------------

準備實驗環境:

    1.準備CentOS6.6虛擬機

    2.掛載CentOS6.6系統光盤DVD1

    wKiom1UpJ-eAnCRYAAB3H-ruDWU654.jpg


rpm命令:


安裝:(安裝新的程序包)

    rpm -i [install-options] PACKAGE_FILE1 ...      

            -h:hash,以#號來表示安裝進度

    -v:顯示安裝過程中的詳細信息

-vv:詳細

-vvv:更詳細

            --test:不執行真正的安裝過程,而僅報告依賴關係及衝突信息

     wKiom1UpKsvA2r-MAADBndXvUUg148.jpg

    程序包之間是存在依賴關係的:因爲程序包是由衆多目的單一的小程序組成,結果導致他們之間存在相關性,所以有時候安裝某個程序的時候,它會提示你缺少某些包。如下:

    wKiom1UpLFSiJGMlAAEB27aMqBI531.jpg

            --nodeps:忽略依賴關係(能安裝成功,但未必能運行)

            --replacepkgs:覆蓋安裝(重新安裝,並覆蓋原有文件)

            --force:強制安裝

升級:(升級已經安裝的程序包)

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

        -U:升級或安裝(若已安裝則升級,若未安裝則安裝)

    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

        -F:僅升級

        -v,-h,--test,--nodeps,--force 常用選項用法同上

        --oldpackage:降級到舊版本

    注意:

        1.一定不要對內核執行升級!

        2.一般來說升級不會覆蓋用戶修改過的配置文件,新配置文件名會加後綴(rpmnew)保存


卸載:(移除已經安裝的程序包)

    rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

        rpm -e PACKAGE_NAME... :卸載,簡單用法

        --nodeps:忽略依賴關係

        --test:卸載測試

        --allmatches:若一個程序包安裝有多個版本,則卸載所有版本

    注意:若程序包配置文件曾被修改,卸載時,配置文件不會刪除,會加後綴(rpmsave)保存


查詢:(查詢某包是否安裝,以及檢查安裝的所有包,查看某包信息)

    rpm {-q|--query} [select-options] [query-options] PACKAGE_NAME ...

        [select-options]:

            1.查詢某包或某些包是否安裝

                rpm -q PACKAGE_NAME...

                

            2.查詢已經安裝的所有包

                rpm -qa

            3.查詢某文件是由哪個包安裝生成(如:inittab這個文件則是由initscripts這個包生成)

                rpm -qf /PATH/TO/SOMEFILE

                wKioL1UpNouzGl11AABTiTjVO4w984.jpg

            4.查詢尚未安裝的包文件的相關信息

                rpm -p (通常組合以下選項使用)

                    -pqi 未安裝包簡要信息

                    -pqc 未安裝包生成的配置文件

                    -pql 未安裝包將生成的文件列表

        [query-options]:

            1.查詢某包的簡要說明信息

                rpm -qi PACKAGE_NAME

            2.查詢某包安裝生成的文件列表

                rpm -ql PACKAGE_NAME

            3.查詢某包安裝完成後生成的配置文件

                rpm -qc PACKAGE_NAME

            4.查詢某包安裝完成後生成的幫助文件

                rpm -qd PACKAGE_NAME

            5.查看程序歷史版本以及改版的信息

                rpm -q --changelog PACKAGE_NAME

            6.查詢某包提供的capabilities(功能,能力)

                rpm -q --provides PACKAGE_NAME

            7.查詢某包所依賴的capabilities(查詢依賴關係)

                rpm -q --requires PACKAGE_NAME

            8.查詢某包安裝或卸載時執行的腳本

                rpm -q --scripts PACKAGE_NAME


校驗:(查詢包安裝生成的文件是否發生了改變)

        rpm {-V|--verify} [select-options] [verify-options]

        

    常見用法:rpm -V PACKAGE_NAME

        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

             wKiom1UpRNLzGXxZAAA1UE9DLQw409.jpg


程序包的合法性驗證:

      來源合法:

  由我們信任的製作者提供

  依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特徵碼進行的;

      內容合法:

  包未被二次修改;完整性校驗成功

  依賴於:製作者提供的程序特徵碼:

  驗證方式:安裝者用通用的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較;如果一樣則說明內容合法;

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

    導入公鑰:rpm -import /path/to/RPM-GPG-KEY-FILE

            驗證:rpm {-K|--checksig} PACKAGE FILE

            wKiom1UpS-CTKlNVAAFnwE1gr3Q034.jpg

            --nosignnature:不檢查來源合法性

    --nodigest:不檢查完整性

rpm管理器數據庫:/var/lib/rpm(每安裝一個程序,安裝信息都會存放在此目錄下)

      重建數據庫:

            --initdb:初始化數據庫,即數據庫完全不存在,可新建之;

    --rebuilddb:無論當前數據存在否,都會直接重建此庫;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章