Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46580
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -10
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-31 09:35
文章分类
文章存档

2013年(17)

我的朋友

分类: LINUX

2013-11-19 10:50:42

原文地址:rpm命令之深入分析 作者:jiangtao0506

   在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM)。此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装、删除软件。下面就给大家介绍一下它的具体使用方法。RPM 有五个基本的操作 模式(不包括包的编译): 安装,卸载,升级,查询,校验。本节将对它们一一介绍。要了解完整的细节和选项,可以使用 rpm --help, 或 其它 RPM 站点得到更多关于 RPM 的信息。
一、安装
  命令格式:
  rpm -i ( or --install) options file1.rpm ... fileN.rpm
  参数:
   file1.rpm ... fileN.rpm 将要安装的RPM包的文件名
  详细选项:
  -h (or --hash) 安装时输出hash记号 (``#'')
  --test 只对安装进行测试,并不实际安装。
  --percent 以百分比的形式输出安装的进度。
  --excludedocs 不安装软件包中的文档文件
  --includedocs 安装文档
  --replacepkgs 强制重新安装已经安装的软件包
  --replacefiles 替换属于其它软件包的文件
  --force 忽略软件包及文件的冲突
  --noscripts 不运行预安装和后安装脚本
  --prefix 将软件包安装到由 指定的路径下
  --ignorearch 不校验软件包的结构
  --ignoreos 不检查软件包运行的操作系统
    --nodeps 不检查依赖性关系 。众所周知,一个 RPM 包可能会 "依赖" 其它软件包, 也就是说要求在安装了特定的软件包之后才能安装该软件包。 如果在安装这个软件包时未解决这种存在的依赖关系, 只有先安装完所依赖的软件包,才能解决这个问题。 如果想强制安装 (这不是个好办法,因为安装后的软件包未必能正常运行), 需要此参数。
  --ftpproxy 作为 FTP代理
  --ftpport 指定FTP的端口号为
  通用选项
  -v 显示附加信息
  -vv 显示调试信息
  --root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
   --rcfile 设置rpmrc文件为
  --dbpath 设置RPM 资料库存所在的路径为
实例如下:
[root@jiangtao ~]# rpm   -ivh  --percent sysstat-8.0.4-5.fc10.i386.rpm
warning: sysstat-8.0.4-5.fc10.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4ebfc273
Preparing...                %% 0.000000
########################################### [100%]
   1:sysstat                %% 0.076734
%% 0.309445
%% 0.396424
%% 1.614549
%% 8.876883
%% 13.790364
%% 20.486079
%% 33.185023
%% 43.279613
%% 43.305539
%% 43.625229
%% 44.091905
%% 52.561283
%% 52.590554
%% 63.879852
%% 67.670968
%% 69.238264
%% 74.706237
%% 75.607599
%% 75.709841
%% 76.731845
%% 77.722278
%% 78.760590
%% 79.824829
%% 80.881959
%% 81.943062
%% 82.976148
%% 84.167928
%% 85.160451
%% 86.216954
%% 87.210523
%% 88.223536
%% 89.281294
%% 90.345951
%% 91.389072
%% 92.424040
%% 93.435589
%% 94.449648
%% 95.650838
%% 96.449749
%% 96.817528
%% 97.392719
%% 97.867131
%% 99.211752
%% 99.381947
%% 99.536878
%% 99.947938
%% 99.974074
%% 100.000000
[root@jiangtao ~]# rpm   -ivh   sysstat-8.0.4-5.fc10.i386.rpm
warning: sysstat-8.0.4-5.fc10.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4ebfc273
Preparing...                ########################################### [100%]
   1:sysstat                ########################################### [100%]
二、删除
  命令格式:
  rpm -e ( or --erase) options pkg1 ... pkgN
  参数
  pkg1 ... pkgN :要删除的软件包
  详细选项
  --test 只执行删除的测试
  --noscripts 不运行预安装和后安装脚本程序
  --nodeps 不检查依赖性
  通用选项
  -vv 显示调试信息
实例如下:
[root@jiangtao ~]# rpm -qa |grep  sysstat
sysstat-8.0.4-5.fc10.i386
[root@jiangtao ~]# rpm -e -v sysstat-8.0.4-5.fc10.i386  没有信息显示,通过多加俩个vv显示如下。
[root@jiangtao ~]# rpm -i  sysstat-8.0.4-5.fc10.i386.rpm
warning: sysstat-8.0.4-5.fc10.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4ebfc273
[root@jiangtao ~]# rpm -e -vvv  sysstat-8.0.4-5.fc10.i386
D: opening  db environment /var/lib/rpm/Packages joinenv
D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Name rdonly mode=0x0
D: opening  db index       /var/lib/rpm/Pubkeys rdonly mode=0x0
D:  read h#    1414 Header V3 DSA signature: NOKEY, key ID 4ebfc273
D: ========== --- sysstat-8.0.4-5.fc10 i386/linux 0x1
D: opening  db index       /var/lib/rpm/Requirename rdonly mode=0x0
D: ========== recording tsort relations
D: ========== tsorting packages (order, #predecessors, #succesors, tree, depth, breadth)
D:     0    0    0    0    1    0   -sysstat-8.0.4-5.fc10.i386
D: closed   db index       /var/lib/rpm/Pubkeys
D: closed   db index       /var/lib/rpm/Requirename
D: closed   db index       /var/lib/rpm/Name
D: closed   db index       /var/lib/rpm/Packages
D: closed   db environment /var/lib/rpm/Packages
D: opening  db environment /var/lib/rpm/Packages joinenv
D: opening  db index       /var/lib/rpm/Packages create mode=0x42
D: mounted filesystems:
D:     i        dev    bsize       bavail       iavail mount point
D:     0 0x00000805     4096      1354350       560174 /
D:     1 0x00000003     4096            0           -1 /proc
D:     2 0x00000000     4096            0           -1 /sys
D:     3 0x0000000b     4096            0           -1 /dev/pts
D:     4 0x00000801     1024       172608        50164 /boot
D:     5 0x00000012     4096        64371        64381 /dev/shm
D:     6 0x00000013     4096            0           -1 /proc/sys/fs/binfmt_misc
D:     7 0x00000014     4096            0           -1 /var/lib/nfs/rpc_pipefs
D:     8 0x00000015     4096            0           -1 /sys/fs/fuse/connections
D:     9 0x00000011     4096      1354350       560174 /root/.gvfs
D:    10 0x00000b00     2048            0           -1 /media/Fedora 9 i386 DVD
D: sanity checking 1 elements
D: running pre-transaction scripts
D: computing 48 file fingerprints
D: computing file dispositions
D: opening  db index       /var/lib/rpm/Basenames create mode=0x42
D: ========== --- sysstat-8.0.4-5.fc10 i386-linux 0x1
D:     erase: sysstat-8.0.4-5.fc10 has 48 files, test = 0
D: opening  db index       /var/lib/rpm/Name create mode=0x42
D: opening  db index       /var/lib/rpm/Pubkeys create mode=0x42
D:  read h#    1414 Header V3 DSA signature: NOKEY, key ID 4ebfc273
D: opening  db index       /var/lib/rpm/Triggername create mode=0x42
D:     erase: %preun(sysstat-8.0.4-5.fc10.i386) asynchronous scriptlet start
D:     erase: %preun(sysstat-8.0.4-5.fc10.i386) execv(/bin/sh) pid 3355
+ '[' 0 = 0 ']'
+ rm -f '/var/log/sa/*'
+ /sbin/chkconfig --del sysstat
D:     erase: waitpid(3355) rc 3355 status 0 secs 0.009
D: fini      040755  2 (   0,   0)      4096 /var/log/sa
D: fini      100644  1 (   0,   0)      1819 /usr/share/man/man8/sadc.8.gz
D: fini      100644  1 (   0,   0)       601 /usr/share/man/man8/sa2.8.gz
D: fini      100644  1 (   0,   0)       672 /usr/share/man/man8/sa1.8.gz
D: fini      100644  1 (   0,   0)      6290 /usr/share/man/man1/sar.1.gz
D: fini      100644  1 (   0,   0)      2123 /usr/share/man/man1/sadf.1.gz
D: fini      100644  1 (   0,   0)      2606 /usr/share/man/man1/pidstat.1.gz
D: fini      100644  1 (   0,   0)      1615 /usr/share/man/man1/mpstat.1.gz
D: fini      100644  1 (   0,   0)      3676 /usr/share/man/man1/iostat.1.gz
D: fini      100644  1 (   0,   0)      5587 /usr/share/locale/vi/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4694 /usr/share/locale/sv/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4680 /usr/share/locale/sk/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4794 /usr/share/locale/ru/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4832 /usr/share/locale/ro/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4931 /usr/share/locale/pt_BR/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4903 /usr/share/locale/pt/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4688 /usr/share/locale/pl/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4595 /usr/share/locale/nn/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4895 /usr/share/locale/nl/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4590 /usr/share/locale/nb/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      5543 /usr/share/locale/ky/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4783 /usr/share/locale/ja/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4918 /usr/share/locale/it/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4899 /usr/share/locale/fr/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4931 /usr/share/locale/es/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4809 /usr/share/locale/de/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4579 /usr/share/locale/da/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)      4730 /usr/share/locale/af/LC_MESSAGES/sysstat.mo
D: fini      100644  1 (   0,   0)       338 /usr/share/doc/sysstat-8.0.4/TODO
D: fini      100644  1 (   0,   0)      4161 /usr/share/doc/sysstat-8.0.4/README
D: fini      100644  1 (   0,   0)     26006 /usr/share/doc/sysstat-8.0.4/FAQ
D: fini      100644  1 (   0,   0)      7346 /usr/share/doc/sysstat-8.0.4/CREDITS
D: fini      100644  1 (   0,   0)     17982 /usr/share/doc/sysstat-8.0.4/COPYING
D: fini      100644  1 (   0,   0)     53846 /usr/share/doc/sysstat-8.0.4/CHANGES
D: fini      040755  2 (   0,   0)      4096 /usr/share/doc/sysstat-8.0.4
D: fini      100755  1 (   0,   0)     40376 /usr/lib/sa/sadc
D: fini      100755  1 (   0,   0)      2101 /usr/lib/sa/sa2
D: fini      100755  1 (   0,   0)      1401 /usr/lib/sa/sa1
D: fini      040755  2 (   0,   0)      4096 /usr/lib/sa
D: fini      100755  1 (   0,   0)     48156 /usr/bin/sar
D: fini      100755  1 (   0,   0)     60608 /usr/bin/sadf
D: fini      100755  1 (   0,   0)     31896 /usr/bin/pidstat
D: fini      100755  1 (   0,   0)     23372 /usr/bin/mpstat
D: fini      100755  1 (   0,   0)     34604 /usr/bin/iostat
D: fini      100644  1 (   0,   0)      5682 /etc/sysconfig/sysstat.ioconf
D: fini      100644  1 (   0,   0)       280 /etc/sysconfig/sysstat
D: fini      100755  1 (   0,   0)       976 /etc/rc.d/init.d/sysstat
D: fini      100644  1 (   0,   0)       235 /etc/cron.d/sysstat
D:   --- h#    1414 sysstat-8.0.4-5.fc10
D: removing "sysstat" from Name index.
D: removing 48 entries from Basenames index.
D: opening  db index       /var/lib/rpm/Group create mode=0x42
D: removing "Applications/System" from Group index.
D: opening  db index       /var/lib/rpm/Requirename create mode=0x42
D: removing 26 entries from Requirename index.
D: opening  db index       /var/lib/rpm/Providename create mode=0x42
D: removing 3 entries from Providename index.
D: opening  db index       /var/lib/rpm/Dirnames create mode=0x42
D: removing 30 entries from Dirnames index.
D: opening  db index       /var/lib/rpm/Requireversion create mode=0x42
D: removing 26 entries from Requireversion index.
D: opening  db index       /var/lib/rpm/Provideversion create mode=0x42
D: removing 3 entries from Provideversion index.
D: opening  db index       /var/lib/rpm/Installtid create mode=0x42
D: removing 1 entries from Installtid index.
D: opening  db index       /var/lib/rpm/Sigmd5 create mode=0x42
D: removing 1 entries from Sigmd5 index.
D: opening  db index       /var/lib/rpm/Sha1header create mode=0x42
D: removing "4a9793f3155c7c86a5de96b9dfff1f9937033906" from Sha1header index.
D: opening  db index       /var/lib/rpm/Filemd5s create mode=0x42
D: removing 48 entries from Filemd5s index.
D: running post-transaction scripts
D: closed   db index       /var/lib/rpm/Pubkeys
D: closed   db index       /var/lib/rpm/Filemd5s
D: closed   db index       /var/lib/rpm/Sha1header
D: closed   db index       /var/lib/rpm/Sigmd5
D: closed   db index       /var/lib/rpm/Installtid
D: closed   db index       /var/lib/rpm/Provideversion
D: closed   db index       /var/lib/rpm/Requireversion
D: closed   db index       /var/lib/rpm/Dirnames
D: closed   db index       /var/lib/rpm/Triggername
D: closed   db index       /var/lib/rpm/Providename
D: closed   db index       /var/lib/rpm/Requirename
D: closed   db index       /var/lib/rpm/Group
D: closed   db index       /var/lib/rpm/Basenames
D: closed   db index       /var/lib/rpm/Name
D: closed   db index       /var/lib/rpm/Packages
D: closed   db environment /var/lib/rpm/Packages
D: May free Score board((nil))
[root@jiangtao ~]#
这里涉及到打开rpm库文件,以及关闭等一系列操作,随着学系的深入,本人会继续深入其中,咱时不做详细介绍。

三、升级
  命令格式
  rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm
  参数
  file1.rpm ... fileN.rpm 软件包的名字
  详细选项
  -h (or --hash) 安装时输出hash记号 (``#'')
  --oldpackage 允许"升级"到一个老版本
  --test 只进行升级测试
   --excludedocs 不安装软件包中的文档文件
  --includedocs 安装文档
  --replacepkgs 强制重新安装已经安装的软件包
  --replacefiles 替换属于其它软件包的文件
  --force 忽略软件包及文件的冲突
  --percent 以百分比的形式输出安装的进度。
  --noscripts 不运行预安装和后安装脚本
  --prefix 将软件包安装到由 指定的路径下
  --ignorearch 不校验软件包的结构
  --ignoreos 不检查软件包运行的操作系统
  --nodeps 不检查依赖性关系
  --ftpproxy 作为 FTP代理
    --ftpport 指定FTP的端口号为
通用选项
  -v 显示附加信息
  -vv 显示调试信息
  --root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
   --rcfile 设置rpmrc文件为
  --dbpath 设置RPM 资料库存所在的路径为
    事实上RPM 将自动卸载已安装的老版本的 软件包,用户无法看到有关信息。事实上用户可能总是使用 -U 来安装软件包, 因为即便以往未安装过该软件包,也能正常运行。

四、查询
  命令格式:
  rpm -q ( or --query) options
  参数:
  pkg1 ... pkgN :查询已安装的软件包
  详细选项
  -p (or ``-'') 查询软件包的文件
  -f 查询属于哪个软件包
  -a 查询所有安装的软件包
  --whatprovides 查询提供了 功能的软件包、
  -g 查询属于 组的软件包
     --whatrequires 查询所有需要 功能的软件包
  信息选项
    显示软件包的全部标
  -i 显示软件包的概要信息
  -l 显示软件包中的文件列表
  -c 显示配置文件列表
  -d 显示文档文件列表
  -s 显示软件包中文件列表并显示每个文件的状态
  --scripts 显示安装、卸载、校验脚本
  --queryformat (or --qf) 以用户指定的方式显示查询信息
  --dump 显示每个文件的所有已校验信息
  --provides 显示软件包提供的功能
  --requires (or -R) 显示软件包所需的功能
  通用选项
  -v 显示附加信息
  -vv 显示调试信息
  --root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
  --rcfile 设置rpmrc文件为
  --dbpath 设置RPM 资料库存所在的路径为
五 校验
包校验是比较自软件包中安装的文件信息和软件包中的原始文件的相同信息。 与其它校验相同,包校验将比较文件的长度、MD5校验和、许可、类型、文件属主和群组。
使用 rpm -V 命令进行包校验。用户可以配合使用各个包选择选项 ,来列出校验包的查询结果。 简单地使用 rpm -V foo 可以校验 foo 包中原始安装时的所有文件。例如:
校验包含特定文件的软件包: rpm -Vf /bin/vi
校验所有已安装的软件包: rpm -Va
用 RPM 包文件校验已安装的软件包   rpm -Vp  sysstat-8.0.4-5.fc10.i386
如果担心RPM数据库被破坏,就可以使用这种方式加以校验
 命令格式:
  rpm -V ( or --verify, or -y) options
  参数
  pkg1 ... pkgN 将要校验的软件包名
  软件包选项
  -p Verify against package file
  -f 校验所属的软件包
  -a Verify 校验所有的软件包
  -g 校验所有属于组 的软件包
  详细选项
  --noscripts 不运行校验脚本
  --nodeps 不校验依赖性
  --nofiles 不校验文件属性
  通用选项
  -v 显示附加信息
  -vv 显示调试信息
  --root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
  --rcfile 设置rpmrc文件为
  --dbpath 设置RPM 资料库存所在的路径为
如果校验结果一切正常,将不会产生任何输出。如果有不一致的地方,会显示出来。 输出格式是8位长字符串, "c" 用以指配置文件, 接着是文件名。8位长字符,每个代表一个文件属性与RPM数据库中记录的属性相比较的结果。"." (点) 表示测试通过。下面的字符代表某测试的失败:
5 -- MD5 校验和
S -- 文件长度
L -- 符号链接
T -- 文件修改日期
D -- 设备
U -- 用户
G -- 用户组
M -- 模式 (包含许可和文件类型)
? -- 不可读文件
如果有信息输出, 用户应当认真加以考虑,是该删除、重新安装、还是修正出现的问题。
实例如下:
[root@jiangtao ~]# rpm -Vf  /etc/samba
S.5....T  c /etc/samba/smb.conf
   当然有些文件自己对其内容,相应的校验位就会变化,因此,应从实际仔细考虑之后,再做定夺
六   校验软件包中的文件
   语法:
  rpm -K ( or --checksig) options file1.rpm ... fileN.rpm
  参数:
  file1.rpm ... fileN.rpm 软件包的文件名
  Checksig--详细选项
  --nopgp 不校验PGP签名
  通用选项
  -v 显示附加信息
  -vv 显示调试信息
  --rcfile 设置rpmrc文件为
  实例如下:
[root@jiangtao ~]# rpm    --checksig sysstat-8.0.4-5.fc10.i386.rpm
sysstat-8.0.4-5.fc10.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#4ebfc273)
[root@jiangtao ~]# rpm    --checksig -v sysstat-8.0.4-5.fc10.i386.rpm
sysstat-8.0.4-5.fc10.i386.rpm:
    Header V3 DSA signature: NOKEY, key ID 4ebfc273
    Header SHA1 digest: OK (4a9793f3155c7c86a5de96b9dfff1f9937033906)
    MD5 digest: OK (7db40681dafbee16f5e0b01fcc50462e)
    V3 DSA signature: NOKEY, key ID 4ebfc273
[root@jiangtao ~]# rpm    --checksig -vvv sysstat-8.0.4-5.fc10.i386.rpm
D: Expected size:       195898 = lead(96)+sigs(344)+pad(0)+data(195458)
D:   Actual size:       195898
D: opening  db environment /var/lib/rpm/Packages joinenv
D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Pubkeys rdonly mode=0x0
sysstat-8.0.4-5.fc10.i386.rpm:
    Header V3 DSA signature: NOKEY, key ID 4ebfc273
    Header SHA1 digest: OK (4a9793f3155c7c86a5de96b9dfff1f9937033906)
    MD5 digest: OK (7db40681dafbee16f5e0b01fcc50462e)
    V3 DSA signature: NOKEY, key ID 4ebfc273
D: closed   db index       /var/lib/rpm/Pubkeys
D: closed   db index       /var/lib/rpm/Packages
D: closed   db environment /var/lib/rpm/Packages
D: May free Score board((nil))
七  其它RPM选项
   --rebuilddb 重建RPM资料库
  --initdb 创建一个新的RPM资料库
  --quiet 尽可能的减少输出
  --help 显示帮助文件
  --version 显示RPM的当前版本
阅读(1279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~