一、Linux下軟件包的命名格式:
1.源碼包
name-version.tar.[gz|bz2|xz]
version:major.minor.release
如:bash-4.1.2.tar.gz
2.rpm包
name-version-release.arch.rpm
version:major.minor.release #此release號是源碼包的release號
release:rpm包的release號,可能會包含所適用的操作系統
el6:rhel6
el5:rhel5
centos6
suse11
......
arch:平臺
x86:i386,i686
x86_64:redhat系列的軟件包
amd64:debian系統的軟件包
ppc:基於powerpc的軟件包
noarch:不依賴於平臺的軟件包
如:bash-4.1.2.el6.x86_64.rpm
二、軟件包的組成
1.二進制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
2.配置文件:/etc:純文本、xml格式的配置文件
3.庫文件:/lib,/usr/lib,/usr/local/lib
4.幫助手冊:/usr/share/man, /usr/loacl/share/man
/usr/share/doc
三、軟件包的獲取方式
安裝光盤
.....
四、RPM管理軟件包
下面以光盤中的rpm包爲例:
1.驗證
驗證我們使用的rpm包的合法性和完整性
[root@wsh /]# mount /dev/cdrom /media/cdrom/ #掛在光盤 mount: block device /dev/sr0 is write-protected, mounting read-only [root@wsh /]# cd /media/cdrom/ [root@wsh cdrom]# ls CentOS_BuildTag GPL RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6 isolinux EFI Packages RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL repodata EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Security-6 p_w_picpaths [root@wsh cdrom]# cd Packages/ [root@wsh Packages]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6 #--import導入光盤中的公鑰;在/etc/pki/rpm-gpg/下也會有公鑰 [root@wsh Packages]# rpm -K zsh-4.3.10-5.el6.x86_64.rpm #-K驗證rpm包的合法性 zsh-4.3.10-5.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK [root@wsh Packages]# rpm --checksig zsh-4.3.10-5.el6.x86_64.rpm #--checksig和-K一樣 zsh-4.3.10-5.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
2.安裝
-i:安裝
-v:詳細詳細信息,-vv:比-v更詳細
-h:顯示安裝進度條,一個#代表2%
-ivh:一般組合使用
-ivh --nodeps:忽略依賴關係
-ivh --test:測試安裝
-ivh --replacepkgs:重新安裝已經安裝的rpm包
[root@wsh Packages]# pwd /media/cdrom/Packages #此目錄下存放的就是rpm包 [root@wsh Packages]# ls | less 389-ds-base-1.2.10.2-15.el6.x86_64.rpm 389-ds-base-libs-1.2.10.2-15.el6.i686.rpm 389-ds-base-libs-1.2.10.2-15.el6.x86_64.rpm ....... [root@wsh Packages]# [root@wsh Packages]# rpm -ivh bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64.rpm error: Failed dependencies: bind >= 32:9.6.1-0.3.b1 is needed by bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64 #有的rpm包的安裝,依賴於其他rpm包,這時就需要先安裝其依賴的包 [root@wsh Packages]# rpm -ivh bind-9.8.2-0.10.rc1.el6.x86_64.rpm #安裝依賴的包 Preparing... ########################################### [100%] 1:bind ########################################### [100%] [root@wsh Packages]# rpm -ivh bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64.rpm #再次安裝,成功 Preparing... ########################################### [100%] 1:bind-dyndb-ldap ########################################### [100%] [root@wsh Packages]# rpm -ivh --test zsh-4.3.10-5.el6.x86_64.rpm #只是測試,沒有真正安裝 Preparing... ########################################### [100%]
3.查詢:
查詢已安裝的軟件包信息:
-q name:
[root@wsh Packages]# rpm -q bind #查詢bind是否安裝 bind-9.8.2-0.10.rc1.el6.x86_64 [root@wsh Packages]# rpm -q bind-dyndb-ldap bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64
-qa:查詢所有已安裝的包
[root@wsh Packages]# rpm -qa | grep "bind" #rpm -qa列出所有安裝的包,grep匹配出你想查詢的包 samba-winbind-clients-3.6.9-164.el6.x86_64 bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64 rpcbind-0.2.0-11.el6.x86_64 bind-libs-9.8.2-0.10.rc1.el6.x86_64 bind-9.8.2-0.10.rc1.el6.x86_64 samba-winbind-3.6.9-164.el6.x86_64 ypbind-1.20.4-30.el6.x86_64 PackageKit-device-rebind-0.5.8-21.el6.x86_64
-qi name:查詢包的摘要信息
[root@wsh Packages]# rpm -qi bind Name : bind Relocations: (not relocatable) Version : 9.8.2 Vendor: CentOS Release : 0.10.rc1.el6 Build Date: Fri Jun 22 23:24:10 2012 Install Date: Fri May 23 09:17:34 2014 Build Host: c6b7.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: bind-9.8.2-0.10.rc1.el6.src.rpm Size : 7580392 License: ISC Signature : RSA/SHA1, Mon Jun 25 06:18:46 2012, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.isc.org/products/BIND/ Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS (Domain Name System) protocols. BIND includes a DNS server (named), which resolves host names to IP addresses; a resolver library (routines for applications to use when interfacing with DNS); and tools for verifying that the DNS server is operating properly.
-ql name:查詢安裝生成文件清單
[root@wsh Packages]# rpm -ql bind /etc/NetworkManager/dispatcher.d/13-named /etc/logrotate.d/named /etc/named /etc/named.conf /etc/named.iscdlv.key /etc/named.rfc1912.zones /etc/named.root.key /etc/portreserve/named /etc/rc.d/init.d/named /etc/rndc.conf /etc/rndc.key /etc/sysconfig/named /usr/lib64/bind /usr/sbin/arpaname /usr/sbin/ddns-confgen /usr/sbin/dnssec-dsfromkey ...............
-qc name:查詢生成的配置文件
[root@wsh Packages]# rpm -qc man #man的配置文件 /etc/man.config
-qd name:查詢生成的幫助文檔
[root@wsh Packages]# rpm -qd grep #grep的幫助文檔 /usr/share/doc/grep-2.6.3/ABOUT-NLS /usr/share/doc/grep-2.6.3/AUTHORS /usr/share/doc/grep-2.6.3/COPYING /usr/share/doc/grep-2.6.3/ChangeLog /usr/share/doc/grep-2.6.3/NEWS /usr/share/doc/grep-2.6.3/README /usr/share/doc/grep-2.6.3/THANKS /usr/share/doc/grep-2.6.3/TODO /usr/share/info/grep.info.gz /usr/share/man/man1/egrep.1.gz /usr/share/man/man1/fgrep.1.gz /usr/share/man/man1/grep.1.gz
-qf /path/to/file_name:查詢文件是由哪個軟件生成的
[root@wsh Packages]# rpm -qf /etc/man.config #man.config是由man.-1.6f-32.el6.x86_64生成的 man-1.6f-32.el6.x86_64
-q --scripts name:查詢安裝
[root@wsh Packages]# rpm -q --scripts bind #preinstall,安裝前腳本 #postinstall,安裝後腳本 #preuninstall,卸載前腳本 #postuninstall,卸載後腳本 preinstall scriptlet (using /bin/sh): if [ "$1" -eq 1 ]; then /usr/sbin/groupadd -g 25 -f -r named >/dev/null 2>&1 || :; /usr/sbin/useradd -u 25 -r -N -M -g named -s /sbin/nologin -d /var/named -c Named named >/dev/null 2>&1 || :; fi; :; postinstall scriptlet (using /bin/sh): /sbin/ldconfig /sbin/chkconfig --add named if [ "$1" -eq 1 ]; then [ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.* /etc/named.* >/dev/null 2>&1 ; # rndc.key has to have correct perms and ownership, CVE-2007-6283 [ -e /etc/rndc.key ] && chown root:named /etc/rndc.key [ -e /etc/rndc.key ] && chmod 0640 /etc/rndc.key fi :; preuninstall scriptlet (using /bin/sh): if [ "$1" -eq 0 ]; then /sbin/service named stop >/dev/null 2>&1 || :; /sbin/chkconfig --del named || :; fi; :; postuninstall scriptlet (using /bin/sh): /sbin/ldconfig if [ "$1" -ge 1 ]; then /sbin/service named try-restart >/dev/null 2>&1 || :; fi; :;
查詢未安裝的rpm包的相關信息,加入-p選項即可:
rpm -qp[i|l|c|d|--scripts] name-version.release.arch.rpm
4.卸載
-e : 卸載
--nodeps:忽略依賴關係
[root@wsh Packages]# rpm -q bind #查詢bind包已安裝 bind-9.8.2-0.10.rc1.el6.x86_64 [root@wsh Packages]# rpm -e bind #-e卸載提示有依賴關係 error: Failed dependencies: bind >= 32:9.6.1-0.3.b1 is needed by (installed) bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64 [root@wsh Packages]# rpm -e --nodeps bind #忽略依賴關係卸載 [root@wsh Packages]# rpm -q bind #查詢已經卸載 package bind is not installed
5.升級
-U:升級或安裝,如果軟件包沒有安裝則安裝;否則,升級
-F:升級,只能升級,即需要升級的軟件包必須已經安裝
常用組合:
-Uvh
-Fvh
--force:
--nodeps:
注意:內核不應該升級,儘可能安裝,因爲內核允許多版本並存。
6.校驗
rpm -V name
[root@wsh ~]# vim /usr/share/doc/man-1.6f/README #README的最後一行加入內容 [root@wsh ~]# rpm -V man S.5....T. d /usr/share/doc/man-1.6f/README #校驗出改變的README #校驗已安裝的包的文件與保存在rpm數據庫裏的包的元數據,如果相同則無任何顯示,如果不用則標# #示出改變的地方,如下是每個字符代表的意義: # 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
7.rpm包的數據庫
/var/lib/rpm
如果rpm的數據庫損壞,會導致查詢等相關操作無法正常進行,這時就需要重建數據庫
數據庫重建:
--initdb:新建,不會覆蓋原有數據庫
--rebuilddb:重建,覆蓋原有數據庫,常用