一、軟件包分類
1、軟件包分類
- 源碼包
- 二進制包
2、源碼包
2.1 源碼包什么樣
直接由編程語言寫成,沒經過編譯。類似於java的 .calss 文件,c的 .c文件。
[root@love2 ~]# vim hello.c
#include <stdio.h> int main (void) {
printf ("hello world\n");
}
[root@love2 ~]# gcc -c hello.c
# - c 生成“ .o ”頭文件。這里會生成 hello.o 頭文件,但是不會生成執行文件
[root@love2 ~]# gcc -o hello hello.o
# - o 生成執行文件,並制定執行文件名。這里生成的 hello 就是可執行文件
[root@love2 ~]# ./hello
hello world
# 執行 hello 文件
2.2 源碼包特點
源碼包的優點:
- 開源,如果有足夠的能力,可以修改源代碼
- 可以自由選擇所需的功能
- 軟件是編譯安裝,所以更加適合自己的系統,更加穩定也效率更高
- 卸載方便
源碼包有缺點:
- 安裝過程步驟較多,尤其安裝較大的軟件集合時(如 LAMP 環境搭建),容易出現錯誤
- 編譯過程時間較長,安裝比二進制安裝時間長
-因為是編譯安裝,安裝過程中出現問題比較難以解決
3、二進制包
3.1 二進制包分類
DPKG 包:是由 Debian Linux 所開發出來的包管理機制,通過 DPKG 包,Debian Linux 就可以進行軟件包管理。主要應用在 Debian 和 unbuntu 中。
RPM 包:是由 Red Hat 公司所開發的包管理系統。功能強大,安裝、升級、查詢和卸載 都非常簡單和方便。目前很多 Linux 都在使用這種包管理方式,包括 Fedora、CentOS、 SuSE 等。
3.2 特點
RPM 包的優點:
- 包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載
- 安裝速度比源碼包安裝快的多 RPM 包的
缺點:
- 經過編譯,不再可以看到源代碼
- 功能選擇不如源碼包靈活
- 依賴性。有時候復雜一點的軟件包依賴於別的軟件包才能安裝,而別的軟件包有依賴於另外的軟件包。非常麻煩。
3.3 RPM包依賴
1)樹形依賴 a---->b---->c
2)環形依賴 a---->b---->c---->a
以上兩種情況,我們可以用命令一次將所需要的軟件包全部安裝,就不需要考慮依賴性問題。
3)函數庫依賴 :a軟件包依賴與另外軟件包中的函數庫或者模塊,我們需要找到該模塊或者該函數庫對應的軟件包。可通過該網站查詢www.rpmfind.net 。
二、rpm安裝
1.rpm包命名規則
httpd-2.2.15-15.el6.centos.1.i686.rpm
#httpd 軟件包名
#2.2.15 軟件版本
#15 軟件發布的次數
#el6 軟件發行商。el6 是 RedHat 公司發布,適合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 適合的硬件平台。
RPM 包可以在不同的硬件平台安裝,選擇適合不同 CPU 的軟件版本,可以最大化的發揮 CPU 性能,所以出現了所謂的 i386(386 以上計算機都可以安裝)、
i586(586 以上的計算機都可以安裝)、i686(奔騰 II 以上計算機都可以安裝,目前所有的 CPU 都是 奔騰 II 以上,所以這個軟件版本居多)、
x86_64(64 位 CPU 可以安裝)和 noarch(沒有硬 件限制)等文件名了。
#rpm 包的擴展名 Linux 下文件不是靠擴展名區分文件類型,也就是 Linux 中擴展 名沒有任何含義。可是這里怎么又出現了擴展名呢?
原因很簡單,如果我不把 RPM 的擴展名 叫做“.rpm”,管理員很難知道這是一個 RPM 包,當然也就無法正確安裝了。
也就是說如果 RPM 包不用“.rpm”作為擴展名,系統可以正確識別沒有問題,可是管理員很難識別這是個什么樣的軟件。
包全名:如果操作的是未安裝軟件包,則使用包全名,而且需要注意絕對路徑
包名:如果操作的是已經安裝的軟件包,則使用包名即可,系統會生產 RPM 包的數據庫(/var/lib/rpm/)。
2.rpm包手工命令安裝
2.1 默認安裝位置
目錄 | 作用 |
---|---|
/etc/ | 配置文件目錄 |
/usr/bin/ | 可執行命令目錄 |
/usr/lib/ | 程序使用的函數庫保存位置 |
/usr/share/doc/ | 軟件基本使用手冊保存位置 |
/usr/lib/ | 幫助文檔保存位置 |
2.2 RPM 包安裝
1)安裝命令
rpm –ivh 包全名 # 注意一定是包全名。如果跟包全名的命令 要注意路徑,因為軟件包在光盤當中。
選項:
-i install 安裝(install)
-v 顯示更詳細的信息(verbose)
-h 打印#顯示安裝進度(hash)
--nodeps 不檢測依賴性安裝。軟件時會檢測依賴性,確定所需的底層軟件是否安裝。 如果沒有安裝則會報錯。不管依賴性,強行安裝。這樣不檢測依賴性安裝的軟件基本是不能使用的,所以不建議這樣做。
--replacefiles 替換文件安裝。如果安裝軟件包,可是包中部分文件已經存在,那么 正常安裝時候,會報錯“某個文件已經存在”從而導致軟件無法安裝,使用這個選項可 以忽視這個報錯,而覆蓋安裝。
--replacepkgs 替換軟件包安裝。如果軟件包已經安裝,此選項可以把軟件包重復安裝一遍。
--force 強制安裝。不管是否已經安裝,都重新安裝。就是—replacefiles 和 —replacepkgs 的綜合。
--test 測試安裝。不會實際安裝,只是檢測一下依賴性。
--prefix 指定安裝路徑。為安裝軟件指定安裝路徑,而不使用默認安裝路徑。注意: 如果指定了安裝路徑,軟件沒有安裝到系統默認路徑中的話,系統會找不到這些安裝的軟件,需要進行手工配置才能被系統識別。所以 rpm 包我們一般都采用默認路徑安裝。
2)服務啟動
[root@localhost ~]# service 服務名 start|stop|restart|status
參數:
start: 啟動服務
stop: 停止服務
restart: 重啟服務
status: 服務狀態
2.3 RPM 包升級
[root@localhost ~]# rpm –Uvh 包全名
選項:
-U(大寫) 升級安裝,如果沒有安裝過,系統直接安裝。如果安裝過的版本較舊,則升級到新版本(upgrade)
[root@localhost ~]# rpm –Fvh 包全名
選項:
-F(大寫) 升級安裝,如果沒有安裝過,則不會安裝。必須安裝有較舊版本,才能升級(freshen)
2.4 卸載
[root@localhost ~]# rpm -e 包名
選項:
--nodeps 不檢查依賴性
-e 卸載
2.5 查詢
1)查詢軟件包是否安裝
可以查詢軟件包是否安裝
[root@localhost ~]# rpm –q 包名
選項:
-q: 查詢(query)
2)查詢系統中的所有安裝軟件包
可以查詢 Linux 系統中所有已經安裝的軟件包
[root@localhost ~]# rpm -qa
選項:
-a:所有(all)
3)查詢軟件包的詳細信息
可以查詢已經安裝的某個軟件包的詳細信息
[root@localhost ~]# rpm –qi 包名
選項:
-i: 查詢軟件信息(information)
查詢還沒有安裝的軟件包的詳細信
[root@localhost ~]# rpm –qip 包全名
選項:
-p: 查詢沒有安裝的軟件包(package)
4)查詢軟件包中的文件列表
可以查詢已經安裝的軟件包中的文件列表和安裝的完整目錄
[root@localhost ~]# rpm –ql 包名
選項:
-l: 列出軟件包中所有的文件列表和軟件所安裝的目錄(list)
查詢還沒有安裝的軟件包中的文件列表和打算安裝的位置
[root@localhost ~]# rpm –qlp 包全名
選項:
-p: 查詢沒有安裝的軟件包信息(package)
5)查詢系統文件屬於哪個 RPM 包
[root@localhost ~]# rpm –qf 系統文件名
選項:
-f: 查詢系統文件屬於哪個軟件包(file)
6)查詢軟件包所依賴的軟件包
查詢系統中和已經安裝的軟件包有依賴關系的軟件包
[root@localhost ~]# rpm –qR 包名
選項:
-R: 查詢軟件包的依賴性(requires)
可以查詢沒有安裝的軟件包的依賴性嗎?加“-p”選項即可。例如,查看一下還沒有安裝的 httpd 軟件包的依賴包,可以執行如下命令:
[root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64
2.6 驗證
1)基本命令
[root@localhost ~]# rpm –Va
選項:
-Va 校驗本機已經安裝的所有軟件包
[root@localhost ~]# rpm –V 已安裝的包名
選項:
-V 校驗指定 RPM 包中的文件(verify)
[root@localhost ~]# rpm –Vf 系統文件名
選項:
-Vf 校驗某個系統文件是否被修改
2)驗證舉例
[root@localhost ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
驗證內容 文件類型 最后是文件名。
那么驗證內容中的 8 個信息的具體內容 如下:
S 文件大小是否改變
M 文件的類型或文件的權限(rwx)是否被改變
5 文件 MD5 校驗和是否改變(可以看成文件內容是否改變)
D 設備的主從代碼是否改變
L 文件路徑是否改變
U 文件的屬主(所有者)是否改變
G 文件的屬組是否改變
T 文件的修改時間是否改變
apache 配置文件的文件類型是 c,那么還有哪些文件類型呢?
c 配置文件(config file)
d 普通文檔(documentation)
g “鬼”文件(ghost file),很少見,就是該文件不應該被這個 RPM 包
l 授權文件(license file)
r 描述文件(read me)
2.7 數字證書
上面的校驗方法只能對已經安裝的 RPM 包中的文件進行校驗,但是如果 RPM 包本身就被動過手腳, 那么校驗就不能解決問題了。
我們就必須使用數字證書驗證了。首先必須找到原廠的公鑰文件,然后進行安裝 ,再安裝 RPM 包是。
用rpm命令安裝軟件時會去提取 RPM 包中的證書信息,然后和本機安裝的原廠證書進行驗證,如果驗證通過,則允許安裝;如果驗證不通過,則不允許安裝並警告。
1)數字證書位置
[root@love2 yum.repos.d]# ll /mnt/cdrom/RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6
2)數字證書導入
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
選項:
--import 導入數字證書
#查詢已經安裝的證書
[root@love2 yum.repos.d]# rpm -qa | grep gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3
2.8 RPM包中文件的提取
有時候我們會將某些軟件的文件誤刪,所以我們可以通過命令提取特定文件。
1)使用命令 rpm2cpio+ cpio
[root@localhost ~]# rpm2cpio 包全名 | cpio -iduv .文件絕對路徑
rpm2cpio 將 rpm 包轉換為 cpio 格式的命令
cpio 是一個標准工具,它用於創建軟件檔案文件和從檔案文件中提取文件
cpio還原時,命令解釋。
-i:copy-in 模式,還原
-v:顯示還原過程
-c:使用較新的 portable format 存儲方式
-d:還原時自動新建目錄
-u:自動使用較新的文件覆蓋較舊的文件
2)示例、假如我們不小心 將位於 /bin/find 刪掉了。我們可以通過以下步驟恢復
1、先查出該命令對應的軟件包名
[root@love2 ~]# rpm -qf /bin/find
findutils-4.4.2-9.el6.x86_64
2、提取文件到當前文件下
[root@love2 ~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv ./bin/find
3、將find命令移動到/bin目錄下
[root@love2 ~]# mv bin/find /bin/
三 、rpm包在線安裝(yum安裝)
3.1 yum源文件解析
yum 源配置文件保存在/etc/yum.repos.d/目錄中,文件的擴展名一定是“.repo”。也就是說, yum 源配置文件只要擴展名是“.repo”就會生效。
[root@love2 ~]# ls /etc/yum.repos.d/
bak CentOS-Media.repo
#由於我配置了光盤yum源,所以將其他 .repo 文件移動了一下。
配置文件詳情如下
[base]:容器名稱,一定要放在[]中
name:容器說明,可以自己隨便寫。
mirrorlist:鏡像站點,這個可以注釋掉。
baseurl:我們的 yum 源服務器的地址。默認是 CentOS 官方的 yum 源服務器,是可以使用的。 如果你覺得慢,則可以改成你喜歡的 yum 源地址。
enabled:此容器是否生效,如果不寫或寫成 enabled=1 則表示此容器生效,寫成 enabled=0 則表示此容器不生效。
gpgcheck:如果為 1 則表示 RPM 的數字證書生效;如果為 0 則表示 RPM 的數字證書不生效
gpgkey:數字證書的公鑰文件保存位置。不用修改。
3.2 搭建本地光盤yum源
第一步:放入 CentOS 安裝光盤,並掛載光盤到指定位置
[root@love2 ~]# mkdir /mnt/cdrom # 創建 cdrom 目錄,作為光盤的掛載點
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/ #掛載
第二步:修改其他幾個 yum 源配置文件的擴展名,讓它們失效,因為只有擴展名是“*.repo”的 文件才能作為 yum 源配置文件。當然你也可以將不需要的移動到另外的目錄。
自行選擇
第三步:修改光盤 yum 源配置文件 CentOS-Media.repo,參照以下方法修改:
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
# file:///media/cdrom/
# file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
第四步 清除原先yum緩存,並且建立新的緩存
yum clean all && yum makecache
3.3 yum命令
1)查詢
查詢 yum 源服務器上所有可安裝的軟件包列表
[root@love2 bak]# yum list
查詢 yum 源服務器中是否包含某個軟件包。
[root@love2 bak]# yum list bind
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安裝的軟件包
bind.x86_64 32:9.8.2-0.47.rc1.el6 c6-media
搜索 yum 源服務器上所有和關鍵字相關的軟件包
[root@love2 bak]# yum search apache #搜索包含有apache關鍵字軟件包
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
======================================================== N/S Matched: apache ========================================================
ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant
查詢指定軟件包的信息
[root@love2 bak]# yum info bind
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安裝的軟件包
Name : bind
Arch : x86_64
Epoch : 32
Version : 9.8.2
Release : 0.47.rc1.el6
Size : 4.0 M
Repo : c6-media
...
2)安裝
[root@love2 yum.repos.d]# yum -y install 包名
選項:
install 安裝
-y 自動回答 yes。如果不加-y,那么每個安裝的軟件都需要手工回答 yes
3)升級
[root@love2 yum.repos.d]# yum -y update 包名
# 升級指定的軟件包
選項: update: 升級
-y: 自動回答 yes
[root@love2 yum.repos.d]# yum -y update
# 升級本機所有軟件包
4)卸載
[root@love2 yum.repos.d]# yum remove 包名
# 卸載指定的軟件包
3.4 yum組管理命令
1)查詢可以安裝的軟件組
[root@love2 ~]# yum grouplist
# 列出所有可用的軟件組列表
2)查詢軟件組內包含的軟件
[root@love2 ~]# yum groupinfo 軟件組名
# 列出軟件組中包含的軟件
例:
[root@love2 bak]# yum groupinfo Emacs
已加載插件:fastestmirror, security
設置組進程
Loading mirror speeds from cached hostfile
組:Emacs
描述:GNU Emacs 可擴展、可自定義的文本編輯器。
必要的軟件包:
emacs
可選的軟件包:
ctags-etags
emacs-auctex
emacs-gnuplot
emacs-nox
3)安裝軟件組
[root@love2 ~]# yum groupinstall 軟件組名
# 安裝指定軟件組,組名可以由 grouplist 查詢出來
4)移除軟件組
[root@love2 ~]# yum groupremove 軟件組名
# 卸載指定軟件組