我想一些文字推到需要sudo
文件:擊回聲文本sudo的文件
sudo echo "some text" > /etc/path/to/file
但我不斷收到以下錯誤:
bash: /etc/path/to/file: Permission denied
我可以做到這一點nano
,但我需要以編程方式執行此操作。是否與>
運營商有問題?有沒有我可以使用的腳本?
我想一些文字推到需要sudo
文件:擊回聲文本sudo的文件
sudo echo "some text" > /etc/path/to/file
但我不斷收到以下錯誤:
bash: /etc/path/to/file: Permission denied
我可以做到這一點nano
,但我需要以編程方式執行此操作。是否與>
運營商有問題?有沒有我可以使用的腳本?
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
您沒有文件權限寫入您正在嘗試寫入的文件。 你應該研究chmod命令,它改變文件權限,以便你可以寫入文件。 這將刪除錯誤。
首先,我知道。 'sudo'應該繞過它。其次,如果我不能寫入文件,我也不能'chmod'它。 – PJSCopeland
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特權,因此我會建議對即使它提供了一些基本的保護這種方法。
您始終可以使用'sudo su'以root身份運行命令。 – user161778