本文从Windows命令行的起源及终端的演变,到我们在未来Windows发行版中对Windows控制台及命令行进行全面更新,引入Windows下的linux子系统(WSL)。在本文中,我们将对命令行最重要方面进行了历史考察,这些方面对于UNIX(Linux)及Windows都是通用的:终端、SHELL、文本和文本编码。

很久以前的计算机

早期的电子计算,人们需要一个有效的方式进行人机交互,并且能看到他们的命令和结果。

第一个真正意义上的有效的人机交互是电传打字机。电传打字机是电动机器让用户用键盘输入,而他的输出设备在早期期就是打印机,屏幕是对用户来说是近期的显示输出设备。

操作者键入的字符缓存到本地并且通过电传打字机发送到附近的小型机或者大型机,一系列的信号沿着线缆(比如RS-232线缆)以每秒10个字符的速度(100波特率/秒)。

注意:令人兴奋的是David Gesswein 的 PDP-8 site有许多关于ASR33的信息(还有PDP-8和其他相关的技术),包括图片,视频等。

运行在电脑上的程序接受到键入的字符,然后再才能决定他们做什么,也许是随机的,异步的把字符发挥给打字传报机。打字传报机将会打印或者显示这些字符以供操作者读取和反应。

在接下来的几年里,科技的发展加速了传输的速度到19200波特每秒,并且用电子射线(CRT)管显示器替代了嘈杂的,还要花很大代价操作的打字机。这联系到八九十年代的终端,包括随处可见的DEC VT100 终端。

随着科技的发展,现在的终端发送字符给运行在电脑上的程序,电脑会以文本的形式输出给用户,作为一项基本的功能保留到今天,在所有的命令行和所以平台的终端上。

事实上,部分高雅的现代设备的系统的每一个组件依然有最简单的和最原始的:从键盘释放字符缓存成电子信号去连接电脑。输出设备把字符写入连接电脑的显示器上面(例如:纸张,屏幕)。

并且因为系统的每一个阶段和下一个阶段交流通过最简单的字符流,这是一种相对简单的方式去介绍通信基础。比如,调制解调器会讯息输入输出流凭借电话线发送到很远。

文本编码

重要的要记住的是终端和计算机是通过字符串进行通信的:当按下终端键盘上的键时,表示键入字符的值将被发送到已连接的计算机。按“A”键,发送值为65(0x40)。按“Z”键,发送值为90(0x5a)。

1.7位ASCII文本编码

字符列表及其值在美国信息交换标准码(ASCII)标准(ISO/IEC 646 / ECMA-6)的“7位编码字符集”中定义

表示可打印拉丁语A-Z(65-90),a-z(97-122),0-9(48-57)的128个值

许多常见的标点字符

几个不可显示的设备控制代码(0-31和127):

2.当 7 位不够用时——Code-Pages(代码页)

然而,7 位并不能提供足够的空间来编码诸多变音符号、标点符号以及其他语言和区域中所使用的符号。因此,通过添加一个附加位,ASCII 字符表可以使用定义了字符值为 128-255 的其他“代码页”集作扩展(并且可以重定义其他几个不可打印的 ASCII 字符)。

例如,IBM 定义了代码页 437 ,它添加了几个块字符,如╫(215)和╣(185),以及包括π(227)和±(241)的符号,并在通常不可打印的字符值范围 1-31 中重新定义了可打印字符:

Latin-1 代码页定义了拉丁语言使用的许多字符和符号:

许多命令行环境和 shell 支持用户更改代码页,这会导致终端显示不同的字符(取决于可用的字体),尤其是对于值为 128-255 的字符更为明显。但请注意错误的代码页可能导致显示的文本看起来像“乱码”。而且,是的,“mojibake”(乱码)是一个真实的术语!谁知道呢?

3.当 8 位不够用时 - Unicode

虽然代码页在一段时间内提供了解决方案,但它们有许多缺点,包括它们不允许同时显示多个代码页/语言的文本。因此,需要一种新的编码方法,以便准确表示人类已知的每种语言的每个字符和脚本,并留有足够的空间!

进入,Unicode。

Unicode 是一个国际标准(ISO/IEC 10646),它(目前)定义了 137,439 个字符,涵盖146个现代和历史脚本,以及许多符号和字形,包括在几乎所有应用程序、平台和设备中广泛使用的许多表情符号。 Unicode 标准定期更新,添加了额外的编写系统,添加/修正表情符号等。

Unicode 还定义了“不可打印”的格式化字符,例如,允许字符拼接和/或影响前面或后面的字符!这在像阿拉伯语等脚本语言中特别有用,其中给定字符的连字由它所包围的字符决定!表情符号也使用“零宽度连接符”将几个字符组合成一个视觉字形;例如,微软的 Ninja Cat 表情符号是通过将猫表情符号与其他表情符号结合起来形成忍者猫表情符号而形成的:

