Shell
將標準輸出重定向到您沒有寫入權限的文件
當您嘗試在沒有寫入權限的情況下修改文件時,您會收到錯誤消息:
> 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
另請參閱 GNU
dd
以conv=excl
避免破壞現有文件(如set -o noclobber
在 POSIX shell 中)和conv=nocreat
相反(僅更新現有文件)。