标签:
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 <hhorak@redhat.com> 5.1.73-3
- Fixes for CVE-2014-0001
Resolves: #1055880
* 二 1月 28 2014 Honza Horak <hhorak@redhat.com> 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 <jdornak@redhat.com> - 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 zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
echo "/bin/zsh" > /etc/shells
else
grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi
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."
fi
fi
:
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
fi
fi
脚本有四类:
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: 无论当前数据存在与否,都会直接重建此库;
本文出自 “笨小孩” 博客,请务必保留此出处http://1066875821.blog.51cto.com/2375046/1631061
标签:
原文地址:http://1066875821.blog.51cto.com/2375046/1631061