Shell

將標準輸出重定向到您沒有寫入權限的文件

  • October 18, 2021

當您嘗試在沒有寫入權限的情況下修改文件時,您會收到錯誤消息:

> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo

Sudoing 沒有幫助,因為它以 root 身份執行命令,但 shell 會處理重定向 stdout 並以您的方式打開文件:

> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo

除了以root身份打開shell並以這種方式操作文件之外,是否有一種簡單的方法可以將stdout重定向到您無權寫入的文件?

> sudo su
# echo test > /tmp/foo

是的,使用tee. 所以echo test > /tmp/foo變成

echo test | sudo tee /tmp/foo

您還可以附加 ( >>)

echo test | sudo tee -a /tmp/foo

將文件的內容替換為echo(如>shell 重定向運算符)的輸出。

echo test | sudo dd of=/tmp/foo

要寫入文件(在開始時,儘管您可以使用seek以不同的偏移量輸出)而不截斷(如1<>Bourne shell 運算符):

echo test | sudo dd of=/tmp/foo conv=notrunc

使用 GNU附加到文件(如>>dd

echo test | sudo dd of=/tmp/foo oflag=append conv=notrunc

另請參閱 GNUddconv=excl避免破壞現有文件(如set -o noclobber在 POSIX shell 中)和conv=nocreat相反(僅更新現有文件)。

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