查询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%%(*} 削除‘(’和后面的所有字符 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
