如何检查我目前使用的是哪个?

我们的系统中有7个终端可供使用。 tty7是基于GUI的。

我怎么知道我目前使用的是哪一款?

比如,tty1,tty2 …. tty6?

有几种方法可以找到它。 我会选择who am i (不是who )的命令:

 $ who am i ravexina tty2 2017-04-10 11:19 (:0) 

当我在图形终端时,它将返回如下内容:

 ravexina pts/0 2017-04-10 1:19 (:0) 

在ssh会话下使用图形终端结果是相同的,但不是(:0),我将得到我的机器IP(192.168.xx)。 其他命令如wwhopgrepps等也很有帮助。

例如,要找出我的图形界面正在运行的tty

 ps $(pgrep Xorg) 

在我的情况下,因为我不使用任何显示管理器,如gdm或slim,它将产生:

  PID TTY STAT TIME COMMAND 1693 tty1 Sl 0:05 /usr/lib/xorg/Xorg 

使用tty命令。

如果我是对的,这是参考:

 /dev/tty1 - tty1 /dev/tty2 - tty2 /dev/tty3 - tty3 /dev/tty4 - tty4 /dev/tty5 - tty5 /dev/tty6 - tty6 

登录到tty后,它会自动显示您在第一行使用的tty。


如果按下键盘组合Ctrl + Alt + F1只显示黑屏,就像你在评论中所写的那样,在启动计算机时没有按Ctrl + Alt + F1来显示一个替代方法来访问root shell TTY。

  1. 在启动BIOS / UEFI启动画面后,使用BIOS,快速按住Shift键,将显示GNU GRUB菜单。 (如果您看到Ubuntu徽标,则您错过了可以进入GRUB菜单的位置。)使用UEFI按Esc键(可能几次)进入GRUB菜单。 有时制造商的启动画面是Windows启动器的一部分,因此当您启动机器时,它会直接进入GRUB屏幕,然后按Shift键是不必要的。

  2. 从第一个紫色GNU GRUB屏幕中,使用↑和↓键选择Ubuntu的高级选项,然后按Enter键 。 然后,您将看到另一个紫色GNU GRUB菜单菜单,其中包含一个内核选项列表。

  3. 按向下箭头键,直到从顶部选择第二个条目(描述中具有恢复模式的条目),然后按Enter键

    现在你应该看到这个菜单:

    在此处输入图像描述

  4. 使用箭头键向下滚动到root ,然后按Enter键

    您现在应该看到根提示符,如下所示:

     root@ubuntu:~# 
  5. 在这个阶段,你应该有一个只读文件系统。 您必须使用写权限重新安装它:

     mount -o rw,remount / 

    现在,您可以运行与终端中相同的命令。

让我们退后一步,从困惑开始:什么是tty? 最初tty是teletype的缩写,它变成了玻璃电传打字机,它成为任何终端或连接到一个,特别是一个串口(这些仍然存在,最常见的是/ dev / ttyS0,/ dev / ttyUSB0,有时是/ dev / ttyacm0)。 然后你得到伪ttys和虚拟ttys。 旧的unix手熟悉伪ttys,它们用于远程终端(ssh和telnet),虚拟终端(xterm等)和终端多路复用器(screen和tmux)。 伪ttys随着时间的推移有各种命名方案,但是当前的命名方案使用像/ dev / pts / 0这样的名称。 另一方面,虚拟控制台与虚拟控制台相关联,特别是当您使用控制altfunction键时,您正在切换虚拟控制台,每个虚拟控制台都与虚拟tty配对。 最着名的虚拟tty是/ dev / tty7,它经常用于图形会话(因为前六个通常是文本登录)tty7并没有什么特别之处,因为你可以在任何虚拟控制台上运行X服务器(尽管在/ dev /上运行一个) tty1非常难,因为内核打开它进行启动日志记录,但我已经完成了)你可以对包括tty7在内的任何虚拟tty进行文本登录(虽然需要init配置,但systemd的动态分配使事情变得有趣并切换到tty13及以上可能需要更改键盘地图)。

因此,如果您需要找到您的伪tty(或使用文本模式时的虚拟tty),有各种各样的解决方案,例如who am iwho am ips ax|grep $$这是相对容易做到的,因为有多种方法可以找到这个因为在大多数情况下在标准io上打开伪tty,并且即使重定向io,也有其他方法可以工作。 只要您不使用图形终端仿真器或终端多路复用器,这也有利于在使用串行端口和虚拟ttys时做正确的事情。

但是,如果您想要识别虚拟控制台呢? sudo fgconsole可能对交互式案例很有用。 或者我所做的只是走控制台,因为切换通常足够快。 我不知道在非交互或非前景的情况下可靠地工作的编程方法。

让我们看一个保证无法可靠地回答虚拟控制台的示例。 我坐在(alpha)前面的计算机有一个在tty2(:1)上运行的Xserver,我有三个窗口打开两个xterms和一个vncviewer(连接到bravo:2)。 一个xterm正在运行屏幕,另一个正在运行ssh charley。 屏幕有两个窗口打开,ssh delta和who(谁正确识别第二列中的伪tty并在第五列中提供提示(:1:S0) ,告诉我们伪tty连接到第一个连接的屏幕会话到第二个X服务器,但不提供任何虚拟控制台信息)。 在ssh会话上运行谁给出了提示(alpha) ,该提示标识了ssh会话来自的机器,这对于远程会话来说相对较好。 虽然关于什么连接到伪tty(并且绝对没有虚拟控制台甚至远程tty信息可用)的信息很少,但至少识别出远程主机。 有关屏幕的信息可能是错误的,因为屏幕会话是可拆卸的,并且vnc根本不提供有用的信息,因为vnc会话和本地会话之间的唯一区别是显示数量。 在许多情况下,你可以假设:0在tty7但不总是,而且从来没有在我的,因为bravo根本没有显卡而且:0是一个vnc会话(因为它认为它是本地控制台而混淆了谁)并且没有一台机器使用tty7作为图形会话,因为我(不仅仅是相反)将日志转储到tty7(以及tty5,tty6和tty8)以及其他地方的逐行图形会话。 但是等待屏幕也可以作为终端程序,允许您通过串行电缆建立会话。 这样的会话报告什么时候运行谁? 为什么没有串口,无论是通过vnc,xterm,ssh,屏幕和usb串口适配器一次性还是连接到我的televideo。

我想你正在照顾别的东西,而不是提供的其他答案。 运行sudo fgconsole以找出哪个真正的tty现在处于活动状态。

使用命令tty,它适用于Linux和macOS,并提供一个非常简单的输出来读取,只有你所在的tty的名称。

例:

 $ tty /dev/pts/0 

可以很容易地编写脚本或将其包含在提示中,例如:

 $ PS1='`tty`: ' /dev/pts/0: _ 

通过这种方式,您将始终知道您所在的终端。