Shell
如果文件是使用 sudo 命令創建的,那麼文件所有者是誰?
我使用我的使用者名登錄
ravbholua
:ravbholua@ravbholua-Aspire-5315:~ $ echo $ 登錄名 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
)作為所有者。接下來我使用 sudo 和
echo
命令創建 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
哦!樓主怎麼變了。不是我,而是根。為什麼會有這樣的變化
echo
和vim
!令人驚訝的是,隨著命令的更改,已創建文件的所有者如何更改。
第二個範例在
echo
下執行sudo
,但重定向發生在原始 shell 下。sudo bash -c "echo > a4"
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 所有。