我使用我的用户名登录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所有。