查询rpm包信息、文件列表和运行的依赖包

前端之家收集整理的这篇文章主要介绍了查询rpm包信息、文件列表和运行的依赖包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目的:

1 查询rpm包是否可以被安装

2 查询rpm包信息说明

3 查询rpm包包含的文件列表

3 查询rpm包依赖的rpm包名

准备:

把路径/var/cache/yum/下子目录中存在以sqlite为后缀的文件复制到脚本实现的同一目录下,并改名为CentOS6.0_package_db.sqlite。

实现:

【脚本】

  1. #!/bin/bash
  2.  
  3.  
  4. SUCCESS=0
  5.  
  6. E_NOARGS=65
  7.  
  8.  
  9. if [ -z "$1" ]
  10.  
  11. then
  12.  
  13. echo "Usage: `basename $0` rpm-file"
  14.  
  15. exit $E_NOARGS
  16.  
  17. fi
  18.  
  19.  
  20. {
  21.  
  22. rpm -i --test $1 # 查询 rpm 包是否可以被安装
  23.  
  24. if [ "$?" -eq $SUCCESS ]
  25.  
  26. then
  27.  
  28. echo "$1 can be installed."
  29.  
  30. fi
  31.  
  32. echo
  33.  
  34. echo "Archive Description:"
  35.  
  36. rpm -qpi $1 # 查询说明
  37.  
  38. echo
  39.  
  40. echo "Archive Listing:"
  41.  
  42. rpm -qpl $1 # 查询列表
  43.  
  44. echo
  45.  
  46. echo "Requires Packages:"
  47.  
  48. rpm -qpR $1|while read line
  49.  
  50. do
  51.  
  52.  
  53. requirename=${line%%(*}
  54.  
  55. {
  56.  
  57. echo "select packages.name from packages inner join provides
  58.  
  59. on packages.pkgKey = provides.pkgKey where provides.name = '$requirename';" |
  60.  
  61. sqlite3 CentOS6.0_package_db.sqlite
  62.  
  63. } #splite3为查询数据库的命令
  64.  
  65.  
  66. done|uniq #uniq删除其中重复的行
  67.  
  68. } > "$1-query" # 把代码块中的所有输出重定向文件
  69.  
  70.  
  71. cat "$1-query"
  72.  
  73. echo
  74.  
  75. echo "Results of rpm check in file $1-query"
  76.  

脚本shell命令解析:

字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法

[-z string] 如果string长度为零,则为真

位置参数$1$2,...,$N$#代表了命令行的参数数量$0代表了脚本的名字,第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中。

$?(显示最后命令的退出状态,0表示没有错误,其他值表面有错误)

子串削除

${string#substring}

$string 的左边截掉第一个匹配的$substring

${string##substring}

$string 的左边截掉最后一个个匹配的$substring

${string%substring}

$string 的右边截掉第一个匹配的$substring

${string%%substring}

$string 的右边截掉最后一个匹配的$substring

${line%%(*} 削除‘(’和后面的所有字符

猜你在找的设计模式相关文章