在服务器执行这样一条命令,用了sudo还提示没有权限
sudo echo 10.173.187.111 > /etc/salt/minion_id
-bash: /etc/salt/minion_id: Permission denied
导致这个问题的原因就是重定向符号“>”也是bash命令,sudo只是让echo命令拥有了sudo权限,但并没有让“>”也拥有sudo权限。
针对这种问题也有好几种解决方案,没有门的时候,那么就爬窗户。
方案一
使用tee命令,从标准输入中读取信息并写入标准输出或者文件中。
echo 10.173.187.111 |sudo tee /etc/salt/minion_id
也就是说echo不给sudo权限,但是给tee权限
方案二
使用“sh -c”,它可以让bash将一个字符串作为完成的命令来执行。让sudo影响范围扩大到整条命令
sudo sh -c "echo 10.173.187.111 > /etc/salt/minion_id"
方案三
这种方式就是用sudo su 命令提到root权限了,等于所所有的操作都是root在执行。如果要回到普通权限就用sudo su username回去。
笔者使用的就是第一种方案tee。也建议使用这种。