Bash

為什麼 root 可以做到這一點,但 sudo 不能?

  • March 18, 2016

我在我的 Debian 機器上設置為一個sudoer,我一直使用它來安裝軟體等……我遇到了一個讓我摸不著頭腦的有趣情況:

我嘗試使用以下命令在 apt 中啟用精美的進度條:

sudo echo 'Dpkg::Progress-Fancy "1";' > /etc/apt/apt.conf.d/99progressbar

我有權限問題:

/etc/apt/apt.conf.d/99progressbar: Permission denied

但是,如果我su, 然後執行命令,一切正常。

為什麼會這樣?

因為

sudo cmd > file

被解釋為

(sudo cmd) > file

通過你的外殼。即重定向是作為您自己的使用者完成的。

我解決的方法是使用

cmd | sudo tee file

補充:這也將cmd在你的控制台上顯示輸出,如果你不希望你必須重定向它。

據我所知,>是 shell 本身的命令(重定向由非 root shell 本身完成)當你使用su時,它作為 root shell 執行,它允許你重定向 root 擁有的文件

引用自:https://unix.stackexchange.com/questions/270747