是否可以动态地将发送到/ dev / console的所有数据重定向到其他内容(例如 – 到/ dev / null,/ dev / tty9甚至/ dev / null)?
当然,它可以通过console = XXX内核引导参数(或单个程序的标准管道重定向)静态完成.问题是我需要根据来自外部设备的数据动态地(以及所有输出的程序)执行此操作.
有什么建议?
解决方法:
我可以想到几个选项,它们的有效性取决于事物如何进入“控制台”.
对于内核源消息,最简单的方法是使用dmesg -n 1来禁用(几乎所有)控制台消息,并使用syslogd / klogd来提取并记录它们或转发它们.无论控制台日志级别如何,所有内核消息仍会被记录并可通过/ proc / kmsg(或sys_syslog())访问.对此的一个变体是使用quiet来启动内核,这会抑制printk()输出,并且仅依赖syslogd / klogd来处理内核消息.
更具冒险性和全面性的选择是使用控制台模块,这些模块在VM guest虚拟机中更常用,以便VM主机可以直接访问guest虚拟机控制台.有two types,系统驱动程序(例如x86 PC上的“VGA”,内核“console =”选项);和模块化驱动程序,可以根据需要加载和卸载,并可以接管系统驱动程序.一个可能有用的驱动程序是netconsole,虽然它很容易加载和卸载(它可以用作系统和模块化驱动程序),但有两个缺点:
>它没有take_over_console()所以一切都仍然进入原始控制台
>它只通过以太网记录(不支持环回)
您可以使用“虚拟”控制台以及上面的选项之一执行一些有用的操作. netcat或socat为netconsole做好“客户”:
modprobe netconsole "netconsole=55514@10.0.2.15/eth0,6667@10.1.2.3/ff:ff: