0

我发现如果你想以超级用户身份执行命令,你需要添加以下内容: 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不起作用,我猜是因为其中的“>”。需要进行哪些更改才能使命令正常工作?

4

1 回答 1

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 将打开输出文件,而不是使用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上面的解决方案就足够了。

于 2015-04-12T16:34:22.910 回答