Linux是一個免費使用和自由傳播的類Unix操作系統,是一個遵循POSIX規範的多用戶、多任務、的操作系統。支持32位和64位硬件。linux支持的軟件種類很多,安裝方法也格式各樣,而在linux系統的使用過程中,軟件包的管理是避免不了的,在linux
衆多發行版中又以rpm包最爲流行;RPM是RPM is Package Manager(RPM軟件包管理器)的遞歸縮寫;現在已被 OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用;可以算是公認的行業標準了。
安裝軟件之前,我們就得簡單的瞭解一下軟件包的組成;
軟件包主要由二進制文件、庫文件、配置文件、幫助文件等這重要的部分組成。他們分別存放在系統的那些目錄?
二進制程序:/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
軟件包的命名方式:
源代碼包的命名方式 :appname-VERSION.tar.gz, appname-VERSION.tar.bz2, appname-VERSION.tar.xz
軟件名-版本號.tar.gz...
包管理器(rpm)格式 : appname-VERSION-RELEASE.ARCH.rmp
appname : 表示軟件的名稱
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: 跟平臺無關;
例如 : xen-4.1.3-2.el6.x86_64.rpm
如何獲取程序包呢?
1、系統的發行光盤鏡像或官方站點(或站點鏡像服務器);
掛載發行光盤:mount -r /dev/cdrom /media/cdrom
官方站點,國內鏡像:mirrors.sohu.com mirrors.163.com mirrors.aliyun.com
2、程序包的官方站點
例如: http://www.apache.org/
3、第三方組織:epel
4、搜索引擎
http://rpmfind.net http://rpm.pbone.net http://pkgs.org
rpm包安裝
rpm包的安裝用到的命令是rpm 可以通過which rpm查找到命令的路徑
rpm {-i|--install} [install-options] PACKAGE_FILE1 PACKAGE_FILE2...
-h: hash,以#來表示安裝進度;
-v : --verbose:顯示安裝過程中的詳細信息;增加的v的次數來顯示安裝過程中的更詳細信息;
--test:測試安裝; 不執行真正的安裝過程,而僅報告依賴關係及衝突信息等;
--nodeps : 忽略依賴關係
--replacepkgs : 覆蓋安裝:重新安裝並覆蓋原有的文件
--force : 強制安裝
--oldpackage : 將新版的rpm包降級爲老版本
--relocate : 對允許修改安裝路徑的rpm包;重新定位rpm包的安裝路徑
--replacefiles : 安裝rpm包時;替換指定的文件
安裝時常用的組合: -ivh, -ivvh
示例
安裝/media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm
# rpm -ivh /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm <--使用rpm包安裝時需要指定rpm包的路徑
操作過程
[root@localhost ~]# rpm -ivh /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm <--使用rpm包安裝時需要指定rpm包的路徑 warning: /media/cdrom/Packages/zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [root@localhost Packages]# rpm -qa zsh <--查看zsh是否已經被安裝 zsh-4.3.10-7.el6.x86_64
測試zsh-4.3.10-7.el6.x86_64.rpm 能否正常被安裝
[root@localhost Packages]# rpm -ivh --test /media/cdrom/Packages/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@localhost Packages]# rpm -qa zsh <--zsh-4.3.10-7.el6.x86_64.rpm 未被真正的安裝
忽略依賴關係安裝/media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm
[root@localhost ~]# rpm -ivh --nodeps /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm warning: /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:xterm ########################################### [100%]
[root@localhost ~]# xterm xterm: error while loading shared libraries: libXaw.so.7: cannot open shared object file: No such file or directory <--缺少libXaw.so.7 ;xterm 無法正常運行
linux由衆多目的單一的小程序組成;結果程序包之間存在相關性;忽略依賴關係:副作用:能安裝成功,但未必能成功運行;
覆蓋安裝/media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm
[root@localhost ~]# rpm -ivh /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm warning: /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] package httpd-2.2.15-39.el6.centos.x86_64 is already installed <--默認情況下對已經安裝過的rpm包不會再次執行安裝過程 [root@localhost ~]# rpm -ivh --replacepkgs /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm <--覆蓋安裝xterm warning: /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:xterm ########################################### [100%]
rpm升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--upgrade} [install-options] PACKAGE_FILE ...
-U: 升級或安裝;如果已經安裝指定rpm包的老版本則對其升級;如果沒有安裝指定的rpm包時則執行全新的安裝
-F:升級;如果已經安裝指定rpm包的老版本則對其升級;如果沒有安裝指定的rpm包則不執行安裝
升級rpm包常用組合:-Uvh, -Fvh
示例:
升級安裝httpd;如果httpd未安裝則進行全新的安裝
[root@localhost ~]# rpm -Uvh /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm <--httpd未安裝;對httpd執行全新的安裝或升級 warning: /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:httpd ########################################### [100%] [root@localhost ~]# rpm -qa httpd <--查看httpd已經被安裝 httpd-2.2.15-39.el6.centos.x86_64
升級安裝httpd;如果httpd未安裝則不進行安裝
[root@localhost ~]# rpm -Fvh /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm <--httpd未安裝時;不對httpd進行安裝 warning: /media/cdrom/Packages/httpd-2.2.15-39.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY [root@localhost ~]# rpm -qa httpd
升級當前系統zsh到最新版本
[root@localhost ~]# rpm -qa zsh zsh-4.3.10-7.el6.x86_64 <--當前系統zsh的版本 [root@localhost ~]# rpm -Uvh zsh-4.3.10-9.el6.x86_64.rpm <--對zsh升級 warning: zsh-4.3.10-9.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [root@localhost ~]# rpm -qa zsh zsh-4.3.10-9.el6.x86_64 <--升級以後的zsh版本
將當前系統的zsh降級爲老版本
[root@localhost ~]# rpm -Uvh --oldpackage 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%] [root@localhost ~]# rpm -qa zsh zsh-4.3.10-7.el6.x86_64 <--降級以後的zsh版本
注意:如果程序包的配置文件安裝後曾被修改,升級時,新版本的文件不會覆蓋老版本的配置文件,而把新版本的配置文件重命名(加後綴.rpmnew)後保存;
rpm卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
--nodeps:忽略依賴關係;
--test: 測試卸載;dry-run模式;
--allmatches: 如果一個程序包同時安裝多個版本,則此選項一次全部卸載之;
簡單用法:rpm -e PACKAGE_NAME...
注意:如果程序包的配置文件安裝後曾被修改,卸載時,此文件通常不會被刪除,而是被重命名(加後綴.rpmsave)後留存;
示例
卸載已安裝的httpd
[root@localhost ~]# rpm -e --nodeps httpd <--忽略依賴關係卸載httpd warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave <--httpd.conf文件已修改,卸載httpd時,httpd.conf將被重命名留存
查詢:
查詢某包是否已經安裝,以及檢查安裝的所有包;還可以查看某包的詳細信息;
rpm {-q|--query} [select-options] [query-options]
[select-options]:
1、查詢某包或某些包是否安裝:
rpm -q PACKAGE_NAME...
2、查詢已經安裝的所有包:
rpm -qa
3、查詢某文件是由哪個包安裝生成:
rpm -qf /PATH/TO/SOMEFILE
4、查詢尚未安裝的包文件的相關信息
-p # rpm -qpi PACKAGE_FILE # rpm -qpl PACKAGE_FILE
示例
查看當前系統已經安裝的rpm包數量
[root@localhost ~]# rpm -qa | wc -l 1009
查看當前系統是否已經安裝的mysql包
[root@localhost ~]# rpm -qa | grep 'mysql' mysql-libs-5.1.73-3.el6_5.x86_64 mysql-5.1.73-3.el6_5.x86_64
查看/etc/fstab 文件是由某個安裝包生成
[root@localhost ~]# rpm -qf /etc/fstab setup-2.8.14-20.el6_4.1.noarch
[query-options]:
1、查詢某包的簡要說明信息:
rpm -qi PACKAGE_NAME
2、查詢某包安裝生成的文件列表:
rpm -ql PACKAGE_NAME
3、查詢某包安裝完成後生成的所有配置文件:
rpm -qc PACKAGE_NAME
4、查詢某包安裝完成後生成的所有幫助文件:
rpm -qd PACKAGE_NAME
5、查看某包製作時隨版本變化的changelog信息:
rpm -q --changelog PACKAGE_NAME
6、查詢某包提供的capabilities:(功能或能力)
rpm -q --provides PACKAGE_NAME
7、查詢某包所依賴的capabilities:
rpm -q --requires PACKAGE_NAME
8、查詢某包安裝或卸載時執行腳本:
rpm -q --scripts PACKAGE_NAME
腳本有四類:
preinstall: 安裝過程開始之前執行的腳本;
postinstall: 安裝過程完成之後執行的腳本;
preuninstall: 卸載開始之前執行的腳本 ;
postuninstall: 卸載過程完成之後執行的腳本;
示例
查詢當前系統已安裝的mysql的簡要說明
[root@localhost ~]# rpm -qi mysql Name : mysql Relocations: (not relocatable) Version : 5.1.73 Vendor: CentOS Release : 3.el6_5 Build Date: 2014年02月13日 星期四 03時42分39秒 Install Date: 2015年04月09日 星期四 16時04分55秒 Build Host: c6b9.bsys.dev.centos.org Group : Applications/Databases Source RPM: mysql-5.1.73-3.el6_5.src.rpm Size : 2495591 License: GPLv2 with exceptions Signature : RSA/SHA1, 2014年02月13日 星期四 03時48分07秒, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.mysql.com Summary : MySQL client programs and shared libraries Description : MySQL is a multi-user, multi-threaded SQL database server. MySQL is a client/server implementation consisting of a server daemon (mysqld) and many different client programs and libraries. The base package contains the standard MySQL client programs and generic MySQL files.
查看mysql安裝時生成的文件
[root@localhost ~]# rpm -ql mysql /usr/bin/msql2mysql /usr/bin/my_print_defaults /usr/bin/mysql /usr/bin/mysql_config /usr/bin/mysql_find_rows /usr/bin/mysql_waitpid /usr/bin/mysqlaccess
....
查詢安裝zsh時生成的配置文件
[root@localhost ~]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
查詢安裝zsh時生成的文檔
[root@localhost ~]# rpm -qd zsh /usr/share/doc/zsh-4.3.10/BUGS /usr/share/doc/zsh-4.3.10/CONTRIBUTORS /usr/share/doc/zsh-4.3.10/FAQ /usr/share/doc/zsh-4.3.10/FEATURES /usr/share/doc/zsh-4.3.10/LICENCE /usr/share/doc/zsh-4.3.10/MACHINES /usr/share/doc/zsh-4.3.10/NEWS /usr/share/doc/zsh-4.3.10/README /usr/share/doc/zsh-4.3.10/completion-style-guide /usr/share/doc/zsh-4.3.10/zsh-development-guide /usr/share/doc/zsh-4.3.10/zshprompt.pl /usr/share/info/zsh.info-1.gz /usr/share/info/zsh.info-2.gz /usr/share/info/zsh.info-3.gz /usr/share/info/zsh.info-4.gz /usr/share/info/zsh.info-5.gz /usr/share/info/zsh.info.gz /usr/share/man/man1/zsh.1.gz
....
插敘mysql的changelog信息
[root@localhost ~]# rpm -q --changelog mysql* 一 2月 03 2014 Honza Horak <[email protected]> 5.1.73-3- Fixes for CVE-2014-0001 Resolves: #1055880 * 二 1月 28 2014 Honza Horak <[email protected]> 5.1.73-2- Make mysqld init script more robust and ignore existing but non-being-used unix socket file Resolves: #1058719 * 三 1月 22 2014 Jakub Dorňák <[email protected]> - 5.1.73-1- Update to MySQL 5.1.73, for various fixes described at http://dev.mysql.com/doc/relnotes/mysql/5.1/en/news-5-1-73.html (CVE-2014-0412, CVE-2014-0437, CVE-2013-5908, CVE-2014-0393, CVE-2014-0386, CVE-2014-0401, CVE-2014-0402) Resolves: #1055880...
查看zsh的capabilities
[root@localhost ~]# rpm -q --provides zsh attr.so()(64bit) cap.so()(64bit) clone.so()(64bit) compctl.so()(64bit) complete.so()(64bit) complist.so()(64bit) computil.so()(64bit) config(zsh) = 4.3.10-7.el6 curses.so()(64bit) datetime.so()(64bit) deltochar.so()(64bit) example.so()(64bit) ....
查看zsh的依賴的capabilities
[root@localhost ~]# rpm -q --requires zsh /bin/sh /bin/sh /bin/sh /bin/sh /bin/zsh /sbin/install-info /sbin/install-info config(zsh) = 4.3.10-7.el6 coreutils grep grep libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.2.5)(64bit)
查詢zsh安裝或卸載時執行腳本
[root@localhost ~]# rpm -q --scripts zshp ostinstall scriptlet (using /bin/sh):if [ ! -f /etc/shells ] ; then echo "/bin/zsh" > /etc/shellselse grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shellsfi if [ -f /usr/share/info/zsh.info.gz ]; then# This is needed so that --excludedocs works./sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \ --entry="* zsh: (zsh). An enhanced bourne shell."fi :preuninstall scriptlet (using /bin/sh
):if [ "$1" = 0 ] ; then if [ -f /usr/share/info/zsh.info.gz ]; then # This is needed so that --excludedocs works. /sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir \ --entry="* zsh: (zsh). An enhanced bourne shell." fifi:postuninstall scriptlet (using /bin/sh):if [ "$1" = 0 ] ; then if [ -f /etc/shells ] ; then TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX` grep -v '^/bin/zsh$' /etc/shells > $TmpFile cp -f $TmpFile /etc/shells rm -f $TmpFile fifi
腳本有四類:
preinstall: 安裝過程開始之前執行的腳本;
postinstall: 安裝過程完成之後執行的腳本;
preuninstall: 卸載開始之前執行的腳本 ;
postuninstall: 卸載過程完成之後執行的腳本;
校驗:
用途
查詢包安裝之後生成的文件是否發生了改變
rpm {-V|--verify} [select-options] [verify-options]
常見用法:rpm -V PACKAGE_NAME
S file Size differs <--文件大小 M Mode differs (includes permissions and file type) <--權限 5 digest (formerly MD5 sum) differs <--文件md5 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 <--caPabilities
示例:
[root@localhost ~]# rpm -V httpd S.5....T. c /etc/httpd/conf/httpd.conf <--. 表示未改變
程序包的合法性驗正:
1. 來源合法:
由我們信任的製作者提供;依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特性碼進行的;
2. 內容合法:
包未被二次修改;完整性校驗成功;依賴於:製作者提供的程序特徵碼;
驗正方式:安裝者用同樣的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較;
驗正其光盤中程序包的來源及完整性:導入公約文件
rpm --import /path/to/RPM-GPG-KEY-FILE
例如:
# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6
驗正:rpm {-K|--checksig} PACKAGE_FILE
--nosignature: 不檢查來源合法性
--nodigest: 不檢查完整性
例如:
[root@localhost ~]# rpm -K /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm /media/cdrom/Packages/xterm-253-1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
rpm管理器數據庫
rpm管理器數據庫默認存放在:/var/lib/rpm
[root@localhost ~]# ls /var/lib/rpm/ Basenames __db.002 Dirnames Installtid Packages Pubkeys Sha1header Conflictname __db.003 Filedigests Name Providename Requirename Sigmd5 __db.001 __db.004 Group Obsoletename Provideversion Requireversion Triggername
重建數據庫:
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
--initdb: 初始化數據庫,即數據庫完全不存時,可新建之;
--rebuilddb: 無論當前數據存在與否,都會直接重建此庫;