我发现如果要以超级用户身份执行命令,则需要添加以下内容:
echo <password> | sudo -s <command>
。
首先我想暂停Linux服务器
echo <password> | sudo -s pm-suspend
,它工作正常。
现在我想执行命令echo -e "\xff\x01\x00" > /dev/ttyUSB0
echo <password> | sudo -s echo -e "\xff\x01\x00" > /dev/ttyUSB0
不起作用,我猜是因为&#34;&gt;&#34;在里面。使命令工作需要进行哪些更改?
答案 0 :(得分:0)
首先,永远不要使用echo password | ...
。在命令行上。这是不安全的,因为密码将保留在历史文件中,而其他用户可以使用ps
命令查看密码。如果要在不输入密码的情况下执行sudo
命令,可以使用NOPASSWD
中的/etc/sudoers
选项。检查一下:https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt
关于许可问题。你是对的,问题是输出重定向>
。您需要知道shell将打开输出文件, not 与sudo
一起运行的命令。
在这个例子中:
sudo command > output.file
shell尝试打开output.file
,然后启动sudo command
并将其标准输出设置为打开文件。但是,shell没有root权限。
解决方法可能是使用tee
命令,如下所示:
command | sudo tee output.file
但是,我只是授予编辑该文件的适当权限。例如,可以创建一个组,将该文件的组所有权更改为该组。例如:
# Add group
sudo groupadd developers
# Change group ownership of the file
sudo chown root:developers output.file
# make the file writable by the group
sudo chmod g+w output.file
# Finally put you into that group
sudo usermod -a -G developers YOU
但如果您是管理员用户,意味着您可以使用sudo
执行每个命令,则上面的tee
解决方案就足够了。