公告版位

新版部落格:blog.changyy.org

有時偷懶寫 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


, , ,

changyy 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • Yu-jen Wang
  • 執行"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檔案的最後.
  • 感謝提醒 :D

    changyy 於 2013/02/26 10:13 回覆