RPM及YUM工具介紹及使用(上)

  • 寫在前面

  1. 常見的計算機硬件平臺大致可以為分:x86、x86_64、amd64、ppc、arm、aarch64。軟件平臺,在Linux界則是指不同的Linux發行版。

  2. Linux系統中的軟件(非源碼)由于都是在不同的硬件+軟件平臺開發編譯完成之后發布的,因此同一個軟件會區分硬件和軟件環境而有不同的軟件包。在安裝軟件時應該選擇與自己的硬件和軟件平臺一致的軟件包進行安裝。通常在軟件包的名稱中即可見到所針對的硬件、軟件平臺的描述。如openssh-6.6.1p1-22.el7.x86_64,則是針對x86_64位硬件下的rhel系的軟件包。

  3. Linux系統中的軟件,很多軟件彼此之間有依賴關系,其實Windows下的軟件也是如此,因此在安裝某軟件時,被它所依賴的軟件需要先行安裝,在卸載時也需要同樣小心軟件間的依賴關系,避免盲目卸載而對其它軟件造成損壞。

  4. Linux系統中的軟件安裝及管理方式在不同的Linux發行版中的方式是不一樣的。目前比較主流的方式按照發行版的不同可以分為兩類:

  • dpkg
    這種方式主要適用于Debian系的Linux發行版使用,包括B2D和Ubuntu都使用這種方式。dpkg這種方式所使用的操作指令為dpkg

  • rpm
    這種方式是由著名的Linux發行廠商Red Hat開發出來的,后來被很多Linux發行版所采用,如Fedora,CentOS,SuSE等。rpm這種方式所使用的操作指令為rpm。

    這兩種方式的共同點就是,其所使用的軟件包是已經經過編譯的了,不需要我們手動在去進行編譯操作。

  • 軟件間的依賴關系
    在這些已經編譯好的軟件包中包含了記錄依賴關系等信息。當我們在Linux系統中安裝這些軟件包時,RPM程序會根據這一信息去查找系統中是否已安裝相應軟件,如果發現依賴軟件沒有安裝,安裝會失敗,也可以使用特定安裝選項--nodeps忽略依賴關系,然后將軟件包安裝上去,但非常不建議這么使用,除非明確知道所忽略的內容,對軟件的使用毫無影響。
    上文提到了RPM包會查找系統已安裝了哪些RPM包的軟件,這一查找過程依賴于RPM數據庫,在CentOS系統中這一數據庫位于/var/lib/rpm目錄中,它非常重要,記錄了系統上所有通過rpm方式安裝的軟件包信息。在對系統已安裝的rpm軟件進行安裝、升級、查詢、卸載操作時都依賴于這個數據庫。
    大致總結一下,使用rpm包安裝軟件,需要注意以下兩點:

    • 安裝軟件包的環境需要與該軟件包編譯時的環境一致。

    • 需要解決好軟件包的依賴關系。

  • SRPM包與RPM包

    • RPM包是指已經針對特定硬件和軟件平臺進行了編譯的包,可以拿到與之匹配的環境中直接進行安裝。其文件名一般形如:openssh-6.6.1p1-22.el7.x86_64。

    • SRPM包實際提供的是軟件源碼,包含configure和makefile,但它也同時包含了RPM軟件包所能夠提供的,如依賴關系說明以及所有RPM包能夠提供的信息。要通過這種包來安軟件,首先需要利用rpm工具進行按需編譯成最終的RPM包以后,然后使用RPM工具將軟件安裝到系統中。其文件名一般形如:openssh-6.4p1-8.el7.src.rpm,名稱中有src字樣。

RPM工具的使用

