一、什么是rpm
RPM 是Red hat Package Manager 的缩写,本意是Red Hat软件包管理,由RedHat开发出来的一种软件包管理程序,后来被LSB(Linux规范标准)会正式吸纳为Linux的标准包格式,命名为RPM Package Manager,现在所说的RPM即使 RPM Package Manager的缩写。
二、为什么要使用RPM软件包管理器
RPM软件包管理器简化了用户在Linux系统上对软件进行安装、卸载、升级或更新的过程,只需要简短的命令就可以完成,从而省去了对对源代码进行编译、安装的复杂过程,从而大大提高了管理人员的工作效率
三、RPM命名格式
命名格式:
appname-VERSION-RELEASE.ARCH.rpm
VERSION:
magior:主版本号
minor:次版本号
release:发行号
RELEASE: 包自身的修订号,有时候会包含适用的OS信息:
eg: bash-4.3.2-2.centos6.x86_64.rpm中 2.centos6 就是RELEASE号
ARCH:适用平台
x86: i386, i486, i586, i686
x86_64: x86_64, amd64
powerpc: ppc
noarch: 跟平台无关;(perl,python,ruby等编译的程序)
RPM分包机制:
核心包,主包:命名与源项目名称一致;
eg: bash-4.3.2-2.centos6.x86_64.rpm
子包(支包):命令为源项目名称后附加支包中的文件提供的功能组成
eg: bash-devel-4.3.2-2.centos6.x86_64.rpm
RPM包获取途径
1、系统的发行光盘镜像或官方站点
2、程序包官方站点
3、第三方组织:epel
4、搜索RPM包的搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
建议:生产过程中对rpm软件包安装之前需要验证程序包的来源合法性及包的完整性
四、如何使用RPM软件包管理器
rpm - RPM Package Manager 可以对软件进行安装、升级、卸载、查询、效验等功能,下面将对其进行逐一讲解:
1、安装
安装语法格式:
rpm {-i|--install} [install-options] PACKAGE_FILE1...
安装时常用选项:
-h: hash,以#来表示安装进度;每个# 号表示2%的安装进度
-v, --verbose:显示安装过程中的详细信息;
-vv: 能显示更加详细信息
-vvv:
--test:测试安装,不执行真正的安装过程,而仅报告依赖关系及冲突信息等;
--nodeps : 忽略依赖关系安装,【能安装成功,但未必能成功运行;】
--replacepkgs:覆盖安装--重新安装并覆盖原有的文件
--force: 强制安装
--olepackage:降级到旧版本
--relocate 指明安装位置
--replacefiles 指明安装时替换某个文件
--replacepkgs 指明安装时替换整个包
安装时常用组合: -ivh --ivvh
2、升级:
升级语法格式:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U: 升级或安装
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-F:升级 【只进行升级】
升级常用选项
-v, --verbose:显示升级过程中的详细信息;
-vv: 能显示更加详细信息
-vvv:
--test:测试升级安装,不执行真正的升级安装过程,而仅报告依赖关系及冲突信息等;
--nodeps : 忽略依赖关系进行升级,
--force: 强制升级
--olepackage:降级到旧版本
升级时常用组合: -Uvh --Uvvh
注意1:一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本内核;
注意2:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;
例 使用-i选项安装zsh [root@1inux Packages]# rpm -i 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 [root@1inux Packages]# 使用-v 显示详细安装过程 [root@1inux Packages]# rpm -e zsh //卸载zsh [root@1inux Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm //使用-v详细显示安装过程 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测试安装zsh [root@1inux Packages]# rpm -e zsh //卸载zsh [root@1inux Packages]# rpm -ivh --test zsh-4.3.10-7.el6.x86_64.rpm //测试安装zsh warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] [root@1inux Packages]# rpm -q zsh //查询是否安装 package zsh is not installed [root@1inux Packages]#
例: --nodeps的使用
[root@1inux Packages]# rpm -q php //查询是否安装了php程序
package php is not installed //结果显示没有安装
[root@1inux Packages]# rpm -ivh php-5.3.3-38.el6.x86_64.rpm //进行PHP安装
warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies: //提示无法安装,需要安装依赖包php-cli及php-common
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
[root@1inux Packages]# rpm -ivh --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%]
1:php ########################################### [100%]
[root@1inux Packages]# rpm -q php //查询是否成功安装了php程序
php-5.3.3-38.el6.x86_64
[root@1inux Packages]#
//注意:忽略依赖关系进行安装后即使能成功安装程序,也有可能程序无法正常使用
例:--replacepkgs 覆盖安装的使用
[root@1inux Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm //安装zsh
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
package zsh-4.3.10-7.el6.x86_64 is already installed //显示已经安装过了,无法进行安装
[root@1inux 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%]
[root@1inux Packages]#
3、卸载:移除已经安装的程序包
卸载语法格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
简单用法:rpm -e PACKAGE_NAME...
卸载时常用选项:
--nodeps:忽略依赖关系;
--test: 测试卸载;dry-run模式;
--allmatches: 如果一个程序包同时安装多个版本,则此选项一次全部卸载之;
注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存;
eg:卸载zsh
[root@1inux Packages]# rpm -q zsh //查询是否安装zsh
zsh-4.3.10-7.el6.x86_64
[root@1inux Packages]# rpm -e zsh //卸载zsh
warning: /etc/zshrc saved as /etc/zshrc.rpmsave //由于之前我对/etc/zshrc文件做了更改所以卸载时被重命名保存下来
[root@1inux Packages]# rpm -q zsh //验证是否卸载成功
package zsh is not installed
[root@1inux Packages]#
[root@1inux Packages]# ls /etc/zsh*
/etc/zshrc.rpmsave
[root@1inux Packages]#
4、查询:
查询某包是否已经安装,以及检查系统安装的所有包;还可以查看某包的详细信息;
RPM查询语法格式:
rpm {-q|--query} [select-options] [query-options]
[select-options]:
⑴、查询某包或某些包是否安装:
# rpm -q PACKAGE_NAME...
[root@1inux Packages]# rpm -q zsh
zsh-4.3.10-7.el6.x86_64
⑵、查询已经安装的所有包:
# rpm -qa
root@1inux Packages]# rpm -qa |more
iptables-ipv6-1.4.7-14.el6.x86_64
tcp_wrappers-7.6-57.el6.x86_64
evince-libs-2.28.2-14.el6_0.1.x86_64
dejavu-fonts-common-2.30-2.el6.noarch
kernel-firmware-2.6.32-504.el6.noarch
time-1.7-37.1.el6.x86_64
PackageKit-yum-0.5.8-23.el6.x86_64
cjkuni-fonts-common-0.2.20080216.1-36.el6.noarch
totem-2.28.6-4.el6.x86_64
mesa-private-llvm-3.4-3.el6.x86_64
pycairo-1.8.6-2.1.el6.x86_64
dmz-cursor-themes-0.4-4.el6.noarch
...
⑶、查询某文件是由哪个包安装生成:
# rpm -qf /PATH/TO/SOMEFILE
[root@1inux Packages]# rpm -qf /etc/zshrc //查询 /etc/zshrc文件是由哪个程序安装产生的
zsh-4.3.10-7.el6.x86_64
[root@1inux Packages]#
⑷、查询尚未安装的包文件的相关信息
-p
# rpm -qpi PACKAGE_FILE
[root@1inux Packages]# rpm -qpi zip-3.0-1.el6.x86_64.rpm
warning: zip-3.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Name : zip Relocations: (not relocatable)
Version : 3.0 Vendor: CentOS
Release : 1.el6 Build Date: Thu 11 Nov 2010 11:26:40 PM CST
Install Date: (not installed) Build Host: c6b3.bsys.dev.centos.org
Group : Applications/Archiving Source RPM: zip-3.0-1.el6.src.rpm
Size : 823612 License: BSD
Signature : RSA/8, Sun 03 Jul 2011 01:07:05 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.info-zip.org/Zip.html
Summary : A file compression and packaging utility compatible with PKZIP
Description :
The zip program is a compression and file packaging utility. Zip is
analogous to a combination of the UNIX tar and compress commands and
is compatible with PKZIP (a compression and file packaging utility for
MS-DOS systems).
Install the zip package if you need to compress files using the zip
program.
[query-options]:
⑴、查询某包的简要说明信息:
# rpm -qi PACKAGE_NAME
[root@1inux Packages]# rpm -qi zsh //查询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: Sun 12 Apr 2015 03:44:34 PM 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.
⑵、查询某包安装生成的文件列表:
# rpm -ql PACKAGE_NAME
[root@1inux Packages]# rpm -ql zsh //查询zsh安装后所生成的所有文件列表
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/4.3.10
/usr/lib64/zsh/4.3.10/zsh
/usr/lib64/zsh/4.3.10/zsh/attr.so
/usr/lib64/zsh/4.3.10/zsh/cap.so
/usr/lib64/zsh/4.3.10/zsh/clone.so
/usr/lib64/zsh/4.3.10/zsh/compctl.so
/usr/lib64/zsh/4.3.10/zsh/complete.so
/usr/lib64/zsh/4.3.10/zsh/complist.so
/usr/lib64/zsh/4.3.10/zsh/computil.so
.....
⑶、查询某包安装完成后生成的所有配置文件:
# rpm -qc PACKAGE_NAME
[root@1inux Packages]# rpm -qc zsh //查询zsh包安装后所生产的所有配置文件
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@1inux Packages]#
⑷、查询某包安装完成后生成的所有帮助文件:
# rpm -qd PACKAGE_NAME
[root@1inux Packages]# rpm -qd zsh //查询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
...
⑸、查看某包制作时随版本变化的changelog信息:
# rpm -q --changelog PACKAGE_NAME
[root@1inux Packages]# rpm -q --changelog zsh //查询zsh随版本变化的log信息
* Mon Aug 05 2013 James Antill <james.antill@redhat.com> - 4.3.10-7
- Change {NAME:OFFSET:LENGTH} substitution feature to ignore KSH_ARRAYS option.
- Fixup tests.
- Resolves: rhbz#820530
* Tue Jun 25 2013 James Antill <james.antill@redhat.com> - 4.3.10-6
- Add {NAME:OFFSET:LENGTH} substitution feature.
- Resolves: rhbz#820530
* Fri Mar 02 2012 James Antill <james.antill@redhat.com> - 4.3.10-5
- Change invocation as "zsh foo" to search the path by default.
- Add new option PATH_SCRIPT for old behaviour.
- Resolves: rhbz#612685
- Solve defect in emulation of ksh with math substituion.
- Resolves: rhbz#657300
...
⑹、查询某包提供的capabilities:
# rpm -q --provides PACKAGE_NAME
[root@1inux Packages]# 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)
....
⑺、查询某包所依赖的capabilities:
# rpm -q --requires PACKAGE_NAME
[root@1inux Packages]# 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)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
....
⑻、查询某包安装或卸载时执行脚本:
# rpm -q --scripts PACKAGE_NAME
脚本包含四类内容:
preinstall: 安装过程开始之前执行的脚本;
postinstall: 安装过程完成之后执行的脚本;
preuninstall: 卸载开始之前执行的脚本 ;
postuninstall: 卸载过程完成之后执行的脚本;
[root@1inux Packages]# 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
[root@1inux Packages]#
5、校验:
查询包安装之后生成的文件是否发生了改变
效验语法格式
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//文件内容改变
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 //
eg:
[root@1inux Packages]# vim /etc/zshrc //编辑/etc/zshrc文件
#
# /etc/zshrc is sourced in interactive shells. It
# should contain commands to set up aliases, functions,
# options, key bindings, etc.
#
# This is a test //此处我们增加一行
[root@1inux Packages]# rpm -V zsh //查询安装后生成的文件是否发生了变化
S.5....T. c /etc/zshrc //显示文件内容及最近一次的修改时间发生变化
[root@1inux Packages]#
---------------------
//. 表示没有改变
//有字母表示对应的改变了
6、RPM管理器数据库:
重建数据库:
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
--initdb: 初始化数据库,即数据库完全不存时,可新建之;
--rebuilddb: 无论当前数据存在与否,都会直接重建此库;
转载于:https://blog.51cto.com/1inux/1631569