理解 Unix/Linux 中的 Terminal、Shell、TTY 和 Console

news2024/11/15 23:37:33

文章目录

  • 1 Terminal
    • 1.1 传统意义上的 Terminal
    • 1.2 现代的 Terminal
  • 2 TTY
    • 2.1 TTY 的起源
    • 2.2 Linux 中的 TTY
    • 2.3 虚拟终端
      • 2.3.1 虚拟终端为什么是虚拟的?
    • 2.4 伪终端
      • 2.4.1 伪终端的组成
      • 2.4.2 伪终端的工作原理
      • 2.4.3 伪终端的应用
  • 3 Console
    • 3.1 Console 的定义
    • 3.2 Linux 中的 Console
  • 4 Shell
    • 4.1 Shell 的定义
    • 4.2 常见的 Shell
  • 总结
  • 参考链接
  • 封面

在 Unix 和 Linux 系统中,有一些术语常常让人困惑,比如 “terminal”、“shell”、“tty” 和 “console”。本文试图通过通俗易懂的语言来解释这些概念,并结合一些历史背景,帮助大家更好地理解它们。

1 Terminal

1.1 传统意义上的 Terminal

最初,终端(terminal)是指一种物理设备,通过它用户可以与计算机进行交互。早期的终端通常是电传打字机(teletypewriter,简称 TTY),一种类似打字机的设备,可以通过电缆与计算机连接,进行输入和输出操作。

也就是说,最初程序员可以通过类似于下图这种设备连接到计算机,于计算机进行交互。

下图是 Teletype Model 15:https://www.youtube.com/watch?v=fLkBb9MuTjE
在这里插入图片描述

1.2 现代的 Terminal

随着计算机的发展,终端的概念逐渐虚拟化。今天,我们在图形用户界面(GUI)中看到的终端窗口,其实是终端模拟器(terminal emulator),它模拟了传统终端的功能,允许用户在图形环境中使用命令行界面(CLI)。

下图为 GNOME 桌面的终端模拟器
在这里插入图片描述

2 TTY

2.1 TTY 的起源

TTY 是 teletypewriter 的缩写,最早用于描述一种机械设备,可以远程发送和接收文本信息。在 Unix 系统中,TTY 逐渐演变为一种抽象设备,用于处理用户与系统之间的交互。

2.2 Linux 中的 TTY

在 Linux 中,TTY 通常指的是终端设备文件,这些文件位于 /dev 目录下,比如 /dev/tty1/dev/pts/0 等。TTY 设备可以是物理连接的(如串口终端),也可以是虚拟的(如通过 SSH 连接的终端)。

在 Linux 和类 Unix 操作系统中,有一种核心设计哲学,即“一切皆文件” (Everything is a file)。这意味着系统中的大多数资源和设备都可以通过文件系统接口进行访问和操作。

下图为 /dev 下的 tty 文件:
在这里插入图片描述

2.3 虚拟终端

  • 虚拟终端(virtual terminal):在 Linux 系统中,用户可以通过按 Ctrl + Alt + F1F6 切换到不同的虚拟终端。这些虚拟终端允许多个独立的登录会话。虚拟终端是一个全屏终端,与图形桌面上的终端窗口不同。

当我在ubuntu桌面版中按下 Ctrl + Alt + F3 时,出现了下图这样的界面:
在这里插入图片描述

2.3.1 虚拟终端为什么是虚拟的?

虚拟终端是一个模拟物理终端功能的程序。

在早期的计算机系统中,终端通常是物理设备,例如电传打字(Teletypewriter,TTY)或视频终端(Video Terminal),这些设备通过键盘输入数据并在屏幕上显示输出。物理终端是实际存在的硬件设备,直接连接到计算机,用于输入和输出操作。

虚拟终端通过软件模拟了物理终端的功能,通过软件实现键盘输入和屏幕输出。常见的虚拟终端包括 gnome-terminalkonsole 等终端模拟器,它们在图形用户界面(GUI)环境中运行。

2.4 伪终端

  • 伪终端(pseudo-terminal,简称 pty):伪终端在两个或多个进程之间建立异步双向通信(IPC)通道的虚拟设备端点对,用于模拟终端设备,为终端模拟器提供支持。常见的伪终端设备文件位于 /dev/pts/ 目录下。

2.4.1 伪终端的组成

伪终端由一对设备文件组成:

  1. 主设备(Master):负责与终端模拟器或远程登录服务器(如 Telnet 或 SSH 服务器)进行通信。
  2. 从设备(Slave):模拟硬件串口设备,供终端导向程序(如 Shell)读取和写入数据。

2.4.2 伪终端的工作原理

伪终端的工作流程如下:

  1. 用户与终端模拟器交互:用户通过终端模拟器(如 xterm、GNOME Terminal、Konsole 等)输入命令。
  2. 终端模拟器与主设备通信:终端模拟器将用户输入的命令发送到主设备。
  3. 主设备与从设备通信:主设备将命令传递给从设备,从设备模拟实际终端设备,供 Shell 等进程使用。
  4. 返回输出:Shell 执行命令后,将输出结果返回给从设备,从设备再通过主设备传回终端模拟器,最终显示给用户。

