程序以源代碼方式提供:
需要編譯成特有的格式:二進制的文件纔可以使用。
部分程序還有依賴關係。
程序的組成部分:
編譯前:源代碼。
編譯後:(應用程序的組成部分)
二進制程序
庫文件(項目裏面共享的代碼模塊或研發接口)
配置文件(命令行選項)
幫助文件(手冊或文檔)
位置:
二進制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/opt/bin,/usr/local/sbin,/usr/local/sbin,
庫文件:/lib,/lib64, /usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc ,/etc/DIR ,/usr/local/{etc,conf}
幫助文件: /usr/share/{man,doc},/usr/local/share/man
特殊應用程序可執行位置於libexec目錄:
程序包管理器:
應用程序打包:有特定格式。對兼容格式程序包管理。
程序包:
源代碼的壓縮包(壓縮比依此大):appname-VERSION.tar.gz,appname-VERSINON.tar.bz2,appname-VERSION.tar.xz
常見的包管理器:
.deb :Debian
.rpm :Red hat Package Manager(RPM is Package Manager)
rpm 包命名格式:
appname-VERSION-RELEASE.APCH.rpm
VERSION:
major :主版本號
minor :次版本號
release:發行號
RELEASE:包自身修訂號(適用於的OS信息)
ARCH:適用的平臺
x86:i386,i486,i686
x86_64:amd64,x86_64
powerpc:ppc
noarch :跟平臺無關
場景:某程序30種功能,10種常用,其餘不常用。
解決思路:
分包機制。
核心包:主包:命名於源項目名稱一致
例如:
子包(支包):源項目名後附加描述功能。
rpm 是 Hed Hat的核心內容。其實:安裝過程就是調用並安裝這些程序包的過程。
rpm命令的作用:RPM Package Manager 對 linux 系統上的rpm程序包操作。
包括;安裝,卸載,升級,查詢,校驗等。
先查找rpm:
使用光盤鏡像:
掛載光盤:mkdir /media/cdrom(創建mount-point)
[root@172 cdrom]# mount -o ro -t iso9660 /dev/sr0 /media/cdrom/
[root@172 /]# mount (檢驗是否掛載完成)
/dev/sr0 on /media/cdrom type iso9660 (ro)
安裝準備:查看掛載光盤裏的rpm
[root@172 /]# cd /media/cdrom/
[root@172 cdrom]# ls
CentOS_BuildTag RELEASE-NOTES-en-US.html
EFI repodata
EULA RPM-GPG-KEY-CentOS-6
GPL RPM-GPG-KEY-CentOS-Debug-6
p_w_picpaths RPM-GPG-KEY-CentOS-Security-6
isolinux RPM-GPG-KEY-CentOS-Testing-6
Packages TRANS.TBL
[root@172 cdrom]# cd Packages/
[root@172 Packages]# ls
顯示一堆的rpm包,這裏以zsh-4.3.10-7.el6.x86_64.rpm爲例:
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE
還有就是:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升級或安裝)
例子:(如安裝過。可使用 rpm -e PACKAGE_NAME卸載)
[root@172 Packages]# rpm -U -v zsh-4.3.10-7.el6.x86_64.rpm
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing packages for installation...
zsh-4.3.10-7.el6
[root@172 Packages]# rpm -i zsh-4.3.10-7.el6.x86_64.rpm(安裝)
[root@172 Packages]# which zsh (測試安裝與否)
/bin/zsh
常見選項:
-v 顯示安裝過程的詳情(v可以最多連用3個 例如:-ivvvh v的次數多顯示過程越仔細。)
-h 以#開頭表示安裝進度
例子:安裝組合命令 -ivh
[root@172 Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
1:zsh ########################################### [100%]
--test 測試安裝,並非實際安裝 (主要用途報告依賴關係及衝突信息)
[root@172 Packages]# rpm -ivh --test zsh-4.3.10-7.el6.x86_64.rpm
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
[root@172 Packages]# which zsh
/usr/bin/which: no zsh in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
安裝前測試(顯示)依賴關係:
[root@172 Packages]# rpm -ivh --test php-5.3.3-38.el6.x86_64.rpm
warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
php-cli(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64
php-common(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64
程序包之間的依賴關係:是最大的安裝難題。
由linux思想決定:衆多單一小程序,程序間存在相關性。
兩個程序間循環依賴的 。需要兩個程序一同安裝。
忽略依賴關係:有可能運行失敗。(如某些需要依賴文檔,可以忽略,只會降低用戶體驗不影響使用)
--nodeps :忽略依賴關係
root@172 Packages]# rpm -ivh --test --nodeps php-5.3.3-38.el6.x86_64.rpm
warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
覆蓋安裝: 重新安裝並覆蓋原有文件。(會破壞修改的配置文件)
--replacepkgs
package zsh-4.3.10-7.el6.x86_64 is already installed(確認程序已經安裝,下面覆蓋)
[root@172 Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
1:zsh ########################################### [100%]
強制安裝(導致衝突時。或級別改變時,明確要安裝才用)
--force
改變目錄(允許改變路徑的包纔有此功能)
--relocate
雜項:
--replacefiles(安裝時只替換指定文件)
--oldpackage(程序包降級)後面跟低版本文件
--nopre(安裝前腳本不執行)
--nopost(安裝後腳本不執行)
--nopreun(卸載前腳本不執行)
--nopostun(卸載後腳本不執行)
升級:(操作和安裝相似)(沒有下載成功軟件。在yum完後在不上這個試驗過程)
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升級或安裝)
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...(單純升級)
常用組合:-Uvh -Fvh
支持:--test --nodeps --foce --oldpackage
&& 不要對內核執行升級。(linux 允許多內核共存)
方法是:裝多個版本內核,啓動時要選擇需要的。&&
&&程序包的配置文件被修改,升級時:新版本的配置文件不會覆蓋老版本的文件。而是把新版本文件重命名後保存(.rpmnew)後綴名。
卸載:
移除已經安裝的工具包
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--allmatches (如果一個程序安裝多個版本,一次全卸載)
--nodeps (如果一個程序包依賴,忽略依賴,卸載。)
(--test | dry-run 模式)
卸載時:改變的配置文件會被保存。(以zsh爲例子:zshrc.rpmsave)
查詢:
是否安裝包及包的詳細信息。
rpm {-q|--query} [select-options] [query-options]
[query-options]:
1.查詢某包的簡要信息 -i
[root@172 Packages]# rpm -qi zsh
Name : zsh Relocations: (not relocatable)
Version : 4.3.10 Vendor: CentOS
Release : 7.el6 Build Date: Mon 25 Nov 2013 01:40:59 AM CST
Install Date: Wed 08 Apr 2015 09:36:26 AM CST Build Host: c6b9.bsys.dev.centos.org
Group : System Environment/Shells Source RPM: zsh-4.3.10-7.el6.src.rpm
Size : 5009102 License: BSD
Signature : RSA/SHA1, Mon 25 Nov 2013 03:33:46 AM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://zsh.sunsite.dk/
Summary : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor. Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements. Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.
2.查詢某包安裝生成的文件列表 -l
[root@172 Packages]# rpm -ql php
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
3.查詢某包安裝完成後生成的配置文件 -c
[root@172 Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
4.查詢安裝生成的幫助文件(文檔) -d (rpm -qd RPM_NAME)
5.查看某包製作時隨版本變化的changelong信息
--changelog(rpm -q --changelog php)
6.查詢某包提供的capabilities:
rpm -q --provides php
7.查詢某包依賴的capabilities
--requires
8.查詢某包卸載和安裝時執行的腳本
rpm -q --scripts zsh
腳本分四類
preinstall:安裝過程開始之前執行的腳本
postinstall:安裝過程完成之後執行的腳本
preuninstall:卸載過程開始前執行腳本
postuninstall:卸載過程執行完成腳本
查詢所有的安裝包(-a)
(rpm -qa |wc -l)
可以使用glob 例如:顯示所有安裝的PHP的包
[root@172 Packages]# rpm -qa |grep "php.*"
php-common-5.3.3-38.el6.x86_64
php-cli-5.3.3-38.el6.x86_64
php-5.3.3-38.el6.x86_64
查詢某文件是由那個包安裝生成。(-f)
[root@172 Packages]# rpm -qf /etc/zshrc
zsh-4.3.10-7.el6.x86_64
查詢尚未安裝的包文件的相關信息 -p
可接[query-options]的所有選項
注意的是 後面查詢的是:PRM_FILE
校驗:
rpm {-V|--verify} [select-options] [verify-options]
[root@172 Packages]# rpm -V zsh
S.5....T. c /etc/zshrc
顯示改變後的屬性
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
程序包合法性認證:
來源合法
由信任的製作者提供
依賴於:製作者的數字簽名(非對稱加密算法)
簽名是作者使用自己的私鑰加密程序包的特徵碼進行的
內容合法
完整性校驗成功(包未被二次修改)
依賴於:製作者提供的程序特徵碼
驗證方式:安裝者用同樣的特徵碼提取算法提取程序的特徵碼,並與原作者提供的相比較。
[root@172 cdrom]# rpm --import RPM-GPG-KEY-CentOS-6(導入公鑰)
[root@172 cdrom]# cd Packages/
[root@172 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
--nosignature :不檢查來源的合法性
--nodigest: 不檢查完整性
rpm 管理器數據庫: /var/lib/rpm
重建數據庫:
--initdb 初始化數據庫(數據庫完全不存在可以新建)
--rebuliddb 重建數據庫(無論數據存在與否)