sudo 不会改变 sysfs 参数

ARH*_*ARH 6 permissions root sudo raid

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

$ sudo echo 300 > /sys/block/md0/md/stripe_cache_size
bash: /sys/block/md0/md/stripe_cache_size: Permission denied
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

这是文件权限:

$ 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
Run Code Online (Sandbox Code Playgroud)

这对你有意义吗?

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

Wil*_*llW 7

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

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

这应该有效:

须藤 bash -c "echo 300 > /sys/block/md0/md/stripe_cache_size"

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


und*_*ine 6

你在这里只用 sudo 命令运行 echo,但是 - 他的输入/输出/标准错误来自普通用户。

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

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