加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

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

发布时间:2020-05-24 04:53:58 所属栏目:程序设计 来源:互联网
导读:目的: 1 查询rpm包是否可以被安装 2 查询rpm包信息说明 3 查询rpm包包含的文件列表 3 查询rpm包依赖的rpm包名 准备: 把路径/var/cache/yum/下子目录中存在以sqlite为后缀的文件复制到脚本实现的同一目录下,并改名为CentOS6.0_package_db.sqlite。 实现:

目的:

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读