终端、控制台、tty、shell等区别与概念初辨析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终端、控制台、tty、shell等区别与概念初辨析相关的知识,希望对你有一定的参考价值。

参考技术A 早期计算机精贵,一台主机,连很多终端,终端为主机提供了人机接口,很多人都通过终端使用主机的资源。当时的终端按字面意思可以分为字符哑终端和图形终端两种。
而控制台是另一种人机接口。 不通过串行线路与主机相连,直接安在主机上,,这是人控制主机的第一人机接口。
可以想象成主机上有块面板,面板上方小灯闪,人得站着才能够着它(控制台),主机上面一些电缆延伸到很多人办公桌的屏幕和键盘上(终端)。

terminal和tty已经成为同义词

历史上只有这些串口设备才被叫做终端,也即现在的串行端口终端;
计算机把每个串行设备看作一个字符设备;
如你所知,Linux把设备当作文件;
对应的设备文件名是,ttyS;

通过X Windows(图形界面)、SSH、telnet等登入主机所用的终端;
成对的逻辑终端设备,包含主端和从端;
有两套伪终端接口:

对master的操作会反应到slave上

控制终端是指能够控制一个、一套设备或者几套设备的终端控制器;
/dev/tty是一个应用程序概念,面对进程;
/dev/tty会映射到当前使用的终端,使用命令tty查看其当前指向的“设备”

tty(控制终端)会映射到你正在使用的任何类型的终端上,用tty命令查看

详见“现代控制台”

早期的计算机终端是通过串行RS-232通信的,它只能解释有限数量的控制码(CR,LF
等),但没有能力处理执行特殊的转义序列功能(如清行、清屏或控制光标的位置)。
总之就是很有限,很基本的终端;
X Windows下按ctrl + alt + Fn(n为特定数字时是X Windows),其他时候按alt + Fn;
你得到的虚拟控制台终端,就是模仿的字符哑终端。

智能终端就是有能力处理转义序列,也就是说处理能力较强的终端机。

本质上现代的终端都虚拟化了,但虚拟终端可特指伪终端,或者说模拟终端

与控制台终端同义
注意不要混淆虚拟终端与虚拟控制台
虚拟终端广义上包含虚拟控制台

Shell,壳,与Linux的核kernel对应。顾名思义就是机器的核心外面的一层壳,用于人机交互,只要是人与电脑之间交互的接口,就可以称为 Shell;
Shell=解释器,那解释什么呢?

GUI和CLI都是shell,shell既不属于系统内核,也与一般应用程序不同,它属于系统工具,可以算作操作系统的一部分,主要用来管理文件和运行程序,并提供与用户的交互。

用户 > (<) Shell > (<) 操作系统内核

也即你向终端输入命令(或GUI下点击鼠标),终端自己是不会解释这些命令的,它只负责输入输出,而计算机是大爷,它只认二进制,不认你的命令。真正把这些命令解释成计算机明白的语言的是shell;
shell把一些信息适当的输送到终端设备,也接收来自终端设备的输入;

在Ubuntu 18.04LST上进行

“在Ubuntu 18.04中,他们已经改变了一些东西,你无法访问tty1,它总是显示登录屏幕。如果您已登录,则无法访问tty2,因为它将成为第一个登录用户的GUI。在tty7上显示的两个GUI的传统已经结束。”
https://askubuntu.com/questions/1033206/switch-to-console-in-ubuntu-18-04-how-to-leave-gui

编辑器编译器文件IDE等常见概念辨析

编辑器、编译器、文件、IDE等常见概念辨析


一、编辑器与编译器有什么区别?有什么好用的编辑器?

以下内容转自此网站

1.编辑器介绍

  编辑器是软体程序,一般是指用来修改电脑档案的编写软件,但也有人称 PE2、HE4(汉书)……等文书软件为编辑器。常见的编辑器有文本编辑器、网页编辑器、源程序编辑器、图像编辑器,声音编辑器和视频编辑器等。

2.编译器介绍:

  简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

3.编译器跟编辑器的区别

  编译器是把java源代码编译成二进制字节码的程序,编辑器是让我们编写java源代码更方便快捷的工具。Java中的编译器一般指的是javac.exe,编辑器指的是Eclipse、Idea、NetBeans等。
同理.net中的编译器是csc.exe,编辑器是Visual Studio。C语言中的编译器是cl.exe或者gcc.exe,编辑器是Visual Studio、Dev C++等。

4.好用的编辑器

NodePad++

  Notepad++是一款免费但优秀的代码编辑器,运行在Windows环境下,可以支持多种编程语言。它在50多种程序、脚本和标记语言上都有着语法高亮、代码折叠等功能。用户可以人为设置当前语言,它还支持实现一些编程语言的API。

Vim

  Vim是从vi发展出来的一个文本编辑器,在程序员中被广泛使用。它支持语法高亮、显示行号,这都是对程序员重要的辅助功能。用户还可以更换界面的主题颜色,减缓长期编程的疲劳感,让代码更加清晰。它可以自动检查你的拼写错误,提高你的工作效率,对于开发者是一个非常好的选择。

GNU Emacs

  Emacs是一个轻便、可扩展、免费的编辑器,它比其它的编辑器要更强大,是一个整合环境,或可称它为集成开发环境。它可以处理文字,图像,高亮语法,将代码更直观地展现给开发者。Emacs可以运行在大多数的操作系统上,而且它支持大多数常用的编程语言,可以自动对代码排版布局。Emacs用户可以根据自身的需要和偏好对编辑器进行定制

等等


二、源代码文件、可执行文件、“xxx.sln”、项目文件、文本文件。

1.源代码文件

  源程序文件是是指未经编译的,按照一定的程序设计语言规范百书写的,人类可读的文本文件。通常由高级语言编写。源程序可以是以书籍或者磁带或者其他载体的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机可度执行的程序。

2.可执行文件

  可执行文件 (executable file) 指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。在windows操作系统下,可执行程序可以是 .exe文件 .sys文件 .com等类型文件。

3.“xxx.sln”

  在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。包含了较为通用的信息,包括解决方案所包含项目的列表,解决方案内任何项的位置以及解决方案的生成配置.此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合。

4.项目文件

  创建应用程序所需的引用、数据连接、文件夹和文件的信息。

5.文本文件

  文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。

三、IDE与编辑器、编译器、调试器等有什么关系?举几个你常用的IDE。

  集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。该程序可以独立运行,也可以和其它程序并用。IDE多被用于开发HTML应用软件。例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。
  常用IDE有:Visual Studio 2019,Dev C++等

四、在Visual Studio中,按一下ctrl+F5就可以“直接运行”.c或.cpp文件。原理是什么?中间经历了了什么步骤?实际上执行了什么命令?使用了g++、gcc这两个命令吗?

  1.ctrl+F5是强行刷新命令。
  2.经历了清除缓存,重新加载。
  3.执行命令:g++、gcc
  4.使用了g++、gcc这两个命令

五、g++、gcc这两个命令有啥区别?

  1.g++和gcc都可以编译C代码。后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
  2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了
  3.编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++.因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
  以上信息均摘自清清飞扬的博客,此博客讲的非常详细

以上是关于终端、控制台、tty、shell等区别与概念初辨析的主要内容,如果未能解决你的问题,请参考以下文章

终端(terminal)shelltty控制台(console)bash之间的区别与联系

linux 为啥不能后台运行

linux 基础命令与文件管理

终端控制台虚拟终端伪终端的概念,阐述终端与shell的关系

linux下的shell命令,命令行,终端运行概念的解释???

编辑器编译器文件IDE等常见概念辨析