为啥这些 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 或者调用一个新的shell sudo 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 命令会失败? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 C++ 代码中出现链接器命令失败错误? [复制]

为啥通过直接赋值复制结构会失败?

为啥使用通配符将参数数量减半会因“参数列表太长”而失败? [复制]

帮我看下MySQL为啥启动失败 我该如何解决

为啥反引号在 PDO 查询中失败? [复制]

我想反转一个 char 数组,为啥在使用 Arrays.sort(arr, Collections.reverseOrder()) 时它会失败? [复制]