为啥这些 sudo 命令会失败? [复制]
Posted
技术标签:
【中文标题】为啥这些 sudo 命令会失败? [复制]【英文标题】:Why does these sudo commands fail? [duplicate]为什么这些 sudo 命令会失败? [复制] 【发布时间】:2013-12-03 08:35:24 【问题描述】:我想以普通用户的身份从脚本中添加一个 crontab 条目,因此我使用sudo
来获得root
权限,但无论如何尝试都失败了。
$ sudo crontab -u root -l; echo ' 15 9 * * * root /opt/script.sh'; | crontab -u root
bash: syntax error near unexpected token `'
$ sudo echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab
bash: /etc/crontab: Permission denied
$ sudo echo ok
ok
【问题讨论】:
【参考方案1】:因为你在跑步
sudo echo .......
作为 "su" 然后将结果写入 /etc/crontab :
>> /etc/crontab
所以在你写到 /etc/crontab 的那一刻你不再是“su”了
【讨论】:
你会如何解决这个问题? "sudo crontab -e" 是首选方法 @hek2mgl pipe 后的命令仍然没有作为 su 执行 @SandraSchlichting 或者调用一个新的shellsudo bash -c "echo \"hello\" >> file"
@user000001 成功了!谢谢。【参考方案2】:
在sudo echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab
中,首先运行sudo echo ' 15 9 * * * root /opt/script.sh'
,然后shell 获取sudo
命令的输出并将其附加到/etc/crontab
。由于 shell 是以普通用户身份启动的,因此没有 root 权限,因此 shell 无法写入 /etc/crontab
,只有 root
可以修改。为了解决这个问题,以 root 身份启动一个子shell,这允许它附加到/etc/crontab
。幸运的是,这已经实现为su -c
,但是由于系统使用sudo
,因此必须在前面加上sudo
。固定命令为sudo sh -c "echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab"
【讨论】:
我认为问题是“为什么这些 sudo 命令会失败?” ,而这个答案是针对“如何使用 sudo 在 crontab 中添加一行?”的问题。或“如何在 sudo 中运行 shell 命令” @kappa"echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab
可以替换为任何其他 shell 命令。
sudo sh -c 可以替换成 sudo -s。以上是关于为啥这些 sudo 命令会失败? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用通配符将参数数量减半会因“参数列表太长”而失败? [复制]
我想反转一个 char 数组,为啥在使用 Arrays.sort(arr, Collections.reverseOrder()) 时它会失败? [复制]