V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
James369
V2EX  ›  Linux

为什么终端有那么多的名称?

  •  
  •   James369 · 2021-01-24 10:51:33 +08:00 · 5748 次点击
    这是一个创建于 1390 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自接触 linux 以来,关于终端听了很多的名词:

    如常见的:shell,terminal,consol
    不怎么常见的:tty,伪终端 pts,pty
    还有:串口线连接的 windows 超级终端。

    感觉有点懵了,它们都各有什么区别? 用起来好像又都差不多,都是命令行交互方式。。
    第 1 条附言  ·  2021-01-24 11:49:07 +08:00
    有点明白了,实际上 shell 是最接近 kernel 的,其它终端都是通过 shell 来和 kernel 打交道。
    18 条回复    2021-02-17 13:57:07 +08:00
    hxndg
        1
    hxndg  
       2021-01-24 11:15:55 +08:00   ❤️ 1
    一般情况下,能表明是什么意思就不会引起误解。
    但是其实是有差别的,详情请见《 unix 环境高级编程》
    qieqie
        2
    qieqie  
       2021-01-24 11:22:47 +08:00 via Android
    console 概念上偏物理实体,对于一台设备一般只有一个 console,terminal 是模拟的多用户的 console,而 shell 是输入命令的解释器。
    zhujinliang
        3
    zhujinliang  
       2021-01-24 11:23:41 +08:00 via iPhone   ❤️ 7
    shell 指外壳程序,意思是与系统内核沟通的程序,对应的内核叫 kernel,就是 bash 、zsh 这样的程序

    逻辑上是我们通过输入输出设备连接到计算机硬件,通过 shell,调用 kernel 提供的接口,完成操作。

    tty 是电传打字机,早期计算机的输出设备,计算机通过串口线输出信号,电传打字机像人按动打字机似的,在纸上打出文字(据说 CR LF 也是电传打字机时代遗留下来的,CR 表示把打字头位置移到行首,LF 表示走一行纸)

    终端的概念,早期计算机体积大、造价高,所以一个机构或院校购买一台,然后通过终端设备(键盘、tty 、modem 等)接入,通过分时等形式供多人使用。各类操作系统就在这种操作逻辑上发展起来,以至于现在个人计算机仍保留这种原始的操作方式。现在已经没有了电传打字机之类的硬件设备,为了兼容,或者说情怀,于是在操作系统上虚拟了一个硬件。
    ImACat
        4
    ImACat  
       2021-01-24 11:25:29 +08:00
    只说一个我知道的,Shell 是和 Kernel 相对的,一个是壳一个是核。早期没有图形化界面。交互方式也就是输命令行。但是后来有图像化界面了,Shell 就专指命令行了。https://imgur.com/c1YLzQP
    linux40
        5
    linux40  
       2021-01-24 11:29:33 +08:00   ❤️ 1
    我还以为你要说 xterm vt100 这些。
    jdhao
        6
    jdhao  
       2021-01-24 11:33:08 +08:00
    传统意义上终端是指专门连接服务器那种显示器,没有其他功能,主要就是输入指令,显示输出。咱们常用的 xshell, Alacritty, kitty 等等,其实都是 terminal emulator,终端模拟器,模拟那种传统意义上的终端。
    lululau
        7
    lululau  
       2021-01-24 11:49:08 +08:00
    不是很懂的还是 google 一下再回复吧,不要误人子弟啊
    James369
        8
    James369  
    OP
       2021-01-24 11:53:05 +08:00
    @zhujinliang 还想问一下,tty 终端在与 linux 通信的时候,此时是由哪个进程在负责处理的? 另外可以通过哪个命令来查询具体通信情况吗?
    hxndg
        9
    hxndg  
       2021-01-24 11:57:29 +08:00
    > 实际上 shell 是最接近 kernel 的,其它终端都是通过 shell 来和 kernel 打交道。

    ??? 建议你还是去看书吧,上面的解释是有错误的。
    Jirajine
        10
    Jirajine  
       2021-01-24 12:01:15 +08:00 via Android   ❤️ 1
    maokabc
        11
    maokabc  
       2021-01-24 12:14:55 +08:00 via Android
    按自己理解,pty 这类是内核虚拟的设备,本地终端的话先 forkpty 然后里面运行 shell,终端模拟器只是读写 pty,解析 pty 输出序列用图形界面绘制,把键盘鼠标事件转义写入 pty 。
    cigarzh
        12
    cigarzh  
       2021-01-24 12:24:33 +08:00
    这个要真的讲明白得去研究操作系统历史…
    liuxu
        13
    liuxu  
       2021-01-24 13:44:28 +08:00
    哈哈笑死了,等你再发现 /sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/xxx/bin,/opt 它们之间的的故事就好玩了
    billlee
        14
    billlee  
       2021-01-24 16:17:06 +08:00
    基本上就分为两类:shell 和 terminal

    terminal 负责底层的输入输出,例如:缓冲一行数据,直到 enter 按下的时候才把数据发送给前台进程、把 backspace, 方向键等转换成对应的转义序列,收到 ctrl+c 时给前台进程发送 SIGINT; 根据程序输出的转义序列给输出的文字设置颜色、粗体、闪烁、下划线等不同的格式。

    shell 负责解释用户输入的命令,根据输入的命令建立管道、fork, 调整 stdin/stdout/stderr 描述符,exec

    tty, pty, windows 超级终端都是各种不同的 terminal. bash, zsh, dash 等都是各种不同的 shell.

    至于 tty 是哪个进程负责的,如果这里的 tty 是指 linux 的虚拟 tty (ctrl + alt + F1-F6 调出来的那些) ,那只能说是内核本身负责的,不管对键盘输入的转义、还是对程序输出转义的解读,都是由内核内的虚拟 tty 驱动负责的。
    felixcode
        15
    felixcode  
       2021-01-24 16:27:42 +08:00
    上面的也有不少人说的不对,还是自己找文章好好看看吧
    https://www.howtogeek.com/428174/what-is-a-tty-on-linux-and-how-to-use-the-tty-command/
    fantastM
        16
    fantastM  
       2021-01-25 01:57:14 +08:00
    kernel 、system call 、shell 这几个的关系,看这段描述应该就清楚了

    julyclyde
        17
    julyclyde  
       2021-01-26 11:04:00 +08:00
    shell 在上述一堆里面基本上是最远的了
    ashuai
        18
    ashuai  
       2021-02-17 13:57:07 +08:00
    @liuxu 什么故事?能讲讲吗 :D
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:06 · PVG 11:06 · LAX 19:06 · JFK 22:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.