3-5·Linux軟件包管理、rpm管理

一·軟件包分類

1)源碼包又稱腳本安裝包;
❶源碼包優點:
①開源,如果有足夠的能力,可以修改源代碼;
②可以自由選擇所需的功能;
③軟件是編譯安裝,所以更加適合自己的系統,更加穩定、效率更高;
④卸載方便;
❷源碼包缺點:
①安裝過程步驟較多,尤其安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤;
②編譯過程時間較長,安裝比二進制安裝時間長;
③因爲是編譯安裝,安裝過程中一旦報錯新手很難解決;

❸腳本安裝包:
所謂的腳本安裝包,就是把複雜的軟件包安裝過程寫成了程序腳本,初學者可以執行腳本實現一鍵安裝。但實際安裝的還是源碼包和二進制包
①優點:安裝簡單、快捷;
②缺點:完全喪失了自定義性;

2)二進制包又稱(RPM包)
❶二進制包的優點:
①包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載;
②安裝速度比源碼包安裝快的多;
❷二進制包的缺點:
①經過編譯,不再可以看到源代碼;
②功能選擇不如源碼包靈活;
③依賴性;

二·rpm包與腳本安裝包的區別

1)rpm包是經過源碼包編譯過的安裝包,編譯就是將源碼解釋爲機器可以認識的二進制語言的過程,安裝源碼包比rpm包複雜,因爲要經過一個編譯的過程,這個過程容易出錯,一旦出錯,就要對源碼進行修改,這個新手一般搞不定。
2)rpm包安裝速度快是它的優點,但是rpm包不是系統自己編譯的,效率不如源碼包。如果是生產環境,就要源碼包安裝,因爲效率高。
3)所謂的腳本安裝包,就是把服務的軟件包安裝過程寫成了程序腳本,初學者可以執行程序腳本實現一鍵安裝。但實際安裝的還是源碼包和rpm。例如LAMP一鍵安裝包。
4)在redhat中二進制包後綴是rpm,在debian系列裏如ubuntu二進制包的後綴是deb。但是它們都是二進制包。Linux下安裝軟件只有倆種格式:二進制包和源代碼包。

三·rpm包命名規則

1)RPM命令管理:RPM包命名規則

  • RPM包的來源:所有RPM包都在系統光盤的Packages目錄中
  • RPM包命名規則:軟件包名-軟件版本-軟件發佈的次數-適合的Linux平臺-適合的硬件平臺-包擴展名
  • RPM包依賴性:
    a、樹形依賴:a->b->c 解決方法:從後往前安裝
    b、環形依賴:a->b->c->a 解決方法:放在一條命令中安裝即可
    c、模塊依賴:庫文件依賴,庫也叫模塊,就是linux當中的函數,它有一個典型的特徵,就是以【.so.數字】結尾,它依賴的其實是一個文件,而不是軟件包。該文件藏身在某一個軟件包當中。我們只要將該文件所在的軟件包安裝上,該文件也就安裝了。解決方法:登錄www.rpmfind.net網站,輸入庫文件名稱查詢到對應的rpm包,然後安裝即可。

2)yum在線安裝:可以方便的解決依賴文件,一條命令就可以幫用戶從網上(本地也可以)找到安裝包進行安裝。

注:RedHat的yum是收費服務,而CentOS的yum是免費服務。

四·安裝與卸載rpm包

1)

rpm -ivh [包名]
RPM安裝:
-i(install) 安裝; 
-v(verbose) 詳細信息;
 -h(hash) 進度;
--nodeps 忽略依賴性;

Linux中的軟件安裝包有兩種、有兩種、有兩種:
1.源碼包,源碼包直接安裝源碼,但是速度太慢,由於需要編譯的原因。
2.rpm包,rpm包可以手動安裝,也可以yum在線安裝,手動安裝的缺點在於包之間的各種依賴關係非常複雜,yum在線安裝可以一條命令解決所有的依賴關係

建議新手使用Yum安裝

2)升級命令

rpm -Uvh [包全名]

(要升級到的軟件版本),如果沒有安裝這個軟件的任何版本,這個命令可以代替rpm -ivh。

3)卸載命令

rpm -e [包名]

(比如Httpd,不需要包全名),這個命令不同於安裝和升級,它可以在任何目錄運行,原理是去/var/lib/rpm目錄中的數據庫(如__db0)中查找對應的軟件包(已經安裝過的rpm包都在這些數據庫中),然後卸載。

1、–nodeps這個選項不管是在安裝和卸載的時候,最好都不要使用。
2、rpm安裝包安裝的位置是由軟件包開發者決定的,安裝後的位置會非常凌亂,所以最好是使用rpm -e命令卸載。

