命令 'echo "6" > /proc/sys/kernel/printk' 是如何工作的?

How does the command 'echo "6" > /proc/sys/kernel/printk' work?

请参阅 How can I show printk() message in console?

中的示例
$ cat /proc/sys/kernel/printk
4 4 1 7
$ echo "6" > /proc/sys/kernel/printk
$ cat /proc/sys/kernel/printk
6 4 1 7

如果 /proc/sys/kernel/prink 是一个普通文件,该文件会变成“6”,一个数字。但我知道 proc 文件系统是 ram 中的文件系统,我猜它的工作方式不同。文件是通过什么机制以这种方式更改的?如果我想将内容更改为 4 6 1 7,我可以使用 echo 命令和重定向来完成吗?

/proc 下的文件系统条目的行为有点像函数调用。将字符串“写入”文件就像调用以字符串作为参数的函数。从文件中“读取”就像调用不带参数的函数并取回 return 值。每个“功能”的行为由内核定义(或者至少由文件系统条目公开的 proc 文件系统定义)。

有关 printk 具体工作原理的详细信息,请参见 https://www.kernel.org/doc/html/latest/core-api/printk-basics.html。简而言之,将数字写入文件会更改当前的日志记录级别,而读取会显示当前(如果更改)、默认、最小和 boot-time 默认日志记录级别。