Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux “查找正在返回”;查找::权限被拒绝";,但我不是在寻找_Linux_Bash_Sudo - Fatal编程技术网

Linux “查找正在返回”;查找::权限被拒绝";,但我不是在寻找

Linux “查找正在返回”;查找::权限被拒绝";,但我不是在寻找,linux,bash,sudo,Linux,Bash,Sudo,我有一个巨大的shell脚本,我正在进行故障排除。我经常使用sudo从主目录运行脚本。每当执行find时,我都会看到以下错误: find::权限被拒绝 确实,root用户无权访问我的主目录(即当前工作目录或上述错误中的),但我并不是要求find在我的主目录中执行任何操作,而是希望它完全不处理它 为了让大家真正了解这一点,我运行了以下命令: sudo find/dev-maxdepth 1-type f 但仍然会得到相同的错误。如果删除了-type-f,则错误会附加到预期结果的末尾。当然,如果Ic

我有一个巨大的shell脚本,我正在进行故障排除。我经常使用
sudo
从主目录运行脚本。每当执行
find
时,我都会看到以下错误:

find::权限被拒绝

确实,root用户无权访问我的主目录(即当前工作目录或上述错误中的
),但我并不是要求
find
在我的主目录中执行任何操作,而是希望它完全不处理它

为了让大家真正了解这一点,我运行了以下命令:

sudo find/dev-maxdepth 1-type f


但仍然会得到相同的错误。如果删除了
-type-f
,则错误会附加到预期结果的末尾。当然,如果I
cd/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的输出。感谢您的帮助。我希望有某种开关来关闭该行为。