Linux 学习笔记(一):终端 和 Shell 的区别和联系
Linux 学习笔记(一):终端 和 Shell 的区别和联系
一、Linux 介绍
1、什么是 Linux
- Linux 就是一个操作系统,全称 GNU/Linux,是一种类 Unix 操作系统
Linux 一开始是没有图形界面的,所有操作都靠命令完成。如 “磁盘操作、文件存取、目录操作、进程管理、文件权限” 等等,可以说 Linux 就是由命令行组成的操作系统。
大家更熟悉的 Windows 系统,一般用户都是在纯图形化界面下进行操作的,依靠鼠标和键盘操作,上手比较简单。
现在的 Linux 兼具图形化界面操作和完全的命令行操作,但 命令行操作 仍然是 Linux 的 精髓 所在,命令行下只用键盘就能完成所有操作。
2、Linux 的两个基本思想
- 一切皆文件
- 每个文件都有确定的用途
二、终端 和 Shell
学习 Linux 一定会经常碰到 终端 和 shell 这两个概念。在 Ubuntu 系统下点击鼠标右键 - “打开终端” 就能打开一个终端窗口,接着我们就能输入命令了。
一开始我以为上面这个黑黑的终端窗口就是 shell,后来发现并非如此。终端 和 shell 是两个不同的概念。终端是 terminal,而 shell 的意思是 “壳",这两个怎么看都不会是同一个东西。
1、什么是终端(Terminal)
- 终端是与计算机系统相连的一种输入、输出设备,通常离计算机较远
终端就是人与计算机交互的接口。Unix 和 Linux 把这些人机交互的接口统称为 —— 终端。可以简单将终端理解为 “鼠标、键盘、显示器、扬声器、麦克风” 等硬件设备。
【早期的终端】
早期的终端是一种叫做 电传打字机 - Teletype 的东西。当时还没有个人电脑,普通的计算机都有衣柜那么大,而且很昂贵,人手一台的可能性很低。但是一个用户占有一台计算机未免有点浪费,为了提高计算机的使用效率,Unix 的创始人 Ken Thompson 和 Dennis Ritchie 打算设计一个能够支持多用户进行操作的操作系统(也就是现在的 Unix),实现将一台计算机提供给多位用户进行使用。
想要实现多用户操作,首先需要给每位用户提供一套基本的输入输出设备来进行操作。但是当时的计算机设备都非常昂贵,每位用户人手一套的话费用也忒高了。所以最后他们找到了更便宜的 电传打字机 来作为替代,也就是下图的 ASR-33 电传打字机。
可以看出它有键盘和纸带,用户可以通过键盘向计算机输入信息,然后计算机通过在纸带上打印输出结果。这样看来,电传打字机完全可以作为人机交互设备使用。
于是 Unix 成为了世界上第一个支持多用户的操作系统,而 ASR-33 成为了第一个 Unix 终端。
【现在的终端】
随着计算机快速发展,其硬件设备也越来越便宜且先进。像电传打字机这样的早期终端设备早已退出历史舞台,取而代之的是 键盘、鼠标、显示器 等设备。
虽然现在电传打字机已经不再适用,但它也是计算机发展的一个重要象征。所以 Teletype 的缩写 TTY 沿用至今,作为各种类型的终端设备的统称。(我们现在看到的 tty 不再单纯指电传打字机,而是指各种各样的终端设备)
- 台式机的终端输入设备包括:键盘、鼠标、麦克风;终端输出设备包括:显示器、扬声器
2、Linux 终端
?为什么 Linux 上的终端和上面说的终端感觉不太一样呢 ?
实际上,前面我们说的终端指的都是物理的终端设备,而我们在 Linux 上常说的终端其实是 终端模拟器 - Terminal Emulator(一种 模拟终端的程序 ),也称为 —— 虚拟终端 ,但平时一般直接称为终端。
可以将 Linux 终端看作一个使用软件来模拟的输入、输出设备,其作用就是提供一个命令的输入、输出环境。Linux 终端是基于物理终端之上的。
在 Linux 操作系统中,为了让多个用户登录系统进行操作,或打开多个窗口执行多个任务,Linux 设置了多个虚拟终端设备。
- 在 Linux 下 Ctrl + Alt + t 即可打开终端(Ctrl + d 关闭终端)
【终端模拟器出现的原因】
电传打字机时代是没有图形接口的,计算机直接从打字机读取用户的输入,然后自动将计算结果打印到纸带,是非常典型的命令行操作模式。
随着计算机发展,出现了各种各样的图形接口,很多操作系统也以图形界面操作为主。大部分的程序都能通过图形接口进行交互,但是仍然存在一些传统的命令行程序还不兼容图形接口,只能通过命令行进行交互。
但是现在已经没有电传打字机了,这些传统程序不能直接读取用户的键盘输入,也不能将计算结果直接输出到显示器(比如我们现在返回电脑桌面,随便在键盘上输入一些命令,是不会有什么反应的),这种情况下我们要如何运行这些程序呢?—— 【终端模拟器】
终端模拟器就是一个模拟传统终端设备进行命令行操作的程序。在该程序内输入的命令能够被计算机读取和执行,并将结果输出到显示器。简单来说,终端模拟器就是模拟了一台电传打字机,所以我们一般也直接称之为终端。
3、Shell
- 在计算机科学中,Shell 俗称 “壳” (区别于 “核”—— Linux 内核)
- 简单来说,Shell 就是接收用户输入的命令,然后提交给 Linux 内核处理的一个壳程序
Shell 是一个用 C 语言编写的程序,是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
我们在使用 Linux 的时候,一般不是对系统直接进行操作,而是通过一个中间程序实现,这个中间程序就是 —— Shell 。
Shell 指 “提供给使用者使用界面” 的软件,即 Command Interpreter - 命令解析器。Shell 接收用户或者其他应用程序的命令,然后将这些命令转化成内核能够理解的语言并传递给内核,内核执行命令完成后,再将执行结果返回给用户或者应用程序。
Shell 是包裹在操作系统 外层 的一道程序,负责外界与 Linux “内核” 的交互,但它隐藏了操作系统底层的具体细节,就像是 Linux 内核的一个 “外壳”,所以 Shell(壳)的名称也由此而来。
- 图形化界面也是一种广义的 Shell,因为图形界面操作的本质也是 —— 将用户的命令传递给内核执行
4、终端 和 Shell 的区别和关联
- 终端接收命令输入,Shell 翻译并传递命令,内核执行命令
终端 只是人机交互的一个接口,提供输入输出命令的交互界面。终端的主要任务是接收用户输入的命令,并提交给 Shell。
Shell 是命令解析器,主要任务是翻译命令。Shell 将终端输入的命令转化成内核能够理解的语言并传递给内核,由内核执行命令,并将执行结果返回给终端。
当我们打开终端时,Shell 也会自动启动,操作系统会将终端和 Shell 关联起来。接着我们在终端输入命令,Shell 就负责解释命令。
打开终端后显示如下,则说明 Shell 调用成功:
**k | 当前用户 |
@ | 分隔符 |
V - Ubuntu | 主机名称 |
~ | 当前工作目录 |
$ | 身份提示符( # 表示超级用户,$ 表示普通用户) |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)