我无法运行以下命令来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