一、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主机名称
~当前工作目录
$

身份提示符( # 表示超级用户,$ 表示普通用户)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