在特定目录中运行 rpm 命令失败

在特定目录中运行 rpm 命令失败

我有一个与此 RPM 问题无关的问题。我不确定这两者是否相关,但我只讨论与运行命令相关的问题,rpm因为它更容易解释。我们遇到的另一个问题与我们的应用程序有关,其他人不会知道。无论如何,我们的一位 QA 人员正在尝试排除故障,以解决无法将文件写入此特定目录的原因。由于某种原因,她决定运行rpm -qa | grep -i lp。假设目录是/home/tom/mydir。如果她以她的用户身份在之外运行 rpm 命令/home/tom/mydir,她会得到所需的结果。如果她在该目录内,她会遇到以下情况。

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

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

是的,我也尝试过重建 RPM 数据库。

答案1

论坛上很少有用户报告类似的问题,而常见的答案似乎是这样的;

1)查找并终止任何保持 rpm db 打开的进程;

lsof | grep /var/lib/rpm

2)然后重建数据库,并重新启动机器......

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'                                             
...

显示正在使用的路径(如果您.在其中看到,那么这将解释您如何获得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显示在内部和外部命令被解析为哪个可执行文件和哪种类型;

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

答案2

在可疑目录中运行strace该命令,然后在外部再次运行。它应该可以清楚问题出在哪里。

如何使用 strace?

答案3

每当我遇到某个目录中的命令行为异常时,通常都是以下两种情况之一:PATH 或 LD_LIBRARY_PATH 环境变量包含相对路径,最终会从该特定目录中获取二进制文件/库。因此,请检查这两个变量,并查找任何不以“/”开头的内容,以及中间的“::”(这将指示搜索当前目录)或尾随“:”字符的内容。

相关内容