我试着:
sudo echo "$USER: my message" > /dev/kmsg
将消息写入 dmesg 日志。这会导致“权限被拒绝”错误,因为它将“sudo”的输出(虽然不再具有特权)重定向到 /dev/kmsg。因此“echo”命令以 root 身份运行,而对 /dev/kmsg 的写入以我身份运行。引用“echo”命令和重定向(“>/dev/kmsg”)不起作用,因为重定向是 sudo 不理解的 shell 服务。(有问题的用户 ID 在带有 NOPASSWD 的 sudoers 中。)
是否有一些 Linux 命令将文件名作为选项并将其参数写出来?像:'tee /dev/kmsg -- 我要记录的消息' 我知道'logger' 命令,但这不会写入'dmesg' 看到的任何日志文件。(我想将我的一些消息散布在引导过程中,以了解某些事情何时发生。)
这可行,但需要有一些地方将文件写入:
echo "$USER: My msg" >/tmp/foo
sudo cp /tmp/foo /dev/kmsg
rm /tmp/foo
来自 ctrl-alt-delor 评论的解决方案如下:
echo "my message" | sudo tee /dev/kmsg >/dev/null
尽管它确实使用管道和重定向,但它发生在非特权 shell 中。对“/dev/kmsg”的特权访问发生在“sudo”中的“tee”命令中。而且它不需要写入磁盘文件(可能有问题)。
还有@stolenmoments 解决方案:
echo something | sudo dd of=/dev/kmsg