Vorwort von Microsoft Rich Turner von Microsoft. In diesem Artikel geht es um die Befehlszeile: von ihrem Erscheinungsbild und ihrer Entwicklung bis hin zu PlĂ€nen fĂŒr die Ăberarbeitung der Windows-Konsole und der Befehlszeile in zukĂŒnftigen Windows-Versionen. Egal, ob Sie ein erfahrener Fachmann oder ein Neuling in der IT sind, wir hoffen, dass Sie den Artikel interessant finden.
Es war einmal in einem weit entfernten Server ...
Von den ersten Tagen der Entwicklung der Informatik an brauchten die Menschen eine effektive Möglichkeit, Befehle und Daten auf einen Computer zu ĂŒbertragen und das Ergebnis dieser Befehle / Berechnungen zu sehen.
Eine der ersten wirklich effektiven Mensch-Maschine-Schnittstellen war Tele-Typewriter oder Teletype. Dies ist eine elektromechanische Maschine mit einer Tastatur zur Dateneingabe und einer Art AusgabegerÀt - zuerst wurde ein Drucker verwendet, spÀter ein Bildschirm.
Vom Bediener eingegebene Zeichen werden lokal gepuffert und vom Teletyp als Signalreihe ĂŒber ein elektrisches Kabel (z. B. RS-232) mit einer Geschwindigkeit von 10 Zeichen pro Sekunde (110 Baud, Bits pro Sekunde, Bit / s) an einen benachbarten Computer oder Mainframe gesendet:
Teletyp Modell 33 ASRHinweis: David Hesswaine unterhĂ€lt eine ausgezeichnete PDP-8-Website, auf der Sie weitere Informationen zu ASR33 (und der zugehörigen PDP-8-Technologie) finden, einschlieĂlich Fotos, Videos usw.
Das Programm auf dem Computer empfÀngt die eingegebenen Zeichen, entscheidet, was mit ihnen zu tun ist, und sendet möglicherweise asynchron eine Antwort an den Teletyp. Der Teletyp kann dem Bediener die empfangenen Zeichen drucken / anzeigen.
Dann verbesserte sich die Technologie, die Ăbertragungsgeschwindigkeit stieg auf 19.200 Bit / s und verrauschte und teure Drucker wurden durch CRT-Displays (eine in den 80er und 90er Jahren weit verbreitete Art von Displays) ersetzt, wie beim beliebten DEC VT100-Terminal:
DEC VT100 TerminalObwohl sich die Technologie verbessert hat, bleibt dieses Modell - das Terminal sendet Zeichen an das Programm auf dem Computer und gibt den Text an den Benutzer weiter - bis heute das grundlegende Modell fĂŒr die Interaktion aller Befehlszeilen und Konsolen auf allen Plattformen!
Terminal- und BefehlszeilenarchitekturDas Modell ist auf seine Weise elegant. Einer der GrĂŒnde ist die Einfachheit und IntegritĂ€t jeder Komponente: Die Tastatur erzeugt Zeichen, die als elektrische Signale gepuffert werden. Das AusgabegerĂ€t zeigt einfach die vom Computer empfangenen Zeichen auf dem Display an (Papier / Bildschirm).
In jeder Phase wird nur ein Strom von Zeichen im System ĂŒbertragen, so dass dies ein relativ einfacher Prozess zum Implementieren verschiedener Kommunikationsinfrastrukturen ist. Zum Beispiel, um Modems hinzuzufĂŒgen, um Ströme von Eingabe- und Ausgabezeichen ĂŒber groĂe Entfernungen ĂŒber Telefonleitungen zu ĂŒbertragen.
Textcodierung
Es ist wichtig zu beachten, dass Terminals und Computer Daten ĂŒber Zeichenströme austauschen. Wenn eine Taste auf einer Terminaltastatur gedrĂŒckt wird, wird ein Wert, der das eingegebene Zeichen darstellt, an den angeschlossenen Computer gesendet. DrĂŒcken Sie die Taste 'A' - und der Wert 65 (0x41) wird gesendet. DrĂŒcken Sie 'Z' und 90 (0x5a) wird gesendet.
7-Bit-ASCII-Codierung
Die Liste der Zeichen und ihrer Bedeutung ist im
amerikanischen Standardcode fĂŒr den Informationsaustausch (ASCII) definiert , auch bekannt als
ISO / IEC 646 /
ECMA-6 - â7-Bit-codierter Zeichensatzâ, der Folgendes definiert:
- 128 Werte fĂŒr gedruckte lateinische Zeichen A - Z (65-90), a - z (97 - 122), 0 - 9 (48 - 57)
- Viele gebrÀuchliche Satzzeichen
- Mehrere nicht druckbare Steuercodes (0â31 und 127):
Standard 7-Bit-ASCII-ZeichenWenn 7 Bits nicht ausreichen: Codepages
7 Bits bieten jedoch nicht genĂŒgend Speicherplatz, um viele diakritische Zeichen, Satzzeichen und Zeichen zu codieren, die in anderen Sprachen und Regionen verwendet werden. Mit einem zusĂ€tzlichen Bit können Sie die ASCII-Zeichentabelle um zusĂ€tzliche SĂ€tze von âCodepagesâ fĂŒr 128 bis 255 Zeichen erweitern (und die mögliche Neudefinition mehrerer nicht druckbarer ASCII-Zeichen).
Beispielsweise fĂŒhrte IBM die Codepage 437 mit mehreren grafischen Zeichen wie â« (215) und ⣠(185) sowie mathematischen Zeichen ein, darunter Ï (227) und ± (241), und definierte druckbare Zeichen fĂŒr hĂ€ufig nicht druckbare Zeichen 1â31 neu:
Code Seite 437Die Latin-1-Codepage definiert den Zeichensatz, der von lateinischen Sprachen verwendet wird:
Latin-1 CodepageIn vielen Befehlszeilenumgebungen und Shells können Sie die aktuelle Codepage so Ă€ndern, dass das Terminal unterschiedliche Zeichen anzeigt (abhĂ€ngig von den verfĂŒgbaren Schriftarten), insbesondere fĂŒr Zeichen mit einem Wert von 128 bis 255. Eine falsch angegebene Codepage fĂŒhrt jedoch zur Anzeige eines
Gauners . Und ja, "krakozyabry" ist ein
richtiger Begriff ! Wer hÀtte das gedacht? ;)
Wenn 8 Bits nicht ausreichen: Unicode
Codepages haben das Problem vorĂŒbergehend gelöst, weisen jedoch viele MĂ€ngel auf. Beispielsweise können sie keinen Text aus mehreren Codepages / Sprachen gleichzeitig anzeigen. Daher war es notwendig, eine neue Codierung einzufĂŒhren, die jedes Zeichen und Alphabet fĂŒr alle der Menschheit bekannten Sprachen genau anzeigt und viel freien Speicherplatz lĂ€sst! EinfĂŒhrung in
Unicode .
Unicode ist ein internationaler Standard (
ISO / IEC 10646 ), der derzeit 137.439 Zeichen aus 146 modernen und historischen Skripten sowie viele Zeichen und Glyphen definiert, einschlieĂlich zahlreicher Emoticons, die in fast jeder Anwendung, Plattform und Plattform weit verbreitet sind GerĂ€t. Unicode wird regelmĂ€Ăig mit zusĂ€tzlichen Schriftsystemen, neuen / korrigierten Emoticons, Symbolen usw. aktualisiert.
Unicode definiert auch "nicht druckbare" Formatierungszeichen, mit denen beispielsweise Zeichen kombiniert und / oder vorherige oder nachfolgende Zeichen beeinflusst werden können! Dies ist besonders nĂŒtzlich in Skripten wie Arabisch, in denen die Ligatur eines bestimmten Symbols von anderen bestimmt wird. Emojis kann den
Joiner mit der
Breite Null verwenden , um mehrere Zeichen zu einer einzigen visuellen Glyphe zu kombinieren. Zum Beispiel werden Microsoft Ninja Cat Emojis gebildet, indem die Katze mit anderen Emojis verbunden wird:
Microsoft Cat Ninja EmojiWenn zu viele Bytes vorhanden sind: UTF-8!
Die eindeutige und systematische Darstellung aller Zeichen erfordert einen groĂen Speicherplatz von bis zu mehreren Bytes pro Zeichen.
Um Geld zu sparen, wurden daher mehrere neue Unicode-Codierungen entwickelt. Zu den beliebtesten gehören UTF-32 (4 Byte pro Zeichen), UTF-16 / UCS-2 (2 Byte) und UTF-8 (1-4 Byte pro Zeichen).
UTF-8 ist vor allem aufgrund der AbwĂ€rtskompatibilitĂ€t mit ASCII und der Platzersparnis die beliebteste Unicode-Codierung im Internet. Es hat ein explosives Wachstum seit 2008 gezeigt, als es ASCII und andere beliebte Kodierungen an PopularitĂ€t ĂŒberholte:
Die wachsende Beliebtheit der UTF-8-Codierung (Quelle: Wikipedia)Daher unterstĂŒtzten die Terminals zunĂ€chst 7-Bit- und dann 8-Bit-ANSI-Text, aber die meisten modernen Terminals unterstĂŒtzen Unicode / UTF-8-Text.
Was ist eine Befehlszeile und was ist eine Shell?
« » CLI (/ ) , : CLI .
,
echo Hello
«Hello» (, ).
dir
(Cmd)
ls
(PowerShell/*NIX) ..
, . , , «» (shell).
Unix/Linux Unix (sh)
, Korn shell (ksh), C shell (csh) Bourne Shell (sh). , Bourne Again Shell (bash) ..
Microsoft:
Windows, , , , /, .
« » (, Windows, Linux, macOS) (GUI). GUI / .
Cmd, PowerShell Ubuntu Linux WSL, / , , - , .
, , : , , , () â . TTY Pseudo Teletype (PTY) .

, . , , . «» â , , *NIX.
: MS-DOS
. Unix, CP/M, DR-DOS . MS-DOS - IBM PC :
MS-DOS 6.0, «» MS-DOS ,
batch- (.bat).
MS-DOS , ! Batch- , / , , ..
, , , . Windows!
, , . . , , - .
.
(GUI),
Xerox Alto.
GUI
Lisa Macintosh Apple,
Commodore Amiga (Workbench),
Atari ST (DRI GEM),
Acorn Archimedes (Arthur/RISC OS),
Sun Workstation,
X11/X Windows , Microsoft Windows.
Windows 1.0 1985 MS-DOS, GUI , :
Windows 1.01 MS-DOSWindows 2.x, 3.x, 95 98 MS-DOS. Windows MS-DOS Windows (, ), MS-DOS.
: Windows ME (Millennium Edition) . - MS-DOS Windows ( Gaming & Media). Windows 2000 (, TCP/IP), , NT.
Microsoft , MS-DOS Windows. .
Microsoft â Unix! , !
MS-DOS, Microsoft
Xenix â
Unix 7 â , Z8000, 8086/80286 68000.
1984 Xenix Microsoft Unix !
Bell Labs â Unix â AT&T, Unix System V .
Microsoft , . Xenix: 1987 Microsoft Xenix Santa Cruz Operation (SCO), Xenix .
Microsoft + IBM == OS/2âŠ
1985 Microsoft IBM
OS/2. « DOS» 32- CPU , IBM OEM.
OS/2 . 1990 Microsoft IBM .
, IBM Microsoft, , Windows 3.1. IBM OS/2 2006 .
1988 Microsoft , , . , , .
Microsoft: Windows NT
1988 Microsoft
,
VAX/VMS DEC. â , , , Microsoft , .
Windows NT: , Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8 Windows 10, Windows Server, Windows Phone 7+, Xbox HoloLens!
Windows NT . Intel i860, MIPS R3000, Intel 80386+, DEC Alpha PowerPC. Windows NT IA64 Itanium, x64 ARM/ARM64, .
Windows NT Windows Console Command Prompt (cmd.exe). Cmd MS-DOS, .
PowerShell
Cmd Windows (
, , ). â , Cmd . « » , «» MS-DOS Windows!
2000- Cmd : Microsoft . PowerShell (
« » ).
PowerShell â - , /, *NIX: PowerShell . ( sed/grep/awk/lex/.).
.NET Framework Common Language Runtime (CLR), PowerShell .NET , ⊠⊠. :)
PowerShell, «PowerShell » (Manning Press), â PowerShell. , .
PowerShell Microsoft, Windows, Exchange Server, SQL Server, Azure . Windows / .
PowerShell Core â PowerShell , Windows Linux, BSD macOS.
POSIX NT, Interix UNIX
NT NT - .
1993 Windows NT 3.1, : Đ
-DOS, Windows, OS/2 POSIX v1.2. , â !
POSIX Windows NT , . Microsoft Softway Systems POSIX- Interix NT. Interix , Services For Unix (SFU) Windows Server 2003 R2 Windows Vista. SFU Windows 8, , - .
âŠ
Windows 10 â Windows!
Windows 10
UserVoice , . Microsoft :
- Windows
- Linux Windows
Microsoft :
- Windows Console , Windows Console
- Windows Subsystem for Linux (WSL)
, , !
Windows Linux (WSL)
GNU/Linux «» ( Linux ) , . Windows POSIX- , SFU Linux - Unix/POSIX.
Windows, Microsoft, , Windows Linux!
2014 Microsoft ,
Windows Linux (WSL). WSL
Build 2016, Windows 10 Insider.
WSL Anniversary Update 2016 . , WSL: , Linux. ( !) WSL, Linux.
( 2018 ) WSL Linux, , , , .. , IT-, DevOps , , , Linux . ., Linux Windows , .
WSL WSL Linux, Windows.
Windows Console
2014 Windows Linux (WSL) , , Windows .
, , *NIX- , ANSI/VT, *NIX UI.
WSL, Linux?
, Windows 7 Windows 10: , Windows 7 () VT,
tmux
,
htop
,
Midnight Commander
cowsay
, Windows 10 ():
Windows 7 Windows 10, 2014 « Windows Console». , Windows Console⊠28 â , , .
, - , , , . .
Windows, , , , , , , « ». ;)
, . , 1â2% , Windows Build, ⊠⊠« », .
, , , , , :
- , , . . ( )
- /IO ( )
Windows Console :
- ANSI/VT, *NIX
- 24- 16 !
- : Narrator
- /
! .
?
, ,
, Microsoft.
Microsoft , // .
Microsoft Windows, , , !
MS-DOS, Unix, OS/2 Windows , , . , , ! Visual Studio (VS) . Exchange Server SQL Server PowerShell .
Windows Console
Windows NT 1989 , . , MS-DOS. Windows, GUI â Windows Console! Windows NT , , Windows, - !
Windows ( 2018 ) 30 ⊠, , , !
?
, :
Windows :
Windows Console
Windows â Win32. C, C++ , .
: , Windows C C++. : - NT, , Windows C! ? C++ . C++ , 1990-, $60/ (⊠$60 !), vtables . , C++. , C++ . , , ⊠C++!
Windows?
Windows 7 Windows
Client Server Runtime Subsystem (CSRSS)! Windows 7 CSRSS :
- conhost.exe â Windows UX
- condrv.sys â Windows, conhost //
:

( ):
- ConDrv.sys â
- ConHost.exe â Win32 GUI:
- ConHost Core â
- API: IOCTL, , API
- API: API Win32 ,
- : ,
- VT Parser: , VT, API
- : , . , 2D- CHAR_INFO, ( )
- : / / ..
- Console UX App Services â UX UI
Windows Console API
, NIX, / API /
IO Control (IOCTL), ! ANSI/VT ( Linux), , API!
*NIX Windows:
*NIX « », Windows
« »!
, , . , Windows *NIX!
*NIX
Unix 1960- 1970- , , ( ) . : , .
: *NIX, / , , «» , .
, Linux ,
/proc/cpuinfo
:

: / , sed, awk, perl, python .. , , . , â , / , , , .
Windows
Windows NT, «» : «-» , : Simula Smalltalk , C++ .
- , Python, Eiffel, Objective-C, ObjectPascal/Delphi, Java, C# .
. , - ( 1989 ) Windows NT , « ». NT
!
Windows NT
Win32 API / . Win32 API , *NIX, . , , , . , .
, Windows: NT «», *NIX :
- Console API: , ANSI/VT-, , Windows API
- : (, , ), Console API
Windows
API , API , .
Windows
Console API.
? Windows.
, (, ..), Windows *NIX .
- Windows , , . , Windows , , .., *NIX â .
: Windows bash iTerm2 â , Windows Cmd/PowerShell.
,
Cygwin, GNU Windows, , Linux. , Ruby, Python, Node Linux / *NIX.
, Microsoft Windows, Linux
Windows Linux (WSL). WSL Linux , apt/zypper/npm/gem/. Linux Windows.
, , : , Windows Console command-history command-alias, ( ) .
, , . : //. / .
*NIX- , /. - (TTY, PTY ..), .
Windows API , . . API ? , Console API, Mac Linux?!
, , .
⊠!
*NIX , . /.
Pseudo TTY (PTY).
Windows :
Windows (conhost.exe) â , , Cmd.exe, PowerShell.exe, wsl.exe . Windows ( ) .
#SAYWHATNOW?, Windows
, .
, Windows .exe . Windows , .
: , « ». , ! Win32. . , « / ». !
, ? ⊠. :
- IOCTL ,
- Windows , ConHost.exe â ,
- Windows «» (pipes),
. Windows? / , , ?
, . Windows (, ConEmu/Cmder, Console2/ConsoleZ, Hyper, Visual Studio Code, OpenSSH . .), , !
, , , (-32000, -32000). , â !
- , ?! , â .
, . .
Windows Console VT
, Windows
API. Console API , , .. API ANSI/VT, .
, Windows 10 Windows ANSI/VT:

2014 , Microsoft Windows Console. ANSI/VT *NIX,
Windows Linux (WSL) *NIX.
Windows 10 ANSI/VT, Windows
Linux.
VT ,
GitHub. ;)
, Windows API !
Windows ( ) UCS-2 . 65536 , 0 (Basic Multilingual Plane, BMP).
Console API. , :
/ ,
W
(wchar)/ .
,
WriteConsoleOutputCharacter WriteConsoleOutputCharacterA()
ASCII
WriteConsoleOutputCharacterW()
.
...A
...W
, .
: W API UCS-2, , A/W, , . W API UTF-16 .
W API UTF-16, UCS-2.
, , (
zero width joiner), , .
- / ? ,
!
API (
NinjaCat 8 !), UCS-2 . , GDI-
, !
⊠legacy-.
â . !
, ?
, , , â Windows, , , , ,
! !

:
- Windows:
- Condrv.sys â
- ConHost. â UX :
- API â API IOCTL, /
- API â
- â , , , /
- VT â ANSI/VT API
- UX â UI , ,
- â , .
- *NIX
- NIX: « / »
- Windows: « , API»
- API , IOCTL
- API Windows
- Windows API
- IOCTL « »
- Windows «»
- Windows ANSI/VT
- UTF-8 ,
⊠!
, .