4.当多字节太多了 – UTF-8!

表示由 Unicode 定义的所有符号所需的空间,尤其是复杂字符、表情符号等,可能非常大,并且可能需要几个字节来唯一且系统地定义每个可显示的字符。

因此,几种编码方法被开发出来,用于这种所需存储空间与编码/解码数据所需的时间/复杂度:UTF-32(4字节/字符),UTF-16/UCS-2(2字节/字符)和 UTF-8(1-4字节/字符)是最流行的 Unicode 编码。

在很大程度上要归功于 UTF-8 与 ASCII 码的向后兼容性机器存储效率,它已经成为互联网上最流行的 Unicode 编码,并且自2008年后其超越 ASCII 和其他流行编码以来,UTF-8 已被广泛采用了:

因此,虽然大多数终端最开始支持 7 位和 8 位 ANSI 文本,但大多数现代终端支持 Unicode/UTF-8 文本。

什么是命令行及Shell?

“命令行”或CLI(命令行接口/解释器)描述了人类操作计算机的最基本的机制:CLI接受操作员键入的输入并执行所请求的命令。

例如,echo Hello将文本“Hello”写入到输出设备(例如屏幕)。 dir(Cmd)或ls(PowerShell / *NIX)会列出当前目录的内容。等等。

在早期的计算机上,操作员可用的命令通常相对简单,但操作员很快就要求越来越高的复杂度,并且能够编写脚本来自动执行常规或重复或复杂的任务。因此,命令行处理器的复杂度不断提高,并演变成现在通常被称为命令行“shell”的处理机制。

在UNIX/Linux中,原始的UNIX shell(sh)启发了大量的shell,包括Korn shell(ksh)、C shell(csh)和Bourne Shell(sh),它们本身引发了Bourne Again Shell(bash)等。

在微软的世界里:

1.原始的MS-DOS (command.com)是一个相对简单的命令行shell(可能比较古怪)。

Windows NT的“命令行提示符Command Prompt” (cmd.exe)旨在与旧版MS-DOS command.com/批处理脚本兼容,并未新的、功能更强的操作系统体检了几个额外的命令。

2.在2006年,Microsoft发布了Windows PowerShell

PowerShell是一款现代版的基于对象的命令行shell,受其他shell功能的启发,并且是基于.Net CLR & .NET框架基础之上的

使用PowerShell后, Windows用户可以控制、编写脚本并自动执行Windows主机、Windows计算机组、网络、存储系统、数据等等各方面功能

在2017年,Microsoft开源了PowerShell,并让其支持在macOS和诸多类Linux/BSD系统上运行。

3.在2016年,Microsoft引入了Windows下的linux子系统(WSL)

在Windows 10上直接支持真正的未经修改的Linux二进制文件执行

用户可以从windows商店安装一个或多个正版Linux发行版

用户可以执行一个或多个发行版实例,并可以和现有windows应用程序及工具一起运行

WSL使得Windows用户能够同时运行所有他们喜爱的Windows工具和Linux命令行工具,而无需双开或利用资源匮乏的虚拟机(VM)

我们将会重新阐释Windows命令行shell,但现在我们知道有各种shell,并且它们接受用户/操作员键入的命令,并根据需要执行各种任务。

现代的命令行

现代的计算机比过去的“简易终端”强大得多,并且通常运行于带有图形用户界面(GUI)桌面操作系统(例如Windows、Linux、macOS)。这些GUI环境允许多个应用程序同时运行在用户屏幕上各自的“窗口”内,它们可以显示在桌面或者隐藏在后台。

沉重、笨重的电动机械电传打字机已被在屏幕窗口内运行的现代终端应用程序所取代,但其基本功能仍与过去的终端设备相同。

类似地,终端应用程序连接到的命令行应用程序工作方式也与过去的终端设备工作方式相同:它们接收输入字符,决定如何处理这些字符,(可选地)执行工作,并可以发出要显示给用户的文本。但是,与通过慢速的TTY串行通信线路通信相比,终端应用程序和命令行应用程序在同一台机器上使用非常高速的、内存中的伪电传打字设备(Pseudo Teletype,PTY)通信系统进行通信。

当然,虽然现代终端主要与本地运行的命令行应用程序通信,但它们也可以与在同一网络中其他机器上运行的命令行应用程序通信,甚至可以通过internet与在世界另一端运行的远程机器通信。这种命令行的“远程操作”体验是一个强大的工具,它在每个平台上都很流行,尤其是UNIX平台。

