![在特定目录中运行 rpm 命令失败](https://linux22.com/image/585491/%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95%E4%B8%AD%E8%BF%90%E8%A1%8C%20rpm%20%E5%91%BD%E4%BB%A4%E5%A4%B1%E8%B4%A5.png)
我有一个与此 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
该命令,然后在外部再次运行。它应该可以清楚问题出在哪里。
答案3
每当我遇到某个目录中的命令行为异常时,通常都是以下两种情况之一:PATH 或 LD_LIBRARY_PATH 环境变量包含相对路径,最终会从该特定目录中获取二进制文件/库。因此,请检查这两个变量,并查找任何不以“/”开头的内容,以及中间的“::”(这将指示搜索当前目录)或尾随“:”字符的内容。