我正在尝试将一些文本推送到需要sudo
的文件中:
sudo echo "some text" > /etc/path/to/file
但我一直收到以下错误:
bash: /etc/path/to/file: Permission denied
我可以使用nano
执行此操作,但我需要以编程方式执行此操作。这是>
运算符的问题吗?是否有我可以使用的脚本?
答案 0 :(得分:4)
Shell(在这种情况下为bash
)在运行命令之前首先执行重定向(>
)。因此,在/etc/path/to/file
的命令运行之前将创建sudo
并且普通用户没有足够的权限来创建文件/etc/path/to/file
,因此会出现关于权限的错误消息。
你可以这样做:
sudo bash -c 'echo "some text" > /etc/path/to/file'
或使用tee
:
echo "some text" | sudo tee /etc/path/to/file
答案 1 :(得分:0)
heemayl已经解释了权限问题,但是您需要考虑运行sudo命令仍然需要您手动输入用户密码。这是除非你在sudoers文件中指定运行sudo的用户不需要密码,我希望不是这样。
因此,为了避免手动输入密码,您有几种可能性几乎都是一个非常糟糕的主意,因为它们基本上要求您将用户密码存储在常规{{}之外1}}文件。
您可能做的最好的事情是将您的密码存储在普通文件中,并严格限制对权限的访问。
/etc/shadow
之后,您可以使用sudo的echo "password" > ~/.password && chmod 400 ~/.password
参数从外部文件中读取密码。
-S
再一次,将用户密码存储在sudo -S bash -c 'echo "some text" > /etc/test' <~/.password
之外是一个巨大的安全风险,特别是如果用户具有sudoer权限,那么即使它提供了一些基本的保护,我也会建议不要这样做。