软件包管理——rpm和yum

来源:互联网 发布:linux系统漏洞挖掘 编辑:程序博客网 时间:2024/06/05 15:14

rpm

【命名规则】【重点】
<name>-<version>-<release>.<architecture>.rpm
such as:
libgnomeuimm-2.0-2.0.0-3.i386.rpm
openssh-clients-4.3p2-72.el5.i386.rpm(openssh-clients才是name,跟openssh是两码事)
区分<PACKAGEFILE>与<PACKAGENAME>
openssh-clients:PACKAGE NAME
openssh-clients-4.3p2-72.el5.i386.rpm:PACKAGE FILE

【软件包查询】
1、查看某软件包是否安装
rpm -q <package name>(or <PACKAGE FILE>)
例1:rpm -q openssh
     openssh-4.3p2-72.el5
例2:rpm -q openssh-server
     openssh-server-4.3p2-72.el5
例3:rpm -q openssh-clients
     openssh-clients-4.3p2-72.el5
【补充】关于openssh:
CentOS光盘中:
find /media -name openssh*
结果:
/media/CentOS/openssh-server-4.3p2-72.el5.i386.rpm
/media/CentOS/openssh-4.3p2-72.el5.i386.rpm
/media/CentOS/openssh-askpass-4.3p2-72.el5.i386.rpm
/media/CentOS/openssh-clients-4.3p2-72.el5.i386.rpm

2、关键词查找
rpm -qa | grep [-i] <keyword>
例:rpm -qa |grep -i openssh
    openssh-4.3p2-72.el5
    openssh-server-4.3p2-72.el5
    openssh-clients-4.3p2-72.el5

3、其它高级用法
<rpm -q>模式下:
-p,--package <PACKAGE FILE>
-R,--requires:依赖
-i,--info:信息
-l,--list:文件位置或列表
-c,--configfiles:配置文件位置或列表
-d,--docfiles:doc文件位置或列表

对于已安装的软件包(查询rpm数据库):
rpm -qR openssh(<PACKAGE NAME>)
rpm -qi openssh
rpm -ql openssh:安装文件的位置
rpm -qc openssh:配置文件的位置
rpm -qd openssh:doc文件的位置

查询软件包文件(-p):
rpm -qpR vnc-server-4.1.2-14.el5_6.6.i386.rpm(<PACKAGE FILE>)
rpm -qpi vnc-server-4.1.2-14.el5_6.6.i386.rpm
rpm -qpl vnc-server-4.1.2-14.el5_6.6.i386.rpm:软件包文件列表
rpm -qpc vnc-server-4.1.2-14.el5_6.6.i386.rpm:配置文件列表
rpm -qpd vnc-server-4.1.2-14.el5_6.6.i386.rpm:doc文件列表

-f,--file:某文件所属软件包
rpm -qf /usr/sbin/sshd
结果:
openssh-server-4.3p2-72.el5

【软件包安装】
qpm -ivh <PACKAGE FILE>
-i,--install
-v,--verbose
-h,--hash:显示安装进度

--test:测试但不安装
--prefix <PATH>:指定安装目录
rpm -ivh vnc-server-4.1.2-14.el5_6.6.i386.rpm --test
rpm -ivh vnc-server-4.1.2-14.el5_6.6.i386.rpm --prefix /usr/local/vnc-server


【软件包卸载】
rpm -e <PACKAGE NAME>
rpm -e sudo --test

【软件包升级】
跟--install有同样的选项(--test等)
-U(upgrade)或-F(freshen)
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...:如果未安装旧版,则不安装

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...:即使未安装旧版,也安装

yum

1、安装
yum intall gcc

2、卸载
yum remove package1 [package2] ...

探讨:package1是填<包名>还是<包文件名>还是<关键字>?
CentOS下测试卸载java相关包:
<rpm -qa | grep java>得到:
java-1.6.0-openjdk-1.6.0.0-1.23.1.9.10.el5_7(包名:java-1.6.0-openjdk)
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115(包名:java-1.4.2-gcj-compat)

可行的卸载方式:
yum remove java-1.4.2-gcj-compat(包名)
yum remove java-1.4.2-gcj-compat-1.4.2.0-40jpp.115(包文件名)
yum remove java(会同时卸载java-1.6.0-openjdk和java-1.4.2-gcj-compat)

不可行的方式:
yum remove openjdk

猜测:yum对应的数据库里可能建立的java关键字的索引,而openjdk没有建立索引



3、更新
yum update gcc

4、list
列出yum源中所有的软件包
yum list | grep -i gcc


应用实例

1、yumgroupinstall chinese-support
2、升级所有已安装的软件包:yumupdate
3、本地包安装且解决依赖关系
yum localinstall google-chrome-stable_current_i386.rpm 
4、查询一个软件包是否安装
①rpm -q httpd
②rpm -qa |grep httpd
③man httpd(源码包安装可以考虑)
④locate httpd(源码包安装可以考虑)(记得更新数据库updatedb)

查询一个rpm软件包是否安装的最保险的方式是先rpm -qa | grepopenssh,因为可能出现如下结果:
openssh-askpass-4.3p2-72.el5_7.5
openssh-4.3p2-72.el5_7.5
openssh-server-4.3p2-72.el5_7.5
openssh-clients-4.3p2-72.el5_7.5

如果是源码包,最保险的方式是直接找安装目录和文件:locate httpd(or find命令)

5、查询一个软件包的安装目录
rpm -ql httpd
locate httpd(源码包安装可以考虑)

6、卸载rpm包
(1) yum remove httpd(能够找到被依赖的软件包)
(2) rpm -q httpd --test(测试但不卸载)
    rpm -q httpd --nodeps(忽略依赖关系(httpd被php所依赖))