在特定的目录中断运行rpm命令

我有一个与这个RPM问题无关的问题。 我不确定这两者是否相关,但我只是谈论与运行rpm命令相关的问题,因为它更容易解释。 我们遇到的另一个问题涉及到我们的应用程序,而其他人都不知道。 反正,所以我们的质量保证人员正试图解决为什么文件不能写入这个特定的目录。 出于某种原因,她决定运行rpm -qa | grep -i lp rpm -qa | grep -i lp 。 假设目录是/home/tom/mydir 。 如果她以她的用户的身份在/home/tom/mydir之外运行rpm命令,她将获得所需的结果。 如果她在那个目录里面,她会遇到以下情况。

 error: cannot open Packages index using db3 - Invalid argument (22) error: cannot open Packages database in /var/lib/rpm 

作为根,我可以在所述目录或其他任何地方运行rpm命令。 她认为这个问题是相关的,我只是想知道为什么这个目录给我们作为她的用户问题。

是的,我也尝试重buildRPM数据库。

用户报告类似问题的论坛post很less,stream行的答案似乎是这样的;

1)find并杀死任何持有rpm db open的进程;

 lsof | grep /var/lib/rpm 

2),然后重build数据库,并重新启动机器…

 rm -fv /var/lib/rpm/__* rpm --rebuilddb -v -v sudo reboot 

但是,如果你已经做到了,并没有喜悦,我会检查以下内容,并将输出粘贴到您的问题,或粘贴到一个pastebin等…

显示可能干扰您的调用选项的有效别名;

 $ alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' ... 

显示正在使用的path(如果你在那里看到一个,那么这将解释你如何得到CWD影响命令的结果);

 $ echo $PATH /usr/local/rvm/ge:/usr/:<snip>:/usr/local/sbin:/usr/sbin:/sbin:/opt/depot_too 

然后列出任何可能掩盖该目录中的命令的可执行文件;

  ls -lh /home/tom/mydir total 400K drwxrwxr-x 7 tomh tomh 4.0K May 18 16:28 android ...some other stuff... 

 find /home/tom/mydir -executable etc fileXXX 

/home/tom/mydir和outside中显示哪些可执行文件,以及哪些types的命令正在被parsing到;

 cd /home/tom/mydir $ which rpm /bin/rpm $ type -a rpm rpm is /bin/rpm $ which grep alias grep='grep --color=auto' /bin/grep $ type -a grep grep is aliased to `grep --color=auto' grep is /bin/grep 

在可疑目录的命令中运行strace ,然后再在外面运行strace 。 应该明确问题的出处。

如何使用strace?

每当我在一个特定的目录中有一个奇怪的命令时,它通常是两件事之一:PATH或LD_LIBRARY_PATH环境variables包含相对path,最终从该特定目录中拾取二进制文件/库。 因此,检查这两个,并查找任何不以“/”开头的字符,也不要以中间的“::”(这表示search当前目录)或尾随的“:”字符。