如何在不锁定rpmdb的情况下查询已安装RPM包的版本?
不锁定rpmdb查询已安装RPM包版本的方法
当yum list installed | grep <package_name>因为rpmdb被其他yum/rpm进程锁定而卡顿时,你可以用以下几种方法绕开锁机制,快速查到包版本:
用rpm只读查询(默认不占写锁)
rpm的查询命令(比如-q、-qa)本来就是只读访问rpmdb,不会申请排他写锁,所以不会被正在执行安装/更新的进程阻塞。常用命令:- 查指定包版本:
rpm -q <package_name> - 查包详细信息(含版本、发布号):
rpm -qi <package_name> - 模糊搜相关包:
rpm -qa | grep <package_name>
- 查指定包版本:
强制跳过rpmdb锁检查
如果遇到rpmdb被写锁占着,rpm默认也会等锁,这时候加--nolock参数就能直接读数据库,不用等:rpm -q --nolock <package_name>注:这种情况可能读到临时不一致的数据,但查已安装包版本基本不会有问题。
直接读rpmdb文件(进阶操作)
rpmdb存在/var/lib/rpm/目录里,用rpmdb工具(多数系统自带)也能查:rpmdb -qa <package_name>要是用Berkeley DB的
db_dump工具读Name、Version这些文件也行,但操作太麻烦,一般没必要。
另外要注意:yum所有操作都会主动申请rpmdb的排他写锁,所以不管是yum的查询还是安装命令,只要有其他yum进程在跑,就可能卡壳。优先用rpm的查询命令才是高效的选择。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

