2016-04-26 58 views
1

我想一些文字推到需要sudo文件:擊回聲文本sudo的文件

sudo echo "some text" > /etc/path/to/file 

但我不斷收到以下錯誤:

bash: /etc/path/to/file: Permission denied 

我可以做到這一點nano,但我需要以編程方式執行此操作。是否與>運營商有問題?有沒有我可以使用的腳本?

+0

您始終可以使用'sudo su'以root身份運行命令。 – user161778

回答

4

Shell(在這種情況下爲bash)在運行命令之前首先執行重定向(>)。因此/etc/path/to/file將在sudo甚至運行且正常用戶沒有足夠權限創建文件/etc/path/to/file的命令之前創建,因此會出現有關權限的錯誤消息。

你可以這樣做:

sudo bash -c 'echo "some text" > /etc/path/to/file' 

或者使用tee

echo "some text" | sudo tee /etc/path/to/file 
-1

您沒有文件權限寫入您正在嘗試寫入的文件。 你應該研究chmod命令,它改變文件權限,以便你可以寫入文件。 這將刪除錯誤。

+0

首先,我知道。 'sudo'應該繞過它。其次,如果我不能寫入文件,我也不能'chmod'它。 – PJSCopeland

0

heemayl已經解釋的權限問題,但是你要考慮到,運行sudo的命令仍然會要求你輸入帳號用戶密碼手動。這是除非你已經在sudoers文件中指定運行sudo的用戶不需要密碼,我希望不是這種情況。

所以爲了避免輸入密碼手動你有幾種可能性,其中幾乎都是一個非常糟糕的主意,因爲他們基本需要您存儲用戶密碼的正/etc/shadow文件之外。

您可以做的最好的做法是將您的密碼存儲在普通文件中,並嚴格限制其訪問權限。

echo "password" > ~/.password && chmod 400 ~/.password 

之後,你可以使用-S參數sudo來從這樣一個外部文件中讀取密碼。

sudo -S bash -c 'echo "some text" > /etc/test' <~/.password 

再次,存儲外/etc/shadow用戶密碼是一個巨大的安全隱患,特別是如果用戶有sudoer特權,因此我會建議對即使它提供了一些基本的保護這種方法。