cmd命令入門

命令行的發展歷史

一、很久很久以前,在一個機房...

早期的電子計算,人們需要一個有效的方式進行人機交互,並且能看到他們的命令和結果。

第一個真正意義上的有效的人機交互是電傳打字機。電傳打字機是電動機器讓用戶用鍵盤輸入,而他的輸出設備在早期期就是打印機,屏幕是對用戶來說是近期的顯示輸出設備。

操作者鍵入的字符緩存到本地並且通過電傳打字機發送到附近的小型機或者大型機,一系列的信號沿着線纜(比如RS-232線纜)以每秒10個字符的速度(100波特率/秒)。

打字傳報機型號 33ASR

注意:令人興奮的是David Gesswein 的 PDP-8 site有許多關於ASR33的信息(還有PDP-8和其他相關的技術),包括圖片,視頻等。

 運行在電腦上的程序接受到鍵入的字符,然後再才能決定他們做什麼,也許是隨機的,異步的把字符發揮給打字傳報機。打字傳報機將會打印或者顯示這些字符以供操作者讀取和反應。

在接下來的幾年裏,科技的發展加速了傳輸的速度到19200波特每秒,並且用電子射線(CRT)管顯示器替代了嘈雜的,還要花很大代價操作的打字機。這聯繫到八九十年代的終端,包括隨處可見的DEC VT100 終端。

DEC VT100 終端

隨着科技的發展,現在的終端發送字符給運行在電腦上的程序,電腦會以文本的形式輸出給用戶,作爲一項基本的功能保留到今天,在所有的命令行和所以平臺的終端上。

終端和命令行體系

事實上,部分高雅的現代設備的系統的每一個組件依然有最簡單的和最原始的:從鍵盤釋放字符緩存成電子信號去連接電腦。輸出設備把字符寫入連接電腦的顯示器上面(例如:紙張,屏幕)。

並且因爲系統的每一個階段和下一個階段交流通過最簡單的字符流,這是一種相對簡單的方式去介紹通信基礎。比如,調制解調器會訊息輸入輸出流憑藉電話線發送到很遠。

二、文本編碼

重要的要記住的是終端和計算機是通過字符串進行通信的:當按下終端鍵盤上的鍵時,表示鍵入字符的值將被髮送到已連接的計算機。按“A”鍵,發送值爲65(0x40)。按“Z”鍵,發送值爲90(0x5a)。

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):

 

標準ASCII 7位字符

三、當 7 位不夠用時——Code-Pages(代碼頁)

然而,7 位並不能提供足夠的空間來編碼諸多變音符號、標點符號以及其他語言和區域中所使用的符號。因此,通過添加一個附加位,ASCII 字符表可以使用定義了字符值爲 128-255 的其他“代碼頁”集作擴展(並且可以重定義其他幾個不可打印的 ASCII 字符)。

例如,IBM 定義了代碼頁 437 ,它添加了幾個塊字符,如╫(215)和╣(185),以及包括π(227)和±(241)的符號,並在通常不可打印的字符值範圍 1-31 中重新定義了可打印字符:

Code-Page 437

Latin-1 代碼頁定義了拉丁語言使用的許多字符和符號:

Latin-1 Code-Page

許多命令行環境和 shell 支持用戶更改代碼頁,這會導致終端顯示不同的字符(取決於可用的字體),尤其是對於值爲 128-255 的字符更爲明顯。但請注意錯誤的代碼頁可能導致顯示的文本看起來像“亂碼”。而且,是的,“mojibake”(亂碼)是一個真實的術語!誰知道呢?

四、

當 8 位不夠用時 - Unicode

雖然代碼頁在一段時間內提供瞭解決方案,但它們有許多缺點,包括它們不允許同時顯示多個代碼頁/語言的文本。因此,需要一種新的編碼方法,以便準確表示人類已知的每種語言的每個字符和腳本,並留有足夠的空間!

進入,Unicode 。

Unicode 是一個國際標準(ISO/IEC 10646),它(目前)定義了 137,439 個字符,涵蓋146個現代和歷史腳本,以及許多符號和字形,包括在幾乎所有應用程序、平臺和設備中廣泛使用的許多表情符號。 Unicode 標準定期更新,添加了額外的編寫系統,添加/修正表情符號等。

