为什么一个命令有效而另一个命令无效?我找到了一些远程相关的文章,但我无法理解它们。
$ 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/restricted
,ls
以 root 身份运行并具有对/tmp/restricted
.
当您运行 时sudo ls -a /tmp/restricted/foo*
,您的 shell(不是以 root 身份运行)会尝试扩展/tmp/restricted/foo*
。它不能,就你的情况而言,不要理会争论。ls
以 root 身份运行,参数为/tmp/restricted/foo*
,并且由于不存在具有该名称的文件,因此失败并显示您所看到的错误消息。
通过强制 shell 不使用 glob,您可以看到相同的错误:(除非您在当前目录中ls "*"
有一个真正命名的文件)。*