2.4.3 伪终端的应用

  • 终端模拟器:如 xterm、GNOME Terminal 等,允许用户在图形界面中使用命令行。
  • 远程登录:如 SSH 和 Telnet 服务器,允许用户远程连接并操作系统。
  • 会话管理:如 Screen 和 Tmux,提供会话持久性,允许用户断开连接后重新连接会话。

当你在终端中输入 tty 命令时,系统会返回当前终端设备的文件路径。
在这里插入图片描述
上图中,系统返回了 /dev/pts/7,这表示当前使用的是一个伪终端设备。

下图表示通过 vscode ssh 连接到 Linux 后,使用的内嵌终端也是伪终端:
在这里插入图片描述

3 Console

3.1 Console 的定义

Console 通常指的是直接连接到计算机的主要终端设备。在物理意义上,Console 是计算机的键盘和显示器,通常用于系统的初始设置和维护操作。

3.2 Linux 中的 Console

在 Linux 系统中,Console 也可以是一个虚拟终端,通过特殊的按键组合(如 Alt + Fn 键)进行切换。系统启动时的日志信息和内核消息通常会输出到 Console 上。

4 Shell

4.1 Shell 的定义

Shell 是一种命令行解释器,是用户与操作系统之间的桥梁。用户在终端中输入命令,Shell 负责解释并执行这些命令。Shell 本身并不是终端,但它通常运行在终端或终端模拟器中。

4.2 常见的 Shell

  • Bash:最常用的 Shell,默认安装在大多数 Linux 发行版中。
  • Zsh:功能强大且高度可定制的 Shell,近年来越来越受欢迎。
  • Fish:以用户友好和简洁著称的 Shell。

总结

  • Terminal:用户与计算机交互的设备或模拟器,可以是物理的或虚拟的。
  • TTY:源自电传打字机,现为 Unix/Linux 中的终端设备文件。
  • Console:主要的终端设备,直接连接到计算机,用于系统管理。
  • Shell:命令行解释器,运行在终端中,用于解释和执行用户的命令。

参考链接

  • What is the concept behind “tty” in linux? - Unix & Linux Stack Exchange
  • What is the exact difference between a ‘terminal’, a ‘shell’, a ‘tty’ and a ‘console’? - Unix & Linux Stack Exchange
  • Why is a virtual terminal “virtual”, and what/why/where is the “real” terminal? - Ask Ubuntu
  • Pseudoterminal Wiki

封面

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.31日学习打卡---Spring Cloud Alibaba(一)

7.31日学习打卡 目录: 7.31日学习打卡一.架构的演变单体应用阶段垂直应用阶段分布式系统阶段微服务阶段 二. Spring Cloud Alibaba什么是Spring Cloud Alibaba分布式配置中心_搭建微服务项目环境为什么需要服务治理分布式配置中心_Nacos四大功能Windows 搭建部署Nac…

基于SSM框架的学生考勤管理系统设计与实现源码+lw+部署文档+讲解等)

文章目录: 目录 详细视频演示 系统实现界面 .2管理员功能模块实现 5.3学生功能模块实现 技术栈查看 2.1 人脸识别技术的概念 2.2 Java介绍 2.3 MySql数据库 2.4 Tomcat简介 2.5 B/S架构 2.6 SSM框架 系统整体设计 系统测试的目的 6.2软件测试过程 6.…

C语言典型例题14

//《C程序设计教程(第四版)——谭浩强》 //习题2.2 中国在2020年11月1日进行第7次全国人口普查,全国人口为1411778724人,假设年增长率为0.5%,计算到2050年有多少人口? //《C程序设计教程(第四版…

[玄机]流量特征分析-蚁剑流量分析

题目网址【玄机】:https://xj.edisec.net/ AntSword(蚁剑)是一款开源的网络安全工具,常用于网络渗透测试和攻击。它可以远程连接并控制被攻击计算机,执行命令、上传下载文件等操作。 蚁剑与网站进行数据交互的过程中&a…

iOS开发-图片上涂鸦绘制撤销功能

iOS开发-图片上涂鸦绘制撤销功能 当我们需要重新在图片上进行绘制涂鸦生成新的图,这里使用到了Graphics中的API功能。 Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低级别、轻量级、高保真度的2D渲染。 微信搜索小游戏…

wps在pc端在线预览,而不是下载

