zoukankan      html  css  js  c++  java
  • Console-terminal-tty-shell-kernel


    Console-terminal-tty-shell-kernel
    1. 先看图表
        1.1 简表
        1.2 shell与内核的示意图
        1.3 Console-terminal-tty-shell-kernel示意图
    2. console控制台有2类
    3. console及terminal操作
        3.1 切换控制台
        3.2 查看有那些用户登录,分别占用了那些tty*?
        3.3 发送文字到其他控制台终端
        3.4 查看当前控制台终端
        3.5 关闭一个虚拟终端
    4. shell是运行在tty之上的命令行解释器。
        4.1 查看可用shell
        4.2 查看系统默认的shell
        4.3 查找用户的默认shell
        4.4 查看当前使用的shell
    5. 小节
    6. Q&A
        6.1 还没看懂? 返回第一页重新看一边。
        6.2 还没看懂? 写的太简单了,请看如下更详细的解释:
        6.3 上文如有错误,还请不吝赐教,在评论区帮忙指正。

    Linux世界,如何理解这几个关键字: Console, terminal, tty, shell, kernel???
    console和terminal在功能上没什么区别。
    tty和terminal是同义词。
    shell是内核kernel的外壳。
    Huh?

    1. 先看图表

    1.1 简表

    关键字
    中文
    文件
    描述
    简单说是
    console 控制台 /dev/console 物理控制台,(显示器,键盘) 硬件设备
      ctrl + alt [F2,F7] 切换 支持独立登录会话的虚拟控制台 虚拟终端
    terminal 终端 /dev/pts/*
    /dev/tty*
    文本输入/输出会话 会话session
    tty TTY 特殊类型的设备文件, 伪设备
    shell 外壳 /bin/bash 命令行解释器, 程序
    Kernel 内核 /boot/vmlinuz* Linux操作系统内核 内核


    1.2 shell与内核的示意图

    古老的单用户单任务系统,大概就这个结构。

    1.3 Console-terminal-tty-shell-kernel示意图

    现代的系统都是多用户,多任务,图形界面的复杂结构,就需要多个控制台,多个终端同时登录。

    如上示意图,假设了4个用户同时登录,2个本机用户,2个远程用户

    地点 界面 用户 console terminal > tty shell
    本机 GUI User01 本机GUI tty7 (/dev/pts/0,1,2…) /bin/sh;/bin/bash…
    本机 ctl User02 本机ctl tty2 (ctrl + alt [F2|F7]切换) /bin/sh
    远程 ctl User03 ssh tty3 /usr//bin/fish
    远程 ctl User04 ssh tty4 /usr//bin/zsh

    2. console控制台有2类

    console,控制台(/dev/console),有2类,

    • 物理控制台: (比如键盘,显示器);也叫物理终端
    • 虚拟控制台: 每个控制台都支持独立的登录会话

    3. console及terminal操作

    3.1 切换控制台

    Ctrl + Alt + [F2...F7]

    查看当前用户:
    $ whoami
    toma

    3.2 查看有那些用户登录,分别占用了那些tty*?

    $  who
    toma     tty7         2019-07-20 20:20 (:0)
    root     tty2         2019-07-25 23:22
    $ w
     23:22:26 up 5 days,  3:02,  2 users,  load average: 0.48, 0.84, 1.14
    USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
    toma     tty7      Sat20    5days  5:49m  0.01s /bin/sh /etc/xdg/xfce4/xinitrc
    root     tty2      23:22   18.00s  1.46s  1.31s cmatrix

    注: tty7是当前用户登录的xfce4图像界面,其他是通过(Ctrl + Alt [F2])登录的命令行界面。

    3.3 发送文字到其他控制台终端

    $ echo "hello" > /dev/tty2

    3.4 查看当前控制台终端

    Ctrl + Alt [F2] 切换到tty2,查看当前控制台终端
    $ tty
    /dev/tty2

    Ctrl + Alt [F7] 切换到tty7,查看当前控制台终端
    $ tty
    /dev/pts/0

    注: 这个tty不是直接在tty7的sh上运行的,是在tty7之上的图形界面之上,通过xfce4-terminal软件建立的虚拟终端会话。
    多开一个xfce4-terminal软件界面,就多出一个这样的会话。
    $ tty
    /dev/pts/1

    3.5 关闭一个虚拟终端

    $ ls /dev/pts/
    0  1  2  ptmx
    exit退出或关掉任意一个xfce4-terminal界面,这里也会少一个文件。
    至于tty2,需要切换到tty2,再exit退出。

    4. shell是运行在tty之上的命令行解释器。

    4.1 查看可用shell

    $ chsh -l
    /bin/sh
    /bin/bash
    /usr/bin/git-shell
    /usr/bin/fish

    $ cat /etc/shells
    # Pathnames of valid login shells.
    # See shells(5) for details.
    /bin/sh
    /bin/bash
    /usr/bin/git-shell
    /usr/bin/fish

    4.2 查看系统默认的shell

    $ echo $SHELL
    /usr/bin/fish

    通过环境变量
    $ env | grep SHELL
    SHELL=/usr/bin/fish

    4.3 查找用户的默认shell

    $ cat /etc/passwd | grep toma
    toma:x:1001:985::/home/toma:/usr/bin/fish

    4.4 查看当前使用的shell

    $ ps
      PID TTY          TIME CMD
    17333 pts/0    00:00:00 fish
    28228 pts/0    00:00:00 ps

    $ bash
    $ ps
      PID TTY          TIME CMD
    17333 pts/0    00:00:00 fish
    28235 pts/0    00:00:00 bash
    28241 pts/0    00:00:00 ps

    // bash 可用如下方式,其他sh不一定有效。
    $ ps -p $$
      PID TTY          TIME CMD
    28235 pts/0    00:00:00 bash

    $ echo $0
    bash

    5. 小节

    console主要指物理终端,硬件设备键盘等;terminal提供文本输入的会话,/dev/下的体现都是字符类设备文件。
    GUI下创建虚拟终端terminal会话的程序比如:/usr/bin/xfce4-terminal。
    terminal = tty 是文本输入/输出的会话。
    terminal 是统称概念,每个terminal都有具体的tty编号对应,且在/dev/下以字符文件形式存在。
    shell是运行在tty之上的程序。内核的外壳,用户的命令提示符。比如bash,zsh,fish等。
    shell通过控制tty与用户交互,并向用户提供启动其他程序的方式。

    6. Q&A

    6.1 还没看懂? 返回第一页重新看一边。

    6.2 还没看懂? 写的太简单了,请看如下更详细的解释:

    What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'console'?
    https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con

    https://www.zhihu.com/question/21711307

    The TTY demystified 解密TTY
    http://www.linusakesson.net/programming/tty/
    中文翻译:https://www.cnblogs.com/liqiuhao/p/9031803.html

    还有疑问?console, terminal, tty的概念模糊不清,其实问题不大,这有历史的原因。
    普通用户只要知道命令在终端里输入,其实是终端的shell里输入。打开终端就会运行默认的shell。会用基本的shell命令即可。

    6.3 上文如有错误,还请不吝赐教,在评论区帮忙指正。

  • 相关阅读:
    php基本语法
    php的环境搭建
    Java数组及其内存分配
    最快的maven镜像
    配置maven到运行
    配置maven
    maven的eclise配置
    mysql中bit_count和bit_or函数的含义
    怎样查看MySQL是否区分大小写
    linux忘记mysql密码找回方法
  • 原文地址:https://www.cnblogs.com/sztom/p/11247883.html
Copyright © 2011-2022 走看看