ls 显示“没有这样的文件”,但为什么呢?

ls 显示“没有这样的文件”,但为什么呢?

我有一些我不明白的奇怪行为。我只是想列出目录中的一些文件:

sudo find /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root产生:

/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/trustdb.gpg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/private-keys-v1.d
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.extra
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx~
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.browser
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.ssh

所以我知道 .gnupg 目录存在,并且其中有文件。

sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root产生:

total 12
drwx------ 3 root root 4096 Sep 21 14:54 .
drwxr-xr-x 3 root root 4096 Aug 24 18:30 ..
drwxr-xr-x 3 root root 4096 Sep 21 14:54 .gnupg

所以该目录本身具有rwx权限。

但该命令sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*给出:

ls: cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*': No such file or directory

我一遍又一遍地检查了这条路,没有发现任何问题。我有 rwx 权限和 root 级别访问权限。还有什么可以阻止我列出这个目录?

我的最终目标是做一个chmod 600 /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*,但也失败了。但现在我宁愿选择 ls。

编辑:它刚刚击中了我。这是否与文件通配有关。 * 是否在 sudo 之前扩展,因此没有 root 访问权限?

答案1

正如您正确指出的那样,扩展顺序是问题的根源。与文件名全局相关的步骤是“文件名扩展”。尽管按扩展顺序来说它是相当晚的(参见这里例如),它被执行该命令实际上被调用。这意味着例如ls *在包含 , 的目录中file1.txtfile2.txt并且file3.txt实际上被称为ls file1.txt file2.txt file3.txt.

现在的问题是调用用户没有进入该.gnupg目录所需的权限。因此,文件名 glob 的扩展*将失败。在这种情况下,除非设置特定的 shell 选项*将保留文字在命令行上,以便 shell 尝试ls在文件上执行命令字面意思是*。因此出现错误消息

cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*'

*如您所见,它尝试访问名为inside 的文件/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/

相反,您可以编写一个执行相关操作的 shell 脚本,然后将其称为rootusing sudo。您需要将脚本放置在可从任何地方访问的路径下,例如/usr/local/bin.

相关内容