Console-terminal-tty-shell-kernel
1. 先看一图一表
1.1 简表
1.2 shell与内核的示意图
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与内核的示意图
2. console控制台有2类
console,控制台(/dev/console),有2类,
- 物理控制台: (比如键盘,显示器);也叫物理终端
- 虚拟控制台: 每个控制台都支持独立的登录会话
3. console及terminal操作
3.1 切换控制台
Ctrl + Alt + [F2...F7]
查看当前用户:
$ whoami
toma
3.2 查看有那些用户登录,分别占用了那些tty*?
$ w
注: 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/
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
fish
ps
$ bash
$ ps
bash
ps
// bash 可用如下方式,其他sh不一定有效。
$ ps -p $$
$ 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命令即可。