如何检查我当前正在使用哪个tty?


22

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

我怎么知道我当前正在使用哪个tty?

就像tty1,tty2 .... tty6吗?


您为什么声称它是注释中的“点”?这与您在此处提出的要求完全不同。GUI中的会话不是tty。
Rinzwind

1
我对这个概念感到困惑,这就是为什么
luv.preet17年

Answers:


30

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

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

当我在图形终端中时,它将返回类似以下内容的内容:

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

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

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

ps $(pgrep Xorg)

就我而言,因为我不使用gdm或slim这样的显示管理器,它会产生:

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

4
+1,尽管在mate-terminal中who am i什么也不返回,然后whoami返回zanna,(同时who返回所有会话(我记得一个相关的问题(被证明无法回答),在该问题中我们注意到不同的仿真器从中产生了不同的输出who))。
Zanna

图形化将始终使用tty7,因为这是唯一提供图形化支持的
tty7

1
@Zanna我本人也遇到过这种情况,但我认为值得一提。
Ravexina

1
无论如何,who am i它将在vt中始终可以很好地工作,并且pgrep非常聪明(您可能希望$()对命令子语法使用语法-反引号在markdown中可能会引起混淆),因此您的答案非常好,无论投票否决的人都不应这样做...
Zanna

1
@ luv.preet不在您的问题范围内,但请参阅pts和tty之间的区别 :)-此文章重复的帖子有一个很棒的答案
Zanna

14

使用tty命令。

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

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

是showinng pts / 18。
luv.preet

这些pt可能正在tty中运行,不是吗?我怎么知道呢?
luv.preet

5
@ luv.preet 您的终端。请参见“ pts和tty之间的区别”
Chai T. Rex

4
pts表示您正在从GUI或通过SSH使用终端
2007年

3
您需要为此提出一个新问题。
Chai T. Rex

6

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

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

但是,如果您想识别虚拟控制台怎么办?sudo fgconsole对于互动案例可能很有用。或者,我要做的只是漫步控制台,因为切换通常足够快。我不知道在非交互或非前景情况下可靠运行的程序化方法。

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


6

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


如果按键盘组合键Ctrl+ Alt+ F3仅显示黑屏(如您在注释中所写),则有另一种方法可以在引导计算机时访问root shell,而无需按Ctrl+ Alt+ F3来弹出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 /  
    

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


这总是打开tty1吗?
luv.preet

不,它不会打开任何tty。而是将您安装在硬盘上的Ubuntu的根文件系统挂载为具有写入权限的交互式外壳,从而使您能够在其上运行命令。
karel

3

我想您正在寻找除提供的其他答案以外的其他功能。运行sudo fgconsole 以找出哪个实际的tty现在处于活动状态。


@karel很容易想象您错过了当前TTY公告的情况。例如,您的bash配置文件清除了屏幕。我提供了一个可以随时使用的命令,不仅可以在登录后立即使用。WRT Ctrl + Alt + F1不起作用-有一个快速的解决方法:使用chvt或openvt。
玛丽安·亚当

顺便说一句,用sudo运行它。这就是为什么您得到错误。
玛丽安·亚当

1

使用tty命令,它可以在Linux和macOS上运行,并给出一个非常简单的输出以供读取,仅显示您所在的tty的名称。

例:

$ tty
/dev/pts/0

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

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

这样,您将始终知道自己在哪个终端机中。


1

除了GUI以外,在这种情况下您会获得pts,这将显示您想要的输出:

ls -l `tty` | awk '{print $10}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.