Linux “查找正在返回”;查找::权限被拒绝";,但我不是在寻找
我有一个巨大的shell脚本,我正在进行故障排除。我经常使用Linux “查找正在返回”;查找::权限被拒绝";,但我不是在寻找,linux,bash,sudo,Linux,Bash,Sudo,我有一个巨大的shell脚本,我正在进行故障排除。我经常使用sudo从主目录运行脚本。每当执行find时,我都会看到以下错误: find::权限被拒绝 确实,root用户无权访问我的主目录(即当前工作目录或上述错误中的),但我并不是要求find在我的主目录中执行任何操作,而是希望它完全不处理它 为了让大家真正了解这一点,我运行了以下命令: sudo find/dev-maxdepth 1-type f 但仍然会得到相同的错误。如果删除了-type-f,则错误会附加到预期结果的末尾。当然,如果Ic
sudo
从主目录运行脚本。每当执行find
时,我都会看到以下错误:
find::权限被拒绝
确实,root用户无权访问我的主目录(即当前工作目录或上述错误中的
),但我并不是要求find
在我的主目录中执行任何操作,而是希望它完全不处理它
为了让大家真正了解这一点,我运行了以下命令:
sudo find/dev-maxdepth 1-type f
但仍然会得到相同的错误。如果删除了
-type-f
,则错误会附加到预期结果的末尾。当然,如果Icd/dev
没有错误..可能是因为root有权访问/dev
。尽管我不认为这会引起问题,但它会让脚本看起来有问题。如何防止脚本显示这些错误?尝试重定向stderr。例如,您可以将其扔掉:
find /dev 2>/dev/null
在脚本开头添加一张
cd/
。除非您source
it,否则脚本将在子shell中运行,因此您自己的$PWD
不会更改。如果您确实找到了它的源代码,可以在开始时存储$PWD
,在结束时存储cd--“$PWD”
,或者如果您没有在脚本中执行任何其他cd
,则只存储cd
strace find /dev -maxdepth 1
在GNU/Linux(Ubuntu)上,find
使用fchdir
syscall遍历目录树,最后执行fchdir
返回原始工作目录。下面是一个片段:
open(".", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_NOFOLLOW) = 4
fchdir(4) = 0
... irrelevant ...
write(1, "/dev\n", 5) = 5
open("/dev", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 5
fcntl64(5, F_GETFD) = 0x1 (flags FD_CLOEXEC)
fchdir(5) = 0
... potentially more fchdirs ...
fchdir(4) = 0
close(4) = 0
我的暗示cd/tmp
(或其他完全可访问的目录)在运行find
之前,如果sudo find
命令指定,root
应该能够访问您的主目录:这就是“root”的意思。@pavium除非主目录通过root\u squash
选项安装在NFS上(默认)。@Bolo是正确的。主目录是外部挂载的。root
对其没有权限。感谢您的建议。我仍然希望看到stderr的输出。感谢您的帮助。我希望有某种开关来关闭该行为。