有時偷懶寫 script 想要用 echo "somethng" 寫資料到 root 擁有的檔案,就會出現 Permission denied 的訊息:
$ sudo echo '+::::::' >> /etc/passwd
-bash: /etc/passwd: Permission denied
改用下招即可:
$ sudo sh -c "echo '+::::::' >> /etc/passwd"
其實碰到的使用情境是 NIS client 的一堆檔案更新:
$ sudo sh -c "echo '+::::::' >> /etc/passwd" && sudo sh -c "echo '+:::' >> /etc/group" && sudo sh -c "echo '+::::::::' >> /etc/shadow" && sudo sh -c "echo '+:::' >> /etc/gshadow"
補充一點,如果 NIS 尚未設定好時,這時用 sudo 或 login 等相關動作會卡住非常久,從 /var/log/syslog 會看到 … ypbind … : broadcast: RPC: Timed out. 相關訊息,故建議先用 sudo su 轉成 root 角色在安裝 NIS 相關動作 :P
執行"sudo echo '+::::::' >> /etc/passwd"會出現"Permission denied"是因為sudo只有用root身份執行"echo '+::::::'",
回覆刪除然後把echo的結果用原本的身份附加到/etc/passwd檔案的最後,
一般使用者身份通常是不能寫入/etc/passwd, 所以就出現"Permission denied"了!!
改用tee指令也可以達成原本的目的:
echo '+::::::' | sudo tee /etc/passwd
先echo '+::::::'然後再sudo用tee指令把echo的結果用root身份附加到/etc/passwd檔案的最後.
版主回覆:(12/17/2012 11:36:48 AM)
感謝提醒 :D