在 Linux 中使用 sudo 授予輸出重定向權限

在 Linux 中使用 sudo 授予輸出重定向權限

我嘗試將值“1”放入 的某個虛擬文件中/proc,儘管使用了以下命令,但我得到“權限被拒絕” sudo

name@comp-name:/etc/dhcp$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward 
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

我猜想該echo命令以 root 權限運行,但重定向 ( >) 可能在沒有 root 權限的情況下運行?我可以使用 root 權限來運行它們嗎?

答案1

在這種情況下,正如您所說,sudo僅適用於。echo

相反,您可以像這樣運行提升的 shell:

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

或甚至更短:

sudo -s 'echo 1 > /proc/sys/net/ipv4/ip_forward'

答案2

推薦的方法是透過管道傳輸到程序tee

echo 1 | tee /proc/sys/net/ipv4/ip_forward

答案3

問題是重定向是由您的 shell 完成的,而不是sudo.通常,您執行的程式會exec()在重定向後被編輯。由於您沒有寫入該檔案的權限,因此重定向失敗。如上所述,推薦的方法是使用tee,如

echo stuff | sudo tee /some/file/path

相關內容