linux - Find 返回 "find: .: Permission denied",但我没有搜索

标签 linux bash sudo

我正在对一个巨大的 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/

相关文章:

linux - 移动目录而不破坏现有目录

linux - 使用 ffmpeg 在服务器端进行文件转换

git - 如何检查是否从 .bashrc 安装了 Git

php - 使用php在web中使用sh文件删除文件

emacs - 如何在 Emacs 中运行 sudo 命令?

linux - 在 sudo 下自动执行 bash 命令不起作用

c - perf record如何获取目标进程指令的虚拟内存地址以及perf使用什么数据结构来存储它

c - 如何避免物理磁盘 I/O

bash - 带有 bash 和 applescript 的字符串文字

java - 如何在 Ubuntu 上安装 Intellij IDEA?