Linux:/dev/console、/dev/tty 和 /dev/tty0 之间的区别

Linux:/dev/console、/dev/tty 和 /dev/tty0 之间的区别

/dev/console在Linux系统上, ,/dev/tty和之间有什么区别/dev/tty0

它们各自的用途是什么,如何比较?

答案1

来自Kernel.org 上的 Linux 内核文档:

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

过去的美好时光/dev/console是系统管理员控制台。 TTY 是连接到服务器的用户串行设备。

Now/dev/console/dev/tty0代表当前显示,通常是相同的。您可以通过添加到console=ttyS0来覆盖它grub.conf。之后你/dev/tty0就是一个监视器并且/dev/console/dev/ttyS0

/dev/tty一个练习来显示和之间的区别/dev/tty0

Ctrl+ Alt+切换到第二个控制台F2。登录为root.类型sleep 5; echo tty0 > /dev/tty0。按并按+Enter切换到第三个控制台。现在按+切换回第二个控制台。输入,按并切换到第三个控制台。AltF3AltF2sleep 5; echo tty > /dev/ttyEnter

您可以看到这tty是进程启动的控制台,并且tty0是始终当前的控制台。

答案2

  • /dev/console是一组虚拟设备,可以在启动时设置为参数。它可能会被重定向到串行设备或虚拟控制台,并且默认指向/dev/tty0.当多个console=选项传递给内核时,控制台输出将转到多个设备;

  • /dev/tty[0-N](是最高属性 TTY 编号,例如 63)是您使用- -N切换到的虚拟控制台之一,依此类推;controlaltF1

  • /dev/tty0默认情况下也是虚拟控制台;

  • /dev/tty是与打开它的进程关联的控制台(物理、虚拟或伪设备,如果有)的别名。与其他设备不同,您不需要 root 权限即可对其进行写入。另请注意,类似批处理进程启动的进程cron没有 usable /dev/tty,因为它们不与任何进程关联。这些过程在输出列?中有一个。TTYps -ef

答案3

/开发/控制台

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

在 Linux 上,可以使用以下命令配置内核控制台console= 启动选项。调用的内核代码printk()可以向其写入消息,例如,当加载设备或发生错误时。这些消息也由内核缓冲。 (也可以看看dmesg)。当找到并启动控制台设备时,它会接收所有先前缓冲的消息。

您可以console=多次传递来配置多个控制台,消息将写入所有控制台。显然,您只能选择每种“类型”的一个控制台:您不能同时使用console=ttyS0console=ttyS1

内核文档指定/dev/console为编号为 的字符设备(5,1)。打开此字符设备将打开“主”控制台,它是控制台列表中的最后一个 tty。第一个非内核进程称为init“PID 1”,启动时/dev/console连接到标准输出、标准错误和标准输入。

如果没有一个控制台是 tty,则打开/dev/console会返回错误ENODEV(“没有这样的设备”)。内核将打印记录一条消息,init然后开始。有关不是 tty 设备的内核控制台的示例,请参见netconsole,或者我最喜欢的控制台行式打印机

您还可以通过阅读查看 tty 控制台列表/sys/class/tty/console/active系统文档指出第一的所示设备是主控制台。该列表实际上与内核命令行的顺序相反。这当前内核文档错误地指出最后显示的设备是主或“活动”控制台。由于某种原因,可以轮询此文件以了解更改(如果控制台设备被删除?)。

里面一个systemd-nspawn容器中,标准/dev/console文件被伪终端设备(PTY)替换。这些最好被描述为虚拟终端设备。它们是动态创建的,也用于实现图形终端模拟器(如 GNOME 终端)以及远程访问(如ssh.

/dev/tty0

Linux TTY设备节点 tty1通过tty63是虚拟终端。它们也称为 VT,或虚拟控制台。它们在物理控制台设备驱动程序之上模拟多个控制台。一次仅显示和控制一个虚拟控制台。可以chvt通过任意多个功能键切换活动终端,例如使用、 或 Ctrl+Alt+F1。

您还可以使用 读取和写入当前 VT /dev/tty0tty0是通常的内核控制台,例如,如果您没有明确选择一个。 “系统首先寻找 VGA 卡(VT 在其上运行),然后寻找串行端口”。您还可以将控制台设置为特定的 VT,例如console=tty1

“如果您的系统中没有 VGA 卡,第一个串行端口将自动成为控制台。”像“串行控制台”这样的ttyS0可能是最常见的替代品tty0。无法在串行控制台上使用 VT 系统。

/dev/tty

/dev/tty是 POSIX 指定的三个标准设备文件之一/dev/是 POSIX 指定的三个目录名称之一)。打开它相当于打开当前进程的控制终端。当进程第一次打开终端时设置控制终端,至少在 Linux 上。例如,在 中init,它将引用/dev/console

从控制终端分离是传统上启动后台进程所需的步骤之一,例如系统日志守护进程。成为后台进程的步骤极其复杂,具体来说,脱离控制终端的步骤是设定值系统调用。在更现代的系统中,init 系统(例如 systemd)首先在没有任何控制终端的情况下启动服务。

相关内容