/dev/console
在Linux系统上, ,/dev/tty
和之间有什么区别/dev/tty0
?
它们各自的用途是什么,如何比较?
答案1
/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/tty
Enter
您可以看到这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
,因为它们不与任何进程关联。这些过程在输出列?
中有一个。TTY
ps -ef
答案3
/开发/控制台
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
在 Linux 上,可以使用以下命令配置内核控制台console=
启动选项。调用的内核代码printk()
可以向其写入消息,例如,当加载设备或发生错误时。这些消息也由内核缓冲。 (也可以看看dmesg
)。当找到并启动控制台设备时,它会接收所有先前缓冲的消息。
您可以console=
多次传递来配置多个控制台,消息将写入所有控制台。显然,您只能选择每种“类型”的一个控制台:您不能同时使用console=ttyS0
和console=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/tty0
。 tty0
是通常的内核控制台,例如,如果您没有明确选择一个。 “系统首先寻找 VGA 卡(VT 在其上运行),然后寻找串行端口”。您还可以将控制台设置为特定的 VT,例如console=tty1
。
“如果您的系统中没有 VGA 卡,第一个串行端口将自动成为控制台。”像“串行控制台”这样的ttyS0
可能是最常见的替代品tty0
。无法在串行控制台上使用 VT 系统。
/dev/tty
/dev/tty
是 POSIX 指定的三个标准设备文件之一(/dev/
是 POSIX 指定的三个目录名称之一)。打开它相当于打开当前进程的控制终端。当进程第一次打开终端时设置控制终端,至少在 Linux 上。例如,在 中init
,它将引用/dev/console
。
从控制终端分离是传统上启动后台进程所需的步骤之一,例如系统日志守护进程。成为后台进程的步骤极其复杂,具体来说,脱离控制终端的步骤是设定值系统调用。在更现代的系统中,init 系统(例如 systemd)首先在没有任何控制终端的情况下启动服务。