如何在没有 su root 的情况下测试 /root 中的文件是否存在?

如何在没有 su root 的情况下测试 /root 中的文件是否存在?

我的操作系统是 Ubuntu 14.04 LTS。我得到了一个文件/root/1.txt,并使用“yu”登录,而“yu”没有该文件的读取权限。

当我使用代码时if [ -e /root/1.txt ],它返回 false。我知道我可以用来su - root更改用户并获得正确的结果。

我的问题是:如果没有 ,我该如何做到这一点su - root?有没有办法解决这种情况sudo

我已经解决了这种情况test

sudo test -e /root/1.txt &&echo "the file is exist" ||echo "the file isn't exist"

答案1

/root/不是世界可读的很好的理由。如果您确实需要使用该文件,请将其放在其他地方。

答案2

很明显,系统上的 /root 目录(至少)不具有用户“yu”的“执行”权限,无论是通过组成员身份还是“其他”位。因此,'yu' 无法列出 /root 目录的内容来确定 /root/1.txt 是否存在。

有关文件和目录权限的进一步描述(在 Linux 中,正如您提到的 Ubuntu),请参阅: 执行与读取位。 Linux 中的目录权限如何工作?

如果您不愿意更改 /root 的权限,那么您需要升级您自己的(好吧,test是的)权限才能读取该目录。由于[它是一个真正的程序 ( /usr/bin/[) 以及内置的 shell,因此您可以使用 sudo: sudo [ -e /root/1.txt ] && echo yes || echo no。 (与之对比[[的是仅有的内置程序,而不是外部程序)。

如果你如果愿意更改 /root 上的权限,一项最小的更改是开放“其他”权限以添加“执行”位(sudo chmod o+x /root例如 )。这可以防止目录的一般列出,但使您能够检查特定文件:

user@host:~$ ls -ld /root
drwx-----x 2 root root 4096 Apr  3 04:55 /root
user@host:~$ [ -e /root/1.txt ] && echo yes
yes
user@host:~$ ls /root
ls: cannot open directory /root: Permission denied

“other+execute”的一种变体是“group+execute”,您可以在其中向组添加执行权限,并将 /root 的组更改为“yu”所属的组。

长话短说,这个声明:

当我使用代码 if [ -e /root/1.txt ] 时,它返回 false。我知道我可以使用 su - root 来更改用户并获得正确的结果。

对“正确”一词的使用具有误导性。文件系统权限决定了test行为方式。没关系,如果知道该文件存在;程序是否有权查看该文件很重要。

答案3

如果您想使用 sudo 而不是 su 来执行此操作,您可以这样做:

sudo sh

这将使您以 root 身份登录到终端,然后您就可以做您想做的事情了。但我不建议你乱用 /root,因为一定有其他用户无法访问它的原因。您应该将“1.txt”移动到其他地方。

相关内容