Unicode 還定義了“不可打印”的格式化字符,例如,允許字符拼接和/或影響前面或後面的字符!這在像阿拉伯語等腳本語言中特別有用,其中給定字符的連字由它所包圍的字符決定!表情符號也使用“零寬度連接符”將幾個字符組合成一個視覺字形;例如,微軟的 Ninja Cat 表情符號是通過將貓表情符號與其他表情符號結合起來形成忍者貓表情符號而形成的:

Microsoft's Ninja Cat Emoji

五、

Wi

當多字節太多了 – UTF-8!

表示由 Unicode 定義的所有符號所需的空間,尤其是複雜字符、表情符號等,可能非常大,並且可能需要幾個字節來唯一且系統地定義每個可顯示的字符。

因此,幾種編碼方法被開發出來,用於這種所需存儲空間與編碼/解碼數據所需的時間/複雜度:UTF-32(4字節/字符),UTF-16/UCS-2(2字節/字符)和 UTF-8(1-4字節/字符)是最流行的 Unicode 編碼。

在很大程度上要歸功於 UTF-8 與 ASCII 碼的向後兼容性機器存儲效率,它已經成爲互聯網上最流行的 Unicode 編碼,並且自2008年後其超越 ASCII 和其他流行編碼以來,UTF-8 已被廣泛採用了:

UTF-8 編碼流行度增長趨勢(來源: Wikipedia)

因此,雖然大多數終端最開始支持 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)等。

在微軟的世界裏:

  • 原始的MS-DOS (command.com)是一個相對簡單的命令行shell(可能比較古怪)。

  • Windows NT的“命令行提示符Command Prompt” (cmd.exe)旨在與舊版MS-DOS command.com/批處理腳本兼容,並未新的、功能更強的操作系統體檢了幾個額外的命令。

  • 在2006年,Microsoft發佈了Windows PowerShell

    • PowerShell是一款現代版的基於對象的命令行shell,受其他shell功能的啓發,並且是基於.Net CLR & .NET框架基礎之上的

    • 使用PowerShell後, Windows用戶可以控制、編寫腳本並自動執行Windows主機、Windows計算機組、網絡、存儲系統、數據等等各方面功能

    • 在2017年,Microsoft開源了PowerShell,並讓其支持在macOS和諸多類Linux/BSD系統上運行!

  • 在2016年,Microsoft引入了Windows下的linux子系統(WSL)

    • 在Windows 10上直接支持真正的未經修改的Linux二進制文件執行

    • 用戶可以從windows商店安裝一個或多個正版Linux發行版

    • 用戶可以執行一個或多個發行版實例,並可以和現有windows應用程序及工具一起運行

    • WSL使得Windows用戶能夠同時運行所有他們喜愛的Windows工具和Linux命令行工具,而無需雙開或利用資源匱乏的虛擬機(VM)

我們將會重新闡釋Windows命令行shell,但現在我們知道有各種shell,並且它們接受用戶/操作員鍵入的命令,並根據需要執行各種任務。

七、

現代的命令行

 

現代的計算機比過去的“簡易終端”強大得多,並且通常運行於帶有圖形用戶界面(GUI)桌面操作系統(例如Windows、Linux、macOS)。這些GUI環境允許多個應用程序同時運行在用戶屏幕上各自的“窗口”內,它們可以顯示在桌面或者隱藏在後臺。

        在WSL上運行的Cmd、PowerShell和Ubuntu Linux獨立控制檯實例

沉重、笨重的電動機械電傳打字機已被在屏幕窗口內運行的現代終端應用程序所取代,但其基本功能仍與過去的終端設備相同。

 

類似地,終端應用程序連接到的命令行應用程序工作方式也與過去的終端設備工作方式相同:它們接收輸入字符,決定如何處理這些字符,(可選地)執行工作,並可以發出要顯示給用戶的文本。但是,與通過慢速的TTY串行通信線路通信相比,終端應用程序和命令行應用程序在同一臺機器上使用非常高速的、內存中的僞電傳打字設備( Pseudo Teletype,PTY)通信系統進行通信。

                                                       現代命令行

當然,雖然現代終端主要與本地運行的命令行應用程序通信,但它們也可以與在同一網絡中其他機器上運行的命令行應用程序通信,甚至可以通過internet與在世界另一端運行的遠程機器通信。這種命令行的“遠程操作”體驗是一個強大的工具,它在每個平臺上都很流行,尤其是*NIX平臺。

命令鏈接:windows Commands

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章