如果有有java后端代码如下 SneakyThrowsApiOperation("访问文件")GetMapping("/download/{name}")public void getImage(HttpServletResponse response, PathVariable("name") String name) {String imagePath uploadFilePath File.separator …

文件上传漏洞--之upload-labs靶场第 11-15关(后三关需要制作图片马)持续更新ing...

第11关 第一步:查看源码 这是一个白名单,里面限制了只可以提供它所规定文件jpg,png,gif。 这段 PHP 代码主要实现了文件上传的功能,并进行了一些条件判断和处理: 首先,定义了两个变量 $is_upload 并初始…

GitHub Pages上用vue搭建个人网站简记

新建仓库 将仓库取名为:<你的用户名>.github.io 就像这样 GitHub会帮你自动部署在 https://jerryqjr.github.io/ 上 npm run build后把disk传入新的分支 git subtree push --prefix dist origin gh-pages将子目录 dist 的内容推送到远程分支 gh-pages 随后在 Settin…

综合点评!史上最强开源大模型Llama 3.1

在人工智能领域&#xff0c;开源模型一直是推动技术进步和创新的重要力量。 北美时间7月23日&#xff0c;Meta公司&#xff08;原Facebook&#xff09;宣布了一项重大突破&#xff1a;开源模型Llama 3.1的正式发布。这一举措预示着AI技术的又一次飞跃&#xff0c;Llama 3.1有望…

java~反射

反射 使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09; 原理图 加载完类后&#xff0c;在堆中就产生了一个Class类型的对象&#xff08;一个类只有一个Class对象&#xff09;&#xff0c;这个对…

IOday4

一、思维导图 二、练习 1、使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;子进程结束后退出&#xff0c;父进程回收子进程的资源 #include<myhead.h> int main(int argc, const char *argv[]) {//判断终…

分享:Vue3中如何使用echarts工具开发可视化图表

官方链接 点此进入 导入 import * as echarts from echarts 页面 <div id vdrBarChart style"height: 300px;width: 500px;"></div> 调用 //DOM 更新完成后&#xff0c;延时100ms执行setBarChart方法this.$nextTick(() > {setTimeout(() >…

电路设计-基础2-电阻电容

电路设计-基础2-电阻电容 分立元件常见的分立元件及其功能分立元件的特点 电阻**注意**电阻种类1. 直插电阻&#xff08;色环电阻&#xff09;2. 贴片电阻&#xff08;SMD电阻&#xff09;3. 电位器&#xff08;可变电阻器,滑动变阻器&#xff09;4. 热敏电阻&#xff08;NTC/P…

如何解决部分设备分辨率不适配

1&#xff09;如何解决部分设备分辨率不适配 2&#xff09;Unity中如何实现草的LOD 3&#xff09;使用了Play Asset Delivery提交版本被Google报错 4&#xff09;如何计算弧线弹道的落地位置 这是第396篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;…

运筹说 第120期 | 确定型存储模型

上一期我们一起学习了存储问题及其基本概念&#xff0c;本期小编将带大家学习确定型存储模型的相关内容。 下面我们一起来学习确定型存储模型的五个基础模型吧&#xff01; 模型一&#xff1a;不允许缺货&#xff0c;补充时间极短 为了便于描述和分析&#xff0c;对模型作如下…

基于视觉的语义匹配见多了,那基于雷达的呢?

论文题目&#xff1a; LiDAR-based HD Map Localization using Semantic Generalized ICP with Road Marking Detection 论文作者&#xff1a; Yansong Gong, Xinglian Zhang, Jingyi Feng, Xiao He and Dan Zhang 作者单位&#xff1a;北京驭势科技有限公司 导读&#xff…

【C++哈希应用】模拟实现STL中的unordered_map和unordered_set

目录 &#x1f680; 前言一&#xff1a; &#x1f525; 哈希表的改造1.1 模板参数列表的改造1.2 增加迭代器操作 二&#xff1a; &#x1f525; 封装unordered_map和unordered_set 2.1 unordered_map的模拟实现&#xff1a;2.1.1 unordered_map的测试 2.2 unordered_set的模拟实…

图像自定义画框box标注,坐标像素点获取;通过坐标点画框

1、jupyter-bbox-widget画框&#xff0c;这只能jupyter环境插件使用 pip install jupyter_bbox_widget ##安装 ##注册 jupyter nbextension enable --py --sys-prefix jupyter_bbox_widget使用 from jupyter_bbox_widget import BBoxWidget widget BBoxWidget(imagefruit.jp…

【深度学习】kaggle使用

https://blog.csdn.net/2301_78630677/article/details/133834096 https://blog.csdn.net/xiaojia1001/article/details/139467176 https://www.kaggle.com/ 使用要挂代理&#xff0c;要不然可能无法注册 绑定手机号之后才能使用GPU 每周30h免费GPU使用时长 上传数据集 Ad…

【文件解析漏洞】

使用windows2003sever服务器 第一个&#xff1a;目录解析 1、打开网站目录&#xff0c;右键打开资源管理器 新建一个1.asp文件 在1.asp目录下新建一个2.txt&#xff0c;输入asp的语句 2、使用本机访问windows2003的IP地址 访问http://192.168.189.155/1.asp/2.txt即可 第…