程序的組成的部分:
編譯之前:源代碼
編譯之後:
二進制程序
庫文件
配置文件
幫助文件(手冊、文檔)
二進制程序:/bin, /sbin, /usr/bin,/usr/sbin, /usr/local/bin, /usr/local/sbin, /opt/bin, /opt/sbin
庫文件:/lib, /lib64, /usr/lib,/usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIR,/usr/local/{etc,conf}
幫助文件:/usr/share/man,/usr/share/doc, /usr/local/share/man
注意:有些特殊的應用程序可能會將可執行文件放置於libexec目錄;
常見的包管理器:
發行商 | 軟件管理機制 | 使用命令 | 在線升級機制(命令) |
Red Hat/Fedora/CentOS/SuSE | RPM | rpm | YUM(yum) |
Debian/Ubuntu | DRKG | dpkg | APT(apt-get) |
RPM是什麼?
RPM就是將你要安裝的軟件先編譯過,並且打包成爲RPM機制的安裝包,通過安裝好的軟件裏頭默認的數據庫(/var/lib/rpm)記錄這個軟件要安裝時必須具有的依賴屬性軟件,當安裝時,RPM會先去查詢數據庫(/var/lib/rpm)中的依賴關係是否滿足,若滿足則安裝,若不滿足,怎不予安裝。
RPM包的命名格式:
appname-VERSION-RELEASE.ARCH.rpm
VERSION:
major: 主版本號
minor: 次版本號
release: 發行號
RELEASE: 包自身的修訂號;有時候還會包含適用於的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6
ARCH: 適用的平臺
x86:i386, i486, i586, i686
x86_64:x86_64, amd64
powerpc:ppc
noarch: 跟平臺無關;
分包機制:
核心包,主包:命名與源項目名稱一致;
bash-4.3.2-2.centos6.x86_64.rpm
子包(支包):命令爲源項目名稱後附加支包中的文件提供的功能組成
bash-devel-4.3.2-2.centos6.x86_64.rpm
python-2.6.6-52.el6.x86_64.rpm
軟件名-主版本號.次版本號.發行號-發佈次數.適用平臺.rpm
獲取程序包的途徑:
官方站點,鏡像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com
rpm命令用法:
安裝:
rpm -ivh 包名
-i 安裝
-v 查看詳細安裝信息
-h 以安裝信息欄顯示安裝信息
例:rpm -ivh zsh
[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
例:一次安裝多個
[root@localhost Packages]# rpm -ivh php-common-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-5.3.3-38.el6.x86_64.rpm Preparing... ########################################### [100%] 1:php-common ########################################### [ 33%] 2:php-cli ########################################### [ 67%] 3:php ########################################### [100%]
例:從網絡上直接安裝 rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.e16.x86_64.rpm
--nodeps : 忽略依賴關係安裝,可能會導致該軟件無法正常使用
--replacefiles: 覆蓋安裝,覆蓋安裝的文件無法復原的
--repiacepkgs:重新安裝某個已經安裝的軟件
--force:--replacefiles和--repalcepkgs 的綜合
--test:測試一下該軟件是否能安裝在當前環境下,可以找出依賴關係
例:
[root@localhost ~]# rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm --test Retrieving ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm Preparing... ########################################### [100%]
升級與降級:
-Uvh | 後面接的軟件即使沒有安裝過,直接安裝;安裝過舊版,直接更新至新版 |
-Fvh | 後面接的軟件沒有安裝過,就不安裝;安裝過舊版,纔會升級至新版 |
--oldpackage | 降級到舊版本 |
注意:一定不要對內核執行升級;Linux允許多內核共存,所以,可以直接安裝多個不同版本內核;
注意:如果程序包的配置文件安裝後曾被修改,升級時,新版本的文件不會覆蓋老版本的配置文件,而把新版本的配置文件重命名(加後綴.rpmnew)後保存;
查詢:
RPM在查詢時,其實就是在查詢/var/lib/rpm/這個目錄下的數據庫文件
rpm -q 軟件名 | 查詢指定包是否已經安裝 | 例 rpm -q zsh |
rpm -qa | 查詢已經安裝的所有包 | 例 rpm -qa |grep "^z" |
rpm -qi 包名 | 查詢指定包的說明信息 | |
rpm -ql 包名 | 查詢指定包安裝後生成的文件列表 | |
rpm -qf 文件路徑 | 查詢指定文件是有哪個rpm包安裝生成的 | |
rpm -qc 包名 | 查詢指定包的配置文件 | |
rpm -qd 包名 | 查詢指定包安裝的幫助文件 | |
rpm -q --scirpts 包名 | 查詢指定包中包含的腳本 | |
rpm -qpi 包名 | 未安裝時查詢安裝後會生成的文件 | |
rpm -qR 軟件名 | 查詢指定包還要什麼文件的幫忙 | 例 rpm -qR php |
腳本有四類:
preinstall: 安裝過程開始之前執行的腳本;
postinstall: 安裝過程完成之後執行的腳本;
preuninstall: 卸載開始之前執行的腳本;
postuninstall: 卸載過程完成之後執行的腳本;
校驗:
rpm -V 已安裝的軟件名 | 查看該軟件所含的文件是否改動過 |
rpm -Va | 列出當前系統上所有可能被改變的文件 |
rpm -Vf 在系統上的某個文件 | 列出文件是否被改動過 |
例 rpm -Vf /etc/crontab
[root@localhost ~]# rpm -Vf /etc/crontab S.5....T. c /etc/crontab
常見用法:rpm -V PACKAGE_NAME
S (file Size differs) | 文件的容量大小是否被改變 |
M (Mode differs) | 文件的類型或文件的屬性(rwx)是否被改變了 |
5 (MD5 sum differs) | MD5這一種指紋碼的內容是否已經不同 |
D (Device major/minor number mis-match) | 設備的主/次代碼已經改變 |
L (readLink(2) path mis-match) | Link路徑已經被改變 |
U (User ownership differs) | 文件的屬主已經改變 |
G (Group ownership differs) | 文件的屬組已經改變 |
T (mTime differs) | 文件的創建時間已經改變 |
c | 配置文件(config file) |
d | 文檔文件(documentation) |
l | 授權文件(license file) |
r | 自述文件(read me) |
程序包的合法性驗正:
來源合法:
由我們信任的製作者提供
依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特性碼進行的;
內容合法:
包未被二次修改;完整性校驗成功
依賴於:製作者提供的程序特徵碼;
驗正方式:安裝者用同樣的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較;
驗正其光盤中程序包的來源及完整性:
rpm--import /path/to/RPM-GPG-KEY-FILE
例如:# rpm --import RPM-GPG-KEY-CentOS-6
CentOS的數字證書位於:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
驗正:rpm {-K|--checksig} PACKAGE_FILE
--nosignature: 不檢查來源合法性
--nodigest: 不檢查完整性
卸載:
rpm -e 軟件名
例 rpm -e zsh
注意:卸載要從最上層向下卸載
重建數據庫:
數據庫在/var/lib/rpm/目錄下
rpm --rebuildbd 無論當前數據存在與否,都會直接重建此庫
rpm --initdb: 初始化數據庫,即數據庫完全不存在時,可新建之