1、简述rpm与yum命令的常见选项,并举例
rpm即RedHat系列发行版的程序包管理工具,即为RPM package Manager。yum是RedHat系列RPM的前端管理工具,其主要是解决程序在安装或卸载过程中RPM包的依赖关系,为其用户更方便快捷的安装程序。
rpm命令
格式:rpm [OPTIONS] PACKAGE.FILE
安装:-i --install
升级:-U --update,-F --freshen
卸载:-e --erase
查询:-q --query
校验:-V --verify
数据库维护:--builddb,--initdb
rpm -i 安装:
安装rpm包-i选项可与-v(显示其详细信息)、-h(输出进度条)合并使用,例如:我们要装个zsh的程序包,需要有zsh的rpm存在,然后进行安装。
rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 安装其后面所跟的包名必须是全路径,全包名。
[root@localhost ~]# ls
anaconda-ks.cfg zsh-5.0.2-28.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep zsh
[root@localhost ~]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
warning: zsh-5.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zsh-5.0.2-28.el7 ################################# [100%]
[root@localhost ~]# rpm -qa | grep zsh
zsh-5.0.2-28.el7.x86_64
[root@localhost ~]#
我的主机上没有zsh这个rpm包,通过rpm -qa 可查询已安装的rpm包是否有zsh这个rpm包,以上相信大家都看得懂。
rpm -v 通用选项 显示安装的详细信息;
rpm -vv 显示安装更详细的过程输出信息;
rpm -h [hash marks] 安装输出显示进度条,每个#表示2%的进度;
其中,rpm -i 和-v,-h可合并使用,事实上,-vh可合并使用在-i,-e等选项中;
install options:rpm -i 安装rpm包有安装属性选项,如以下属性选项:
--test 测试安装,检查并报告其依赖关系和冲突消息等,用法:rpm -i --test PACKAGE_NAME;
--nodeps 忽略依赖关系,不建议使用,用法:rpm -ivh --nodeps;
--replacepkgs 重新安装,主要应用于配置文件遭改动等,用法:rpm -i --replacepkgs;
另外:rpm包安装文档里自带的有四类脚本文件:
preinstall 安装过程开始之前运行的脚本,表示为%pre;
postinstall 安装过程完成之后运行的脚本,表示为%post;
preuninstall 卸载前执行的脚本,%preun;
postuninsatll 卸载后执行的脚本,%postun;
选项属性:rpm -i --noscripts,--nopre,--nopost,--nopreun,--nopostun;
--nosignature 不检查包签名信息,不检查来源合法性,用法:rpm -i --nosignature;
--nodigest 不检查包完整性,用法:rpm -i --nodigest;
rpm -U 升级(升级安装,-F只有安装了老版本需要升级新版本,使用-F选项)
用法:rpm -Uvh;rpm -Fvh
其也有属性选项:--oldpackage 降级安装;--force 强制升级安装,因为有的升级安装需要解决其依赖关系,故可使用--force来强制安装升级。(这里介绍的都是常有的选项属性,并非全部,如需详细了解可man或查看相关文档,这里没有需要升级安装的rpm,就不做演示了,嘻嘻。)
rpm -e 卸载
用法:rpm -e packagename 包名字,而非文件路径,或包全名即可。
[root@localhost ~]# rpm -qa | grep zsh
zsh-5.0.2-28.el7.x86_64
[root@localhost ~]# rpm -evh zsh
Preparing... ################################# [100%]
Cleaning up / removing...
1:zsh-5.0.2-28.el7 ################################# [100%]
[root@localhost ~]# rpm -qa | grep zsh
[root@localhost ~]#
以上我已卸载了之前安装过的zshRPM包,当然,当时安装的时候没有安装,也没有所依赖的rpm包,所有rpm -e 没有什么错误提示,如果你在安装其他的rpm包需要先安装依赖包,那么卸载的时候也需要查看提示信息是否需要先卸载依赖包。(其实这里可以使用yum管理工具卸载更省心,呵呵。)
rpm -e 也有选项属性:比如:
--allmatches 卸载所有匹配指定名称的程序包的各个版本;
--nodeps 忽略依赖关系卸载;
--test 测试卸载,不是真正的卸载,只是测试使用,如dry run(干跑)模式。
rpm -q 查询安装相关信息
用法:rpm -q select options | query options
select options:(选择属性)其后跟的参数为package_name,程序名。
-qa 查询已安装的所有程序包 (此操作刷屏严重,故不演示了,自行查看其内容)
-qf FILE 其后可跟个文件名,查询指定文件是由哪个程序包安装生成的
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-18.el7.x86_64
[root@localhost ~]# rpm -qf /bin/cd
bash-4.2.46-28.el7.x86_64
[root@localhost ~]# rpm -qf /bin/cp
coreutils-8.22-18.el7.x86_64
[root@localhost ~]# rpm -qf /bin/pwd
coreutils-8.22-18.el7.x86_64
[root@localhost ~]#
以上是查看ls,cd,cp,pwd这些命令,Linux下这些命令也是文件,是由哪个程序包安装生成的。
-qp 用于实现对未安装的程序包执行查询操作,其后有--whatprovides CAPABILITY,未安装的程序包有哪些特性;
[root@localhost ~]# rpm -qa | grep zsh
[root@localhost ~]# rpm -qp zsh-5.0.2-28.el7.x86_64.rpm
warning: zsh-5.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
zsh-5.0.2-28.el7.x86_64
[root@localhost ~]# rpm -qp zsh-5.0.2-28.el7.x86_64.rpm --whatprovides
rpm: one type of query/verify may be performed at a time
[root@localhost ~]#
--whatprovides CAPABILITY 查询指定的CAPABILITY由哪个程序包提供;
--whatprovides CAPABILITY 查询指定的CAPABILITY被哪个程序包所依赖;
query options(查询选项)其后跟的参数是程序包的包名
--changelog 查询rpm包的changelog
-ql 程序安装生成的所有文件列表;
-qi 程序包的相关信息,版本号,大小,所属的包组等;
-qc 查询指定的程序提供的配置文件
-qd 查询指定的程序提供的帮助文件
[root@localhost ~]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/5.0.2
[root@localhost ~]# rpm -qi zsh
Name : zsh
Version : 5.0.2
Release : 28.el7
Architecture: x86_64
Install Date: Fri 06 Jul 2018 06:48:13 PM CST
Group : System Environment/Shells
Size : 5855982
License : MIT
Signature : RSA/SHA256, Fri 11 Aug 2017 04:28:17 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : zsh-5.0.2-28.el7.src.rpm
Build Date : Wed 02 Aug 2017 06:52:37 PM CST
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://zsh.sourceforge.net/
Summary : 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.
[root@localhost ~]#
[root@localhost ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@localhost ~]# rpm -qd zsh
/usr/share/doc/zsh-5.0.2/BUGS
/usr/share/doc/zsh-5.0.2/CONTRIBUTORS
/usr/share/doc/zsh-5.0.2/FAQ
/usr/share/doc/zsh-5.0.2/FEATURES
/usr/share/doc/zsh-5.0.2/LICENCE
/usr/share/doc/zsh-5.0.2/MACHINES
/usr/share/doc/zsh-5.0.2/NEWS
/usr/share/doc/zsh-5.0.2/README
/usr/share/doc/zsh-5.0.2/completion-style-guide
/usr/share/doc/zsh-5.0.2/zsh-development-guide
/usr/share/doc/zsh-5.0.2/zshprompt.pl
--provides 查询指定的程序包提供的所有的CAPABILITY;
-R 查询指定的程序包的依赖关系;
--scripts 查询程序包自带的脚本信息;
[root@localhost ~]# rpm -q --provides zsh
config(zsh) = 5.0.2-28.el7
zsh = 5.0.2-28.el7
zsh(x86-64) = 5.0.2-28.el7
[root@localhost ~]# rpm -qR zsh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/zsh
/sbin/install-info
/sbin/install-info
config(zsh) = 5.0.2-28.el7
[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