Linux 'ls' 命令和目录权限 - “无法访问 /tmp/restricted/foo*: 没有这样的文件或目录”

Linux 'ls' 命令和目录权限 - “无法访问 /tmp/restricted/foo*: 没有这样的文件或目录”

为什么一个命令有效而另一个命令无效?我找到了一些远程相关的文章,但我无法理解它们。

$ sudo ls -la /tmp/restricted
total 12
drwxr-x---.  2 root root    42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo1
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo2
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo3

$ sudo ls -a /tmp/restricted/foo*
ls: cannot access /tmp/restricted/foo*: No such file or directory

请注意,如果我将 /tmp/restricted 上的权限更改为 755 而不是 750,则两个命令都会成功:

$ sudo chmod 755 /tmp/restricted/

$ sudo ls -la /tmp/restricted
total 12
drwxr-xr-x.  2 root root    42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo1
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo2
-rwxrwxr-x.  1 root tms      0 Mar 17 17:22 foo3

$ sudo ls -a /tmp/restricted/foo*
/tmp/restricted/foo1  /tmp/restricted/foo2  /tmp/restricted/foo3

答案1

当您运行时sudo ls -la /tmp/restrictedls以 root 身份运行并具有对/tmp/restricted.

当您运行 时sudo ls -a /tmp/restricted/foo*,您的 shell(不是以 root 身份运行)会尝试扩展/tmp/restricted/foo*。它不能,就你的情况而言,不要理会争论。ls以 root 身份运行,参数为/tmp/restricted/foo*,并且由于不存在具有该名称的文件,因此失败并显示您所看到的错误消息。

通过强制 shell 不使用 glob,您可以看到相同的错误:(除非您在当前目录中ls "*"有一个真正命名的文件)。*

相关内容