如果使用 sudo 命令创建文件,谁是文件所有者?

如果使用 sudo 命令创建文件,谁是文件所有者?

我使用我的用户名登录ravbholua

ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua

我创建的文件名为a1

ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a1

正如所料,上述文件的ravbholua所有者是我 ()。

echo接下来我使用 sudo 和命令创建 a2 :

ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a2

所有者只是我,即ravbholua

现在我再次使用 sudo 创建 a3 但使用vim命令:

ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct  8 09:57 a3

哦!怎么现在主人变了。这不是我,而是root。为什么和 会有这样的echo变化vim!令人惊讶的是改变命令创建的文件的所有者如何更改。

答案1

第二个示例echo在 下运行sudo,但是重定向发生在原始外壳下。

sudo bash -c "echo > a4"

答案2

sudo只是一个命令。

所以对于你的第一个例子: sudo echo>a2

sudo是命令。虽然重定向与回声相抵触,但这并不意味着任何事情。

例如: echo cat /etc/passwd > /tmp/foo 您不会在/tmp/foo 中获取/etc/passwd 的内容。你就会有cat /etc/passwd。 sudo 也不例外。 echo 部分只是 sudo 的一个参数。 sudo 确实使用它来执行操作,但 shell 不知道这一点。

这是 sudo 访问与 root 访问非常不同的方式之一。

sudo vim a3对于您使用sudovim a3作为 root运行的示例。而vim以root身份运行,因此文件归root所有。

相关内容