一、源碼包和二進制(rpm包)包比較
1、使用源碼包安裝軟件也有幾點不足:
(1)安裝過程步驟較多,尤其是在安裝較大的軟件集合時(如 LAMP 環境搭建),容易出現拼寫錯誤。
(2)編譯時間較長,所以安裝時間比二進制安裝要長。
(3)因爲軟件是編譯安裝的,所以在安裝過程中一旦報錯,新手很難解決。
2、相比源碼包,二進制包是在軟件發佈時已經進行過編譯的軟件包,所以安裝速度比源碼包快得多(和 Windows 下軟件安裝速度相當)。也正是因爲已經進行通譯,大家無法看到軟件的源代碼。
3、使用 RMP 包安裝軟件具有以下 2 點好處:
(1)包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、査詢和卸載。
(2)安裝速度比源碼包安裝快得多。
4、與此同時,使用 RMP 包安裝軟件有如下不足:
(1)經過編譯,不能在看到源代碼。
(2)功能選擇不如源碼包靈活。
(3)需要有一定的順序,但是有時依賴性會非常強。
二、RPM包統一命名規則
1、一般格式
包名-版本號-發佈次數-發行商-Linux平臺-適合的硬件平臺-包擴展名
2、一般應用
例如,RPM 包的名稱是
httpd-2.2.15-15.el6.centos.1.i686.rpm
,其中:
(1)httped:軟件包名。這裏需要注意,httped 是包名,而 httpd-2.2.15-15.el6.centos.1.i686.rpm 通常稱爲包全名,包名和包全名是不同的,在某些 Linux 命令中,有些命令(如包的安裝和升級)使用的是包全名,而有些命令(包的查詢和卸載)使用的是包名,一不小心就會弄錯。
(2)2.2.15:包的版本號,版本號的格式通常爲主版本號.次版本號.修正號
。
(3)15:二進制包發佈的次數,表示此 RPM 包是第幾次編程生成的。
(4)el*:軟件發行商,el6 表示此包是由 Red Hat 公司發佈,適合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用。
(5)centos:表示此包適用於 CentOS 系統。
(6)i686:表示此包使用的硬件平臺,目前的 RPM 包支持的平臺如表 所示:
平臺名稱 | 適用平臺信息 |
---|---|
i386 | 386 以上的計算機都可以安裝 |
i586 | 686 以上的計算機都可以安裝 |
i686 | 奔騰 II 以上的計算機都可以安裝,目前所有的 CPU 是奔騰 II 以上的,所以這個軟件版本居多 |
x86_64 | 64 位 CPU 可以安裝 |
noarch | 沒有硬件限制 |
(7)rpm:RPM 包的擴展名,表明這是編譯好的二進制包,可以使用 rpm 命令直接安裝。此外,還有以 src.rpm 作爲擴展名的 RPM 包,這表明是源代碼包,需要安裝生成源碼,然後對其編譯並生成 rpm 格式的包,最後才能使用 rpm 命令進行安裝。
三、RPM包的安裝
1、自定義安裝路徑可以安裝到/usr/local/ 中,默認安裝一般安裝到:
安裝路徑 | 含 義 |
---|---|
/etc/ | 配置文件安裝目錄 |
/usr/bin/ | 可執行的命令安裝目錄 |
/usr/lib/ | 程序所使用的函數庫保存位置 |
/usr/share/doc/ | 基本的軟件使用手冊保存位置 |
/usr/share/man/ | 幫助文件保存位置 |
2、安裝命令格式
[root@localhost ~]# rpm -ivh 包全名
注意,涉及到包全名的命令,一定要注意路徑。
此命令中各選項參數的含義爲:
(1)-i:安裝(install);
(2)-v:顯示更詳細的信息(verbose);
(3)-h:打印 #,顯示安裝進度(hash);
3、安裝實例
[root@localhost ~]# rpm -ivh \
/mnt/cdrom/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm
Preparing...
####################
[100%]
1:httpd
####################
[100%]
4、此命令還可以一次性安裝多個軟件包,僅需將包全名用空格分開即可,如下所示:
[root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
如果還有其他安裝要求(比如強制安裝某軟件而不管它是否有依賴性),可以通過以下選項進行調整:
(1)-nodeps:不檢測依賴性安裝。軟件安裝時會檢測依賴性,確定所需的底層軟件是否安裝,如果沒有安裝則會報錯。如果不管依賴性,想強制安裝,則可以使用這個選項。注意,這樣不檢測依賴性安裝的軟件基本上是不能使用的,所以不建議這樣做。
(2)-replacefiles:替換文件安裝。如果要安裝軟件包,但是包中的部分文件已經存在,那麼在正常安裝時會報"某個文件已經存在"的錯誤,從而導致軟件無法安裝。使用這個選項可以忽略這個報錯而覆蓋安裝。
(3)-replacepkgs:替換軟件包安裝。如果軟件包已經安裝,那麼此選項可以把軟件包重複安裝一遍。
(4)-force:強制安裝。不管是否已經安裝,都重新安裝。也就是 -replacefiles 和 -replacepkgs 的綜合。
(5)-test:測試安裝。不會實際安裝,只是檢測一下依賴性。
(6)-prefix:指定安裝路徑。爲安裝軟件指定安裝路徑,而不使用默認安裝路徑。
5、apache 服務安裝完成後,可以嘗試啓動:
[root@localhost ~]# service 服務名 start|stop|restart|status
各參數含義:
(1)start:啓動服務;
(2)stop:停止服務;
(3)restart:重啓服務;
(4)status: 查看服務狀態;
例如:
[root@localhost ~]# service httpd start #啓動apache服務
服務啓動後,可以查看端口號 80 是否出現。命令如下:
[root@localhost ~]# netstat -tlun | grep 80
tcp 0 0 :::80:::* LISTEN
也可以在瀏覽器中輸入 Linux 服務器的 IP 地址,訪問這個 apache 服務器。
四、rpm包升級
[root@localhost ~]# rpm -Uvh 包全名
-U(大寫)選項的含義是:如果該軟件沒安裝過則直接安裝;若安裝過則升級至最新版本。
[root@localhost ~]# rpm -Fvh 包全名
-F(大寫)選項的含義是:如果該軟件沒有安裝,則不會安裝,必須安裝有較低版本才能升級。
五、RPM包的卸載
1、RPM 軟件包的卸載要考慮包之間的依賴性。例如,我們先安裝的 httpd 軟件包,後安裝 httpd 的功能模塊 mod_ssl 包,那麼在卸載時,就必須先卸載 mod_ssl,然後卸載 httpd,否則會報錯。如果卸載 RPM 軟件不考慮依賴性,執行卸載命令會包依賴性錯誤,例如:
[root@localhost ~]# rpm -e httpd
error: Failed dependencies:
httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.2-1.el6.i686
httpd-mmn = 20051115 is needed by (installed) php-5.3.3-3.el6_2.8.i686
httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.15-15.el6.
centos.1.i686
httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.4-10.el6.i686
httpd = 2.2.15-15.el6.centos.1 is needed by (installed) httpd-manual-2.2.
15-15.el6.centos.1 .noarch
httpd is needed by (installed) webalizer-2.21_02-3.3.el6.i686
httpd is needed by (installed) mod_ssl-1:2.2.15-15.el6.centos.1.i686
httpd=0:2.2.15-15.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686
2、RPM 軟件包的卸載很簡單,使用如下命令即可:
[root@localhost ~]# rpm -e 包名
-e 選項表示卸載,也就是 erase 的首字母。
RPM 軟件包的卸載命令支持使用“-nocteps”選項,即可以不檢測依賴性直接卸載,但此方式不推薦大家使用,因爲此操作很可能導致其他軟件也無法征程使用。
六、RPM包的查詢
1、查詢格式
[root@localhost ~]# rpm 選項 查詢對象
2、rpm -q:查詢軟件包是否安裝
[root@localhost ~]# rpm -q 包名
#-q 表示查詢,是 query 的首字母。
#例如,查看 Linux 系統中是否安裝 apache,rpm 查詢命令應寫成:
[root@localhost ~]# rpm -q httpd
httpd-2.2.15-15.el6.centos.1.i686
#注意這裏使用的是包名,而不是包全名。因爲已安裝的軟件包只需給出包名,
#系統就可以成功識別(使用包全名反而無法識別)。
3、rpm -qa:查詢系統中所有安裝的軟件包
"1、使用 rpm 查詢 Linux 系統中所有已安裝軟件包"
[root@localhost ~]# rpm -qa
libsamplerate-0.1.7-2.1.el6.i686
startup-notification-0.10-2.1.el6.i686
gnome-themes-2.28.1-6.el6.noarch
fontpackages-filesystem-1.41-1.1.el6.noarch
gdm-libs-2.30.4-33.el6_2.i686
gstreamer-0.10.29-1.el6.i686
redhat-lsb-graphics-4.0-3.el6.centos.i686
…省略部分輸出…
"2、這裏還可以使用管道符查找出需要的內容"
[root@localhost ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-15.el6.centos.1.i686
httpd-tools-2.2.15-15.el6.centos.1.i686
httpd-manual-2.2.15-15.el6.centos.1.noarch
httpd-2.2.15-15.el6.centos.1.i686
"相比rpm -q 包名命令,採用這種方式可以找到含有包名的所有軟件包。"
4、rpm -qi:查詢軟件包的詳細信息
"通過 rpm 命令可以查詢軟件包的詳細信息,命令格式如下:"
[root@localhost ~]rpm -qi 包名
#-i 選項表示查詢軟件信息,是 information 的首字母。
"想查看 apache 包的詳細信息,可以使用如下命令:"
[root@localhost ~]rpm -qi httpd
#Name : httpd Relocations:(not relocatable)
#包名
#Version : 2.2.15 Vendor:CentOS
#版本和廠商
Release : 15.el6.centos.1 Build Date: 2012年02月14日星期二 06時27分1秒
#發行版本和建立時間
Install Date: 2013年01月07日星期一19時22分43秒
Build Host:
c6b18n2.bsys.dev.centos.org
#安裝時間
Group : System Environment/Daemons Source RPM:
httpd-2.2.15-15.el6.centos.1.src.rpm
#組和源RPM包文件名
Size : 2896132 License: ASL 2.0
#軟件包大小和許可協議
Signature :RSA/SHA1,2012年02月14日星期二 19時11分00秒,Key ID
0946fca2c105b9de
#數字簽名
Packager:CentOS BuildSystem <http://bugs.centos.org>
URL : http://httpd.apache.org/
#廠商網址
Summary : Apache HTTP Server
#軟件包說明
Description:
The Apache HTTP Server is a powerful, efficient, and extensible web server.
#描述
"除此之外,還可以查詢未安裝軟件包的詳細信息,命令格式爲:"
[root@localhost ~]rpm -qip 包全名
#-p 選項表示查詢未安裝的軟件包,是 package 的首字母。
#注意,這裏用的是包全名,且未安裝的軟件包需使用“絕對路徑+包全名”的方式才能確定包。
5、rpm -ql:命令查詢軟件包的文件列表
(1)通過前面的學習我們知道,rpm 軟件包通常採用默認路徑安裝,各安裝文件會分門別類安放在適當的目錄文件下。使用 rpm 命令可以查詢到已安裝軟件包中包含的所有文件及各自安裝路徑,命令格式爲:
[root@localhost ~]# rpm -ql 包名
-l 選項表示列出軟件包所有文件的安裝目錄。
(2)例如,查看 apache 軟件包中所有文件以及各自的安裝位置,可使用如下命令:
[root@localhost ~]rpm -ql httpd
#/etc/httpd
#/etc/httpd/conf
#/etc/httpd/conf.d
#/etc/httpd/conf.d/README
#/etc/httpd/conf.d/welcome.conf
#/etc/httpd/conf/httpd.conf
#/etc/httpd/conf/magic
#…省略部分輸出…
同時,rpm 命令還可以查詢未安裝軟件包中包含的所有文件以及打算安裝的路徑,命令格式如下:
[root@localhost ~]# rpm -qlp 包全名
-p 選項表示查詢未安裝的軟件包信息,是 package 的首字母。
注意,由於軟件包還未安裝,因此需要使用“絕對路徑+包全名”的方式才能確定包。
(3)比如,我們想查看 bing 軟件包(未安裝,絕對路徑爲:/mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm)中的所有文件及各自打算安裝的位置,可以執行如下命令:
[root@localhost ~]rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
#/etc/NetworkManager/dispatcher.d/13-named
#/etc/logrotate.d/named
#/etc/named
#/etc/named.conf
#/etc/named.iscdlv.key
#/etc/named.rfc1912.zones
#…省略部分輸出…
5、rpm -qf:命令查詢系統文件屬於哪個RPM包
[root@localhost ~]# rpm -qf 系統文件名
rpm -ql 命令是通過軟件包查詢所含文件的安裝路徑,rpm 還支持反向查詢,即查詢某系統文件所屬哪個 RPM 軟件包。-f 選項的含義是查詢系統文件所屬哪個軟件包,是 file 的首字母。注意,只有使用 RPM 包安裝的文件才能使用該命令,手動方式建立的文件無法使用此命令。
例如,查詢 ls 命令所屬的軟件包,可以執行如下命令:
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686
6、rpm -qR:查詢軟件包的依賴關係
(1)格式:
[root@localhost ~]# rpm -qR 包名
使用 rpm 命令安裝 RPM 包,需考慮與其他 RPM 包的依賴關係。rpm -qR 命令就用來查詢某已安裝軟件包依賴的其他包,-R(大寫)選項的含義是查詢軟件包的依賴性,是 requires 的首字母。
(2)例子:
"1、查詢 apache 軟件包的依賴性"
[root@localhost ~]rpm -qR httpd
#/bin/bash
#/bin/sh
#/etc/mime.types
#/usr/sbin/useradd
#apr-util-ldap
#chkconfig
#config(httpd) = 2.2.15-15.el6.centos.1
#httpd-tods = 2.2.15-15.el6.centos.1
#initscripts >= 8.36
#…省略部分輸出…
"2、同樣,在此命令的基礎上增加 -p 選項,即可實現查找未安裝軟件包的依賴性。"
"例如,bind 軟件包尚未安裝
(絕對路徑爲: /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm),
查看此軟件包的依賴性可執行如下命令:"
[root@localhost ~]rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
#/bin/bash
#/bin/sh
#bind-libs = 32:9.8.2-0.10.rc1.el6
#chkconfig
#chkconfig
#config(bind) = 32:9.8.2-0.10.rc1.el6
#grep
#libbind9.so.80
#libc.so.6
#libc.so.6(GLIBC_2.0)
#libc.so.6(GLIBC_2.1)
#…省略部分輸出…
"這裏使用的也是“絕對路徑+包全名”的方式。"