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 上文如有错误,还请不吝赐教,在评论区帮忙指正。

Console-terminal-tty-shell-kernel的更多相关文章

  1. terminal(终端),shell,tty,console(控制台)区别

    原文地址  stackexchange:What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'con ...

  2. 命令行界面 (CLI)、终端 (Terminal)、Shell、TTY的区别

    虽然这个话题已是老生常谈,搜索一下应该也能找到大把的相关文章.不过难得提到了这方面,就趁此机会把我的理解写下来,一来看看我是不是真正理解了,二来看看我能不能把它们之间的区别讲得更加简明易懂. 0. 太 ...

  3. linux - console/terminal/virtual console/pseudo terminal ...

    http://en.wikipedia.org/wiki/System_console System console Knoppix system console showing the boot p ...

  4. terminal、Shell、tty和console

    最早的电脑有带很多开关和指示灯的面板——console(概念来自管风琴),一台电脑通常一个Console,化为主机一部分,和CPU共享机柜. 一台大型主机往往支持多用户,每个用户使用的终端——term ...

  5. shell,bash,zsh,console,terminal到底是什么意思,它们之间又是什么关系?

    原文链接 终端(terminal,或者叫物理终端):是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端.虚拟终端:屏幕和键盘只是一个终端,可能不 ...

  6. (Linux基础学习)第三章:terminal与shell的简介和修改命令提示符颜色

    第1节:terminal终端设备终端:键盘.鼠标.显示器物理终端(/dev/console):控制台console虚拟终端(tty:teletypewriters,/dev/tty# #为[1-6]) ...

  7. python反弹tty shell

    linux环境下进行内外渗透需要反弹shell连接内网ssh,Telnet等,就需要tty层的shell了.python代码转过来的,备用. #!/usr/bin/python import sys ...

  8. Linux 控制台/终端/tty/shell

    一.简介 使用linux已经有一段时间,却一直弄不明白这几个概念之间的区别.这些概念本身有着非常浓厚的历史气息,随着时代的发展,他们的含义也在发生改变,它们有些已经失去了最初的含义,但是它们的名字却被 ...

  9. linux terminal 日常shell

    1 ubuntu中如何将终端添加到右键 /home/cui/.local/share/nautilus/scripts #!/bin/bash #cd $NAUTILUS_SCRIPT_CURRENT ...

随机推荐

  1. 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

    前言 有的时候,配置信息是我们无法在开发过程中就能确定的.比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等.这时候,就需要把配置文件放在外面,让用户自定义配置部 ...

  2. Activiti工作流学习笔记一

    Activiti工作流 一:Activiti第一天 1:工作流的概念 说明: 假设:这两张图就是华谊兄弟的请假流程图 图的组成部分: 人物:范冰冰冯小刚王中军 事件(动作):请假.批准.不批准 工作流 ...

  3. GIS中DTM/DEM/DSM/DOM的含义

    DTM(Digital Terrain Model):数字地面模型,是一个表示地面特征空间分布的数据库,一般用一系列地面点坐 标(x,y,z)及地表属性(目标类别.特征等)绗成数据阵列,以此组成数字地 ...

  4. [蓝桥杯2015决赛]穿越雷区(BFS求最短路)

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已 ...

  5. WebMagic基础与Maven管理依赖

    2. 快速开始 WebMagic主要包含两个jar包:webmagic-core-{version}.jar和webmagic-extension-{version}.jar.在项目中添加这两个包的依 ...

  6. 46 求1+2+3+...+n 静态成员函数和静态变量

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路: 1)使用构造函数的方法,需要使用sta ...

  7. maven缺失ojdbc6解决方案 :Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错

    问题已解决,感谢博主,给您磕头了. | | 解决方法就是把缺少的 jar 手动添加到本地仓库中,再重新引入依赖即可.详情请参考以下链接. | | 转发自: https://blog.csdn.net/ ...

  8. 4 ehcache 配置

    拷贝ehcache.xml文件到工程的resources目录下面 <?xml version="1.0" encoding="UTF-8"?> &l ...

  9. 本周总结(19年暑假)—— Part5

    日期:2019.8.11 博客期:111 星期日

  10. isEqual判断相等性

    1.isEqual方法用来判断两个比较者的内存地址是否一样.为了细分,有isEqualToString.isEqualToNumber.isEuqalToValue等,使用时一定要精确使用,比如虽然N ...