Answers:
从文档中:
/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
在过去/dev/console
,系统管理员控制台是过去的。TTY是用户连接到服务器的串行设备。现在/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并通过按Alt+ 切换到第三个控制台F3。现在,按Alt+ 切换回第二个控制台F2。键入sleep 5; echo tty > /dev/tty
,按Enter并切换到第三个控制台。
您可以看到这tty
是进程开始的控制台,并且tty0
始终是最新的控制台。
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
和瞧-根壳。
sudo anycommand
,那么sudo -i
扎根也可行。没有Linux / BSD / Unix这样的东西,您无法扎根。(这样就不再是Linux / BSD / Unix。)
/dev/console
是一组虚拟设备,可以在引导时将其设置为参数。它可能会重定向到串行设备或虚拟控制台,默认情况下指向/dev/tty0
。将多个console=
选项传递给内核时,控制台输出将到达多个设备。
/dev/tty0
是当前的虚拟控制台
/dev/tty[1-x]
是你切换到与虚拟控制台的一个control- alt- F1等等。
/dev/tty
是与打开它的进程相关联的控制台(物理,虚拟或伪设备,如果有)的别名。与其他设备不同,您不需要root用户特权即可对其进行写入。还要注意,诸如由cron
批处理过程启动的过程和类似的批处理过程之类的过程均不可用/dev/tty
,因为它们没有任何关联。这些过程?
在输出TTY
列中有一个ps -ef
。
/dev/tty
可以是其他设备(如果有),具体取决于打开它的过程。答案已更新。
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
在Linux上,可以使用console=
boot选项配置内核控制台。调用的内核代码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文档指出,所示的第一个设备是主控制台。该列表实际上与内核命令行的顺序相反。的当前内核文档错误地指出,示出的最后一个设备是主或“活性”控制台。出于某种原因,可以轮询此文件进行更改(以防删除控制台设备?)。
在systemd-nspawn
容器内部,标准/dev/console
文件将替换为伪终端设备(PTY)。最好将它们描述为虚拟终端设备。它们是动态创建的,还用于实现图形终端仿真器(如GNOME Terminal)和用于远程访问(如)ssh
。
在Linux TTY 设备节点 tty1
通过tty63
有虚拟终端。它们也称为VT或虚拟控制台。它们在物理控制台设备驱动程序的顶部模拟多个控制台。一次仅显示和控制一个虚拟控制台。您可以chvt
通过许多功能键来切换活动端子,例如使用或Ctrl + Alt + F1。
您也可以使用读写当前VT /dev/tty0
。 tty0
是常用的内核控制台,例如,如果您未明确选择一个控制台。“系统首先寻找运行VT的VGA卡,然后寻找串行端口”。您也可以将控制台设置为特定的VT,例如console=tty1
。
“如果您的系统中没有VGA卡,第一个串行端口将自动成为控制台。” 类似的“串行控制台” ttyS0
可能是的最常见替代方案tty0
。无法在串行控制台顶部使用VT系统。
/dev/tty
是POSIX指定的三个标准设备文件/dev/
之一(是POSIX指定的三个目录名称之一)。打开它等同于打开当前过程的控制终端。至少在Linux上,在进程首次打开终端时设置控制终端。例如,在中init
,它将指代/dev/console
。
从控制终端分离是传统上启动后台进程所需的步骤之一,例如系统日志记录守护程序。成为后台进程的步骤非常复杂,但是具体来说,与控制终端分离的步骤是setsid系统调用。在更现代的系统中,初始化系统(例如systemd)首先在没有任何控制终端的情况下启动服务。