[Linux学习笔记]terminal与shell之间的关系

系列文章目录

【Linux学习笔记】


文章目录

  • 系列文章目录
  • 前言
  • 一、终端
  • 二、shell
  • 三、shell和终端的关系

前言

什么是终端?什么是shell?在Linux中这两者有什么关系和区别呢,对于很多和我一样的初学者来说肯定会有这样的疑问。本小结简单讲解下什么是终端、什么是shell和shell和终端的关系

说明一下发文章的目的主要是为了方便自己复习和解答和我有一样疑问初学者。内容来自网络和自己的总结所以内容的正确性仅供参考,有问题欢迎指出


一、终端(terminal)

对于学习Linux的初学者来说,肯定会接触到 “终端” 这个词,那到底什么是终端呢?百度百科上这样说的:

           终端(英语:Computer terminal),是与计算机系统相连的一种输入输出设备,通常离计算机较远。根据功能不同,可分若干类。具有某些处理功能的终端称为灵巧终端或智能终端,这类终端有它自己的微处理器和控制电路;没有此功能的叫做哑终端,它没有微处理器。支持与计算机会话或处理的终端叫交互终端或联机终端。

说白了其实终端就是——人与机器交互的接口。

人和机器是两个相互独立的实体。当人使用机器时,必须借助某种接口(interface)才能与机器交流信息。台式机的接口包括显示器、键盘、鼠标、扬声器、麦克风等。CPU、内存、硬盘、光驱、显卡、网卡等其他硬件属于主机(host)。Unix和Linux把这种使得人和机器可以交互的接口称为终端。

终端具有两个基本功能:向主机输入信息和向外部输出信息。所以终端可以分为输入设备和输出设备。台式机的输入设备通常包括键盘、鼠标、麦克风,输出设备包括显示器、扬声器等。
我们可以将上面的两段内容归纳为两个公式:
计算机 = 主机 + 终端 = 输入设备 + 输出设备

linux上面终端(terminal)(就是你输入指令的那个黑色框框)就是一个仿真终端,你可以把它当作一个模拟的输入设备。作用是提供一个命令的输入输出环境,在linux下使用组合键ctrl+alt+T打开的就是终端(ctrl+D可以关闭终端)。

在Linux中有图形界面和命令行界面(按Alt+Ctrl+F1~F6组合键可进行切换),图形界面下的命令行窗口,叫做伪终端。但是这个伪终端是跟那个脱离图形界面的、黑漆漆的、按Alt+Ctrl+F1~F6组合键出来的那个终端而说的。伪终端的工作方式是在桌面上申请一个窗口,然后在里面模拟显示出一个黑漆漆的界面。比如Gnome终端、Konsole终端、xterm终端、urxvt终端等等。

终端有以下几种:

  1. 物理终端:直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,一般是多台服务器共享一套终端,简称KVM(Keyboard键盘,video显示器,mouse鼠标)

  2. 虚拟终端(tty):附加在物理终端之上,用软件方式虚拟实现,CentOS默认启用6个虚拟终端,可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1--6], 对应的文件是/dev/tty#。可以同过tty命令来查看当前的虚拟终端号。tty是teletypewriter的简称。

  3. 伪终端(pty):两种应用场景,第一在图形界面下打开的命令行接口,第二基于ssh协议或telnet协议等远程打开的命令行界面,是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。

  4. 控制终端(/dev/tty) 这是个在应用程序中的一个概念,前台进程有个控制终端,就对应这个。不过它并不指任何物理意义上的终端,其实/dev/tty会映射到当前的设备(通过tty命令可以看到),比如你如果在控制台界面下(即字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当前的控制台号),但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到的是/dev/pts的伪终端上。比如你可以输入命令 #tty 那么将显示当前映射终端如:/dev/tty1或者/dev/pts/0等。

二、shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

shell是一个命令行解释器,是linux内核的一个外壳,负责外界与linux内核的交互。shell是包裹在操作系统外层的一道程序,就好像是操作系统的壳,shell(壳)的名称也由此而来。shell接收用户或者其他应用程序的命令, 然后将这些命令转化成内核能理解的语言并传给内核, 内核执行命令完成后将结果返回给用户或者应用程序。当你打开一个terminal(终端)时,操作系统会将terminal和shell关联起来,当我们在terminal中输入命令后,shell就负责解释命令。

shell广义上可以指操作系统和用户接口的界面,图形界面也是一种shell。因为图形界面的本质也是实现“把人类用户的操作意图转述个内核”。

三、shell和终端的关系

shell是一个程序,一个二进制可运行可执行的程序,一般情况下,我们并不会感觉它的存在,因为我们很少主动去调用它,除非我们人为去执行bash程序。那么shell跟终端有什么关系呢?

  shell和终端的关系就是终端程序会自动调用shell程序。体现在每次打开终端(伪终端、虚拟终端)的时候,终端程序都会去调用shell。终端调用终端程序成功的情况下,终端就会显示如下的信息:

[root@localhost ~]#

其中root代表的就是登录人是谁,host指示登录到的主机,~表示当前操作目录,$表示的是命令提示符(如果登陆人是root的话就显示为#),表示等待输入命令。

如上图所示其中,root为打开shell的用户名;@为分隔符;local为主机名称;~为工作目录名称;#为身份提示符,#表示超级用户,$表示普通用户。

你可能感兴趣的:(Linux学习笔记,unix,linux,shell)