我正在对一个巨大的 shell 脚本进行故障排除。我经常使用 sudo
从我的主目录运行脚本。每当执行 find
时,我都会看到此错误:
发现:.: 权限被拒绝
确实 root 无法访问我的主目录(这是当前工作目录或上面错误中的 .
),但我不是在询问 find
在我的主目录中做任何事情,宁愿它完全独立。
为了真正说明问题,我运行了这个:
sudo find/dev -maxdepth 1 -type f
还是报同样的错。如果 -type -f
被删除,错误将附加到预期结果的末尾。当然,如果我 cd/dev
没有错误..可能是因为 root 可以访问 /dev
。尽管我不认为它会导致问题,但它会使脚本看起来有问题。如何防止脚本显示这些错误?
最佳答案
我跑了:
strace find /dev -maxdepth 1
在 GNU/Linux (Ubuntu) 上发现 find
使用 fchdir
系统调用遍历目录树,最后执行 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
。
关于linux - Find 返回 "find: .: Permission denied",但我没有搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5791651/