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

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

目的:

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

2 查询rpm包信息说明

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

3 查询rpm包依赖的rpm包名

准备:

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

实现:

【脚本】

#!/bin/bash 

 

SUCCESS=0 

E_NOARGS=65 

 

if [ -z "$1" ] 

then 

   echo "Usage: `basename $0` rpm-file" 

   exit $E_NOARGS 

fi

 

{  

   rpm -i --test $1  # 查询 rpm 包是否可以被安装

   if [ "$?" -eq $SUCCESS ] 

   then 

     echo "$1 can be installed." 

   fi 

   echo

   echo "Archive Description:" 

   rpm -qpi $1       # 查询说明

   echo 

   echo "Archive Listing:" 

   rpm -qpl $1       # 查询列表    

   echo   

   echo "Requires Packages:" 

   rpm -qpR $1|while read line

    do 

    

     requirename=${line%%(*}     

{

   echo "select packages.name from packages inner join provides 

on packages.pkgKey = provides.pkgKey where provides.name = '$requirename';" | 

sqlite3 CentOS6.0_package_db.sqlite

} #splite3为查询数据库的命令

 

    done|uniq   #uniq删除其中重复的行

} > "$1-query"       # 把代码块中的所有输出重定向文件中

 

cat "$1-query"

echo

echo "Results of rpm check in file $1-query"

脚本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%%(*} 削除‘(’和后面的所有字符

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