sudo 不会改变 sysfs 参数

sudo 不会改变 sysfs 参数

我无法运行以下命令来sudo更改 sysfs 参数:

$ sudo echo 300 > /sys/block/md0/md/stripe_cache_size
bash: /sys/block/md0/md/stripe_cache_size: Permission denied

sudo但是,当我更改为用户时,它就可以正常工作root

$ sudo su
[root] [ /home/arh ]  
 #  echo 300 > /sys/block/md0/md/stripe_cache_size
[root] [ /home/arh ]  
 # cat /sys/block/md0/md/stripe_cache_size
300

以下是文件权限:

$ ls -l  /sys/block/md0/md/stripe_cache_size 
-rw-r--r-- 1 root root 4096 Feb  2 08:50 /sys/block/md0/md/stripe_cache_size

你觉得这有意义吗?

请注意,我已更改 /etc/sudoers 文件,以visudo使sudo命令无需密码。

答案1

使用 sudo 执行“echo 300”,它会以正常方式将 300 输出到 stdout。然后,作为普通用户,您将尝试获取该输出并写入 /sys/

Sudo 并不是一个可以提升整个命令行权限的神奇命令。它接受您传递给它的参数并将其作为程序执行。Bash(以普通用户身份运行)执行“sudo echo 300”,然后获取该输出并尝试将其写入文件。请注意,写入文件的操作是由以普通用户身份运行的 bash 完成的。

这应该有效:

sudo bash -c “echo 300 > /sys/block/md0/md/stripe_cache_size”

sudo 将以更高的权限执行 bash,然后该 root bash 将执行整个命令。

答案2

您在这里仅使用 sudo 命令运行 echo,但是 - 他的输入/输出/stderr 来自普通用户。

如果您希望以 root 用户身份写入文件,则不能在 shell 中使用 >。而是使用例如 tee 命令:

echo 300 |sudo tee /sys/block/md0/md/stripe_cache_size

相关内容