最强大的命令行

从当前操作系统的发展上来看,最强大的命令行属Linux命令行,到底有多少个命令?多少个常用的命令?请参考Linux常用命令大全页面给你答案:https://ywnz.com/linux/linuxcymldq/

相关主题

window命令行 linux,Windows命令行:起源 直到引入Windows下的linux子系统(WSL)相关推荐

  1. linux temp文件夹在哪_Win10系统下使用linux命令的方法

    Win10系统是目前主流的操作系统之一,其功能十分强大,而在Windows10系统下也是能够使用linux命令,只是不少用户不知道而已.那么如何在Win10系统下使用linux命令?下面小编分享一下W ...

  2. linux puppy 安装软件,请问 如何在puppy下安装linux程序?·[已解决]

    由 cnzheng 于 星期二, 09/16/2008 - 11:59 发表 我下载了一个minicom-2.3.tar.gz的文件,是在linux下 使用串口的一个通讯程序,按照这个安装步骤,出现了 ...

  3. 程序放在linux哪个目录,linux下装的程序应该放到哪个目录下

    linux下装的程序应该放到哪个目录下 (2011-08-23 23:02:30) 标签: 杂谈 linux下装的程序应该放到哪个目录下是不是linux下装的程序也应该放到指定的目录下呢.我不懂,请指 ...

  4. 《安富莱嵌入式周报》第283期:全开源逆向“爆破”硬件工具,Linux内核6.1将正式引入RUST语言,I3C培训教程,80款市场成熟的电感式位置传感器设计

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  5. windows命令行下访问linux,Windows支持直接访问Linux子系统文件:你的下一台Linux何必是Linux...

    原标题:Windows支持直接访问Linux子系统文件:你的下一台Linux何必是Linux 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 微软,致力于做最好的Linux发行版. 今天, ...

  6. 微软正在改进 Windows 命令行:为 Linux 用户敞开大门

    微软正在改进 Windows 命令行环境或 Windows 终端.过去几年,Windows 终端已经有了显著的进步,能正确最大化,支持 1600 万色彩和 VT(虚拟终端)换码顺序.但相比 Linux ...

  7. 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用

    5年前倒腾过一次cygwin,当时体验感觉不好.到现在一直用的是GNU utilities for Win32,在Windows的CMD中使用*nix的命令工具包. GNU utilities for ...

  8. windows下学习linux,在Windows环境下学习Linux命令行的几种方法

    Linux高手通常将Windows工作平台的人鄙视得一无是处, 其实这完全没有必要.请不要装. 对于想进军linux的人来说, 学好linux命令行无疑是最基本的东西. 本文讲述如何在Windows环 ...

  9. windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡

    微软官方人员承认微软正在对Windows命令行环境或是Windows终端进行全方位的改进,目的是能和Linux命令行相竞争.随着Linux云服务器的大量被采用,很多Linux云服务器都没有安装图形界面 ...

最新文章

  1. Python安装库较慢问题,Python报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool解决方法
  2. SVN、Git设置提交时忽略的文件
  3. SQLServer中char、varchar、nchar、nvarchar的区别:
  4. 微软奇迹之旅-----天津站
  5. 嵌入式 linux restful,嵌入式 RESTful 框架 express.java
  6. 基于Vue-SSR优化方案归纳总结
  7. Java—数据库技术
  8. 【动态规划】 数字游戏 (ssl 1653)
  9. C++函数的用法:erase函数
  10. java集合的遍历_Java集合之遍历
  11. linux加密文件_如何在Linux上使用Gocryptfs加密文件
  12. Python使用pyechart绘制3d散点图
  13. 使用Castle做类的增强
  14. 哪一瞬间让你觉得有妈的孩子像个宝?
  15. 奥维中如何关闭gcj02坐标_QGIS入门知识:啥是坐标系
  16. Excel 哪个版本的好用?
  17. 【C++程序设计语言A视频教程 全12讲 中科院】【下载链接】
  18. 超详细的QSS样式表入门Demo
  19. Photoshop制作印章效果
  20. 麒麟信安加入中国首个桌面操作系统根社区openKylin, 共擎开源未来!

热门文章

  1. 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
  2. IP地址定位 API 接口
  3. 情有独钟,迷情电子三五年(四)
  4. UVM基础-Seq-Sqr-Driver交互详解
  5. 班组沟通与管理培训PPT模板
  6. 淘宝天猫数据分析:2023年健康养生三大品类数据分析
  7. PHP实现拼车平台数据表
  8. 随便想到,群聊天的数据库简单设计
  9. 我鮳,Log4j2突发重大漏洞,我们也中招了。。
  10. 数据统计分析(3):数据的集中趋势描述