使用 sudo echo foo > bar.txt 出現 Permission denied

在使用指令的時候通常會很習慣的使用

$ echo foo > bar.txt
-bash: bar.txt: Permission denied

來新增資料到檔案,所以權限不夠就會很習慣的使用 sudo 直接提權

$ sudo echo foo > bar.txt
-bash: bar.txt: Permission denied

不過這樣是行不通的因為 > 並不會吃到權限,所以會新增失敗。

解決使用 > 出現 Permission denied 的問題

那要怎麼做才可以解決這個問題呢?其實有三種方法可以解決

解決方法 1

使用 sh 包一層就可以快速的解決這個問題

$ sudo sh -c "echo foo > bar.txt"

解決方法 2

也可以使用 tee 來幫助完成這件事情,它吃了 pipe 會把東西丟到 stdout 也會把它丟到檔案

$ echo foo | sudo tee bar.txt
foo

解決方法 3

直接使用 sudo su 直接開一個新的 shell 直接做對應的動作也是一個好方法

$ sudo su
# echo foo > bar.txt