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

luv*_*eet 40 command-line tty

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

如何查看tty我当前使用的是哪个?

Rav*_*ina 43

有几种方法可以找出这一点。我会使用who am i(not who) 命令:

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)
Run Code Online (Sandbox Code Playgroud)

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

ravexina    pts/0        2017-04-10 1:19 (:0)
Run Code Online (Sandbox Code Playgroud)

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

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

ps $(pgrep Xorg)
Run Code Online (Sandbox Code Playgroud)

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

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg
Run Code Online (Sandbox Code Playgroud)

  • +1,虽然在mate-terminal中`who am i`不返回任何内容,而`whoami`返回`zanna`,(而`who`返回所有会话(我记得一个相关问题(证明无法回答),我们注意到不同的模拟器产生与`who`)不同的输出)。 (7认同)

lit*_*_js 25

使用tty命令。

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

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6
Run Code Online (Sandbox Code Playgroud)

  • @luv.preet **是**您的终端。请参阅 [“pts 和 tty 之间的区别”](https://unix.stackexchange.com/questions/21280/difference-between-pts-and-tty)。 (6认同)
  • `pts` 表示您正在从 GUI 或通过 SSH 使用终端 (6认同)
  • 你需要为此提出一个新问题。 (3认同)
  • 从后一个术语的最广泛意义上来说,pts **是** tty。(“p”的意思是“伪”:它是严格意义上的“tty”的伪 tty,从而做出了这种区分)这就是为什么 `tty` 命令会报告 pts。 (3认同)

小智 10

让我们退后一步,从困惑开始:什么是 tty?最初 tty 是电传打字机的缩写,后来成为玻璃电传打字机,它成为任何终端或与一个终端的连接,特别是串行端口(这些仍然存在,最常见的是 /dev/ttyS0、/dev/ttyUSB0 和有时是 /dev/ttyacm0)。然后你得到了伪 ttys 和虚拟 ttys。老 Unix 手熟悉伪 tty,它们用于远程终端(ssh 和 telnet)、虚拟终端(xterm 等)和终端多路复用器(screen 和 tmux)。随着时间的推移,伪 ttys 有多种命名方案,但当前使用的名称是 /dev/pts/0。另一方面,虚拟 tty 与虚拟控制台相关联,特别是当您使用控制 alt 功能键时,您正在切换虚拟控制台,每个控制台都与一个虚拟 tty 配对。

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

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

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


kar*_*rel 6

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


如果按键盘组合Ctrl+ Alt+F3仅显示黑屏,如您在评论中所写,则有另一种方法可以在启动计算机时访问 root shell,而无需按Ctrl+ Alt+ 调F3出 tty。

  1. 在启动过程中出现 BIOS/UEFI 闪屏后,在 BIOS 中,快速按住该Shift键,这将调出 GNU GRUB 菜单。(如果您看到 Ubuntu 徽标,您就错过了可以进入 GRUB 菜单的位置。)使用 UEFI 按下(可能多次)进入 GRUB 菜单的Esc键。有时制造商的启动画面是 Windows 引导加载程序的一部分,因此当您启动机器时,它会直接进入 GRUB 屏幕,然后Shift不需要按下。

  2. 从第一个紫色的 GNU GRUB 屏幕中,选择Ubuntu 的高级选项?和 ?键并按Enter。然后你会被另一个紫色的 GNU GRUB 菜单提示,其中有一个内核选项列表。

    GNU GRUB 菜单

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

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

    恢复菜单

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

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

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

     mount -o rw,remount /  
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以像在终端中一样运行命令。


mar*_*dam 5

我猜您正在处理的不是提供的其他答案。运行sudo fgconsole 以找出哪个真正的 tty 现在处于活动状态。


小智 5

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

例子:

$ tty
/dev/pts/0
Run Code Online (Sandbox Code Playgroud)

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

$ PS1='`tty`: '
/dev/pts/0: _
Run Code Online (Sandbox Code Playgroud)

这样您就可以始终知道自己位于哪个航站楼。