3、相對於二進制安裝,源碼安裝是指定安裝目錄了,卸載的時候只需要刪除對應的目錄就可以完全的卸載,不留一點殘餘。

在Ubuntu中:(類似於Yum)

    sudo apt-get update ——>更新軟件包列表
    sudo apt-get upgrade ——>更新(或者說升級嘛)所有已安裝的包

五·rpm包管理與查詢

1) 查詢是否安裝

 rpm -q [包名]                //查詢包是否安裝

-q (query) : 查詢

rpm -qa          //查詢所有已經安裝的RPM包
rpm -qa | grep httpd            //grep 後跟正則表達式, find 後跟通配符

-a (all) : 所有

2) 查詢軟件包詳細信息

rpm -qi [包名]                //查詢軟件信息
[root@localhost ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 31.el7
Architecture: x86_64
Install Date: 20171211日 星期一 151827秒
Group       : System Environment/Daemons
Size        : 3880537
License     : ASL 2.0 (infomation) 
rpm -qip [包全名]

-p (package) : 查詢未安裝報信息
有時遇到問題, 可根據未安裝包信息中所提供的網站進行查詢資料

3) 查詢包中文件安裝位置

rpm -ql [包名]
[root@localhost ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
.....

-l (list) : 列表
-p (package) : 查詢未安裝包信息
可查看包作者欲將包安裝的位置

4) 查詢系統文件屬於哪個 RPM 包

 rpm -qf [系統文件名]
[root@localhost ~]# rpm -qf /etc/httpd/ 
httpd-2.4.6-31.el7.x86_64

該文件必須是通過 RPM 包安裝的
-f (file) : 查詢系統文件屬於哪個軟件包

5) 查詢軟件包的依賴性

rpm -qR [包名]
[root@localhost ~]# rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-31.el7
/usr/sbin/useradd
systemd-units
systemd-units
systemd-units
/bin/sh
/bin/sh
.....

-R (requires) : 查詢軟件包的依賴性
-p (package) : 查詢未安裝包的信息

6)總結
1.查詢是否安裝:rpm -q 包名 (查詢包是否安裝,query) rpm -qa (查詢所有已經安裝的rpm包,all)
2.查詢軟件包詳細信息:rpm -qi 包名 (查詢軟件信息,information) rpm -qip 包名 (查詢未安裝包信息,package)
3.查詢包中文件安裝位置:rpm -ql 包名 (l , list,列表) rpm -qlp 包名 (查詢未安裝包信息,package)
4.查詢系統文件屬於哪個RPM包:rpm -qf 系統文件名 (查詢系統文件屬於哪個軟件包,file)
5.查詢軟件包的依賴性:rpm -qR 包名 (-R 查詢軟件包的依賴性 ,requires ) rpm -qRp 包名 (-p 查詢未安裝包信息 ,package)

六·rpm包校驗方式

1) RPM 包校驗

rpm -V [已安裝的包名]

-V (verify) : 校驗指定RPM包中的文件

執行 rpm -V httpd 後, 無任何提示, 代表該文件沒有被做任何修改

如果有遺漏或更改

 [root@localhost ~]# rpm -V httpd 
遺漏     /usr/lib64/httpd/modules/mod_access_compat.so
遺漏     /usr/lib64/httpd/modules/mod_actions.so
遺漏     /usr/lib64/httpd/modules/mod_alias.so
遺漏     /usr/lib64/httpd/modules/mod_allowmethods.so

判斷本地的apache 與官方給出的是否一致, 從而判斷是否被人修改

2) MD5校驗
用來校驗文件的完整性(文件內容是否被改變)
例如, 在官網下載的遊戲, 官方會給出MD5校驗碼, 將下載的遊戲通過專用的MD5校驗工具校驗後生成一份MD5校驗碼, 對比兩份校驗碼
是否一致, 不一致則說明,下載的文件可能丟包, 可能文件損壞, 可能被其他人動過手腳一直木馬等

3)RPM包中文件提取

rpm2cpio [包全名] | cpio -idv .文件絕對路徑          // 前面的[.]代表當前路徑,不能省略。[文件絕對路徑]和包裏文件的絕對路徑對應,也就是告訴了cpio要去包裏提取哪個文件。

注:cpio只知道提取文件,並不知道要從什麼地方提取文件,因此我們通常要使用【|】管道符或【<】輸入重定向告訴cpio我們應該從什麼設備去取出文件。

使用輸入重定向的cpio命令格式:

cpio 選項 < [文件|設備]

選項:
-i:copy-in模式,還原
-d:還原時自動新建目錄
-v:顯示還原過程

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