2013年1月24日 星期四

[Linux] sudo echo '+::::::' >> /etc/passwd : Permission denied @ Ubuntu 12.04

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


1 則留言:

  1. 執行"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

    回覆刪除