再嘮叨一次RPM工具的作用:可以用來對rpm軟件包進行安裝、升級、卸載、查詢和檢驗,以及RPM數據庫的維護。以下逐個講解其常用的用法。

  1. 安裝
    指令:rpm {-i|--install} [install-options] PACKAGE_FILE ...
    指令選項含義說明:
    -i或者--install 表示安裝后面跟的rpm軟件包,但如果只使用-i選項無法看到安裝的過程及安裝進程,要顯示安裝過程及進度將-v-h選項一起使用。
    install-options常用的有:
    --test 測試這一rpm包是否可以被安裝到系統中,而不會執行真正的安裝操作。
    --replacepkgs 對已經安裝過的軟件進行重新安裝,修改過的配置文件不會被覆蓋。
    --nosignature 在安裝過程中不進行包簽名信息和來源合法性驗證。
    --nodigest 在安裝過程中不檢查包的完整性。
    示例:
    rpm -ivh openssh-server-6.6.1p1-22.el7.x86_64
    不常用的install-options選項:
    --justdb 由于RPM數據庫產生錯誤或者損壞而查詢不到已安裝的RPM軟件包信息時,可以使用這一選項來更新其在RPM數據庫中的信息。
    --prefix 后面跟上某一路徑,可以將這一RPM軟件包安裝到這個路徑中。
    --nodeps 忽略軟件包之間的依賴關系。
    --force 強制安裝,它會忽略依賴關系,以及文件的沖突情況。
    PACKAGE_FILE 指的是RPM軟件包的完整名稱及URL,軟件包即在當前目錄時直接使用RPM包名稱即可??梢酝瑫r指定多個RPM包,即同時安裝這些RPM包。

  2. 升級
    指令:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...或者
    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    指令選項含義說明:
    -U 當系統中沒有老版本時會安裝后面的RPM包,有則進行升級。
    -F 只有系統中有老版本時才會執行安裝操作。
    --force 強制升級,不常用。
    --oldpackages 進行降級操作。
    注意:

    • 不要對Linux內核進行升級操作,Linux支持多內核共存,直接安裝新版的內核即可。

    • 如果某軟件包安裝以后其配置文件被修改過,升級時新版本的軟件包不會覆蓋原配置文件,會將新的配置文件以FILENAME.rpmnew的方式提供。

  3. 卸載
    指令:rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
    指令選項含義說明:
    -e 表示卸載后面所跟的RPM包名,而非RPM包文件名,。
    --allmatches 表示卸載所有匹配指定名稱軟件的所有版本。
    --nodeps 表示不卸載與此軟件有依賴關系的軟件。
    --test 表示模擬一次卸載的過程而不真正執行卸載操作。
    卸載操作需要注意,對于存在依賴關系的軟件進行卸載時,要從上往下卸載,不要直接將被依賴的軟件包先卸載。

  4. 查詢
    指令:rpm {-q|--query} [select-options] [query-options]
    指令選項含義說明:
    -q 單獨使用表示查詢后面所跟軟件包是否安裝,常結合select-options或query-options一起使用。
    常用的select-options:
    -a 查詢系統中所有已安裝的RPM軟件包名稱。
    -f 查詢后面所跟的文件是由哪個軟件安裝后產生。
    -p 對沒有安裝到系統中的RPM軟件包內的信息進行查詢。
    --whatprovides CAPABILITY 查詢指定的CAPABILITY是由哪個程序提供。
    --whatrequires CAPABILTY 查詢指定的CAPABILTY被哪個包所依賴。
    常用的query-options:
    --changelog 查詢所指定的RPM包中所包含的chagelog文件的內容。
    -c 列出所指定的RPM包提供的配置文件。
    -d 列出所指定的RPM包提供的man手冊及share文檔。
    -i 列出所指定的RPM包的詳細說明信息:版本,支持的架構,開發商、發布時間,安裝時間和說明等。
    -l 列出所指定的RPM包安裝后生成的所有文件和目錄。
    --provides 列出指定的RPM包所能夠提供的CAPABILTY,安裝或者沒有安裝都可。
    -R 列出指定RPM包的依賴關系。
    --scripts 查詢指定的程序包自帶腳本的內容。

  5. 校驗
    指令:rpm {-V|--verify} [select-options] [verify-options]
    常用選項及含義:
    -V 后面跟上軟件名稱,如果該軟件所包含的文件被更改過,才會被列出來。
    -Va 列出系統上所有可能被更改過的軟件相關文件。
    -Vp 后面跟RPM包的名稱,查詢這個包中可能被更改過的文件 。
    -Vf 查詢某軟件相關文件是否被更改過。
    對于驗證軟件包的來源合法性,需要借助數字簽名實現。使用rpm-import指令在系統中導入RPM包制作者的公鑰,然后可以使用rpm -k PACKAGE_FILE進行驗證,或者在安裝時rpm工具默認會自動進行驗證。

  6. RPM數據庫重建
    指令:rpm {--initdb|--rebuilddb}
    當RPM數據庫出現損壞時,可以使用--rebuilddb選項將數據庫重建;如果這個數據庫不存在,可以使用--initdb 重新創建一個數據庫。

注意:

RPM包文件名

  • 當包文件位于當前執行指令的目錄時,直接使用包名,如rpm -ivh a2ps-4.14-23.el7.i686.rpm

  • 當包文件位于其它路徑,然后跟上包文件名,如rpm -ivh /media/cdrom/Packages/a2ps-4.14-23.el7.i686.rpm。

  • 當包文件 位于網絡位置時,可以寫:rpm -ivh http://web.site.name/path/a2ps-4.14-23.el7.i686.rpm

RPM工具小結

  • 優點

    • 一般不用手動人工編譯,安裝難度低于源碼安裝方式。

    • 安裝之前會進行相關屬性,如硬盤容量、系統版本等檢查,避免軟件被錯誤安裝。

    • 采用RPM數據庫記錄系統所有已安裝軟件的信息,方便軟件包的管理。

  • 不足

    • 不能夠自動解決軟件包之間的依賴關系,對于依賴關系復雜的軟件,其安裝過程還是較繁瑣。

    為了解決這一不足,yum工具誕生了,yum工具的介紹及使用見下篇。

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

(0)
N24_lantianN24_lantian
上一篇 2016-12-26 21:12
下一篇 2016-12-26 22:36

相關推薦

  • 邏輯卷配置管理

    邏輯卷管理邏輯卷創建1、fdisk t 8e //修改分區類型 2、pvcreate  /dev/sd{a7,b} //創建物理卷pvs pvdisplay   //查看物理卷信息 3、vgcreate  vg0  /dev/sd{a7,b}  //創建卷組v…

    Linux干貨 2016-08-30
  • shell 編程(一)

    shell腳本編程:  編程語言的分類:根據運行方式    編程運行:源代碼->編譯器(編譯)--程序文件    解釋運行:源代碼-->運行啟動時解釋,由解釋器邊解釋運行; 根據其編程過程中功能的實現是調用庫還是調用外部的程序文件:  ?。螅瑁澹欤炷_本編程:      利用系統上的命令編程組件進行編程:   完整的編程:     利用庫或編程組件進行編程; …

    Linux干貨 2016-12-23
  • 文本處理三劍客–sed使用詳解

    處理文本的工具sed Stream EDitor     行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾?!?/p>

    Linux干貨 2017-05-21
  • 文本處理工具與正則表達式

    一、文本處理工具     1.文本查看命令           cat [OPTION]… [FILE]…         -n 顯示行…

    Linux干貨 2016-08-08
  • 有趣的bash腳本

    1、編寫腳本/root/bin/createuser.sh,實現如下功能:使 用一個用戶名做為參數,如果指定參數的用戶存在,就顯示 其存在,否則添加之;顯示添加的用戶的id號等信息 #!/bin/bash read -p “Please input username: ” n if id $n &> /dev/null;then echo “T…

    Linux干貨 2017-08-25
  • CentOS系統啟動

    Linux組成 Linux: kernel+rootfs kernel:  進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能 rootfs: 程序和glibc 庫:函數集合, function,  調用接口(頭文件負責描述) 過程調用:procedure ,無返回值 函數調用:function 程序:二進制執行文件 內核設計流派…

    2017-05-15
欧美性久久久久