Kata pengantar oleh Microsoft Rich Turner dari Microsoft. Artikel ini adalah tentang baris perintah: dari tampilan dan evolusi hingga rencana untuk perbaikan Konsol Windows dan baris perintah di versi Windows yang akan datang. Apakah Anda seorang profesional berpengalaman atau baru di bidang TI, kami harap Anda menemukan artikel yang menarik.
Sekali waktu di server yang jauh, jauh ...
Dari hari-hari pertama perkembangan ilmu komputer, orang membutuhkan cara yang efektif untuk mentransfer perintah dan data ke komputer dan melihat hasil dari perintah / perhitungan ini.
Salah satu antarmuka manusia-mesin yang benar-benar efektif pertama adalah Tele-Typewriter, atau Teletype. Ini adalah mesin elektromekanis dengan keyboard untuk input data dan beberapa jenis perangkat output - pertama printer digunakan, kemudian layar.
Karakter yang dimasukkan oleh operator dilindungi secara lokal dan dikirim dari teletype ke komputer tetangga atau mainframe sebagai serangkaian sinyal melalui kabel listrik (misalnya, RS-232) dengan kecepatan 10 karakter per detik (110 baud, bit per detik, bps):
Teletype Model 33 ASRCatatan: David Hesswaine mengelola situs web PDP-8 yang luar biasa di mana Anda dapat menemukan informasi lebih lanjut tentang ASR33 (dan teknologi PDP-8 terkait), termasuk foto, video, dll.
Program di komputer menerima karakter yang dimasukkan, memutuskan apa yang harus dilakukan dengannya, dan, mungkin, secara tidak sinkron mengirim respons ke teletype. Teletype dapat mencetak / menunjukkan kepada operator karakter yang diterima.
Kemudian teknologinya membaik, kecepatan transmisi meningkat menjadi 19.200 bps, dan printer yang berisik dan mahal digantikan oleh layar CRT (jenis layar yang tersebar luas di tahun 80an dan 90an), seperti pada terminal DEC VT100 yang populer:
Terminal DEC VT100Meskipun teknologinya telah meningkat, tetapi model ini - terminal mengirimkan karakter ke program di komputer, dan itu memberikan teks kepada pengguna - tetap hari ini sebagai model dasar untuk interaksi semua baris perintah dan konsol pada semua platform!
Arsitektur Terminal dan Baris PerintahModelnya elegan dengan caranya sendiri. Salah satu alasannya adalah kesederhanaan dan integritas masing-masing komponen: keyboard menghasilkan karakter yang disangga sebagai sinyal listrik. Perangkat output hanya menampilkan karakter yang diterima dari komputer pada tampilan (kertas / layar).
Pada setiap tahap, hanya aliran karakter yang ditransmisikan dalam sistem, jadi ini adalah proses yang relatif sederhana untuk mengimplementasikan berbagai infrastruktur komunikasi. Misalnya, untuk menambahkan modem untuk mentransmisikan aliran karakter input dan output jarak jauh melalui saluran telepon.
Pengkodean teks
Penting untuk diingat bahwa terminal dan komputer bertukar data melalui aliran karakter. Ketika tombol ditekan pada keyboard terminal, nilai yang mewakili karakter yang dimasukkan dikirim ke komputer yang terhubung. Tekan tombol 'A' - dan nilai 65 (0x41) dikirim. Tekan 'Z' dan 90 (0x5a) dikirim.
Pengkodean ASCII 7-bit
Daftar karakter dan artinya didefinisikan dalam
Kode Standar Amerika untuk Pertukaran Informasi (ASCII) , alias
ISO / IEC 646 /
ECMA-6 - "Set Karakter Kode 7-bit", yang mendefinisikan:
- 128 nilai yang mewakili karakter Latin yang dicetak A - Z (65-90), a - z (97−122), 0−9 (48−57)
- Banyak tanda baca umum
- Beberapa kode kontrol yang tidak dapat dicetak (0−31 dan 127):
Karakter ASCII 7-bit standarKetika 7 bit tidak cukup: halaman kode
Namun, 7 bit tidak menyediakan ruang yang cukup untuk menyandikan banyak diakritik, tanda baca, dan karakter yang digunakan dalam bahasa dan wilayah lain. Jadi dengan tambahan bit tambahan, Anda dapat memperluas tabel karakter ASCII dengan set tambahan "halaman kode" untuk 128-255 karakter (dan kemungkinan redefinisi beberapa karakter ASCII yang tidak dapat dicetak).
Sebagai contoh, IBM memperkenalkan codepage 437 dengan beberapa karakter grafis seperti ╫ (215) dan ╣ (185) dan yang matematis, termasuk π (227) dan ± (241), dan juga mendefinisikan ulang karakter yang dapat dicetak untuk karakter yang biasanya tidak dicetak 1-31:
Kode Halaman 437Halaman kode Latin-1 mendefinisikan sekumpulan karakter yang digunakan oleh bahasa berbasis Latin:
Latin-1 CodepageDi banyak lingkungan dan shell command line, Anda dapat mengubah halaman kode saat ini sehingga terminal menampilkan karakter yang berbeda (tergantung pada font yang tersedia), terutama untuk karakter dengan nilai 128-255. Tetapi halaman kode yang ditentukan secara tidak benar akan menyebabkan tampilan
penjahat . Dan ya, "krakozyabry" adalah
istilah yang nyata ! Siapa yang akan berpikir? ;)
Ketika 8 bit tidak cukup: Unicode
Halaman kode memecahkan sementara masalah, tetapi mereka memiliki banyak kekurangan, misalnya, mereka tidak mengizinkan menampilkan teks dari beberapa halaman kode / bahasa secara bersamaan. Dengan demikian, perlu untuk mengenkodekan pengkodean baru yang secara akurat menampilkan setiap karakter dan alfabet untuk semua bahasa yang dikenal umat manusia, meninggalkan banyak ruang kosong! Memperkenalkan
Unicode .
Unicode adalah standar internasional (
ISO / IEC 10646 ) yang saat ini mendefinisikan 137.439 karakter dari 146 skrip modern dan historis, serta banyak karakter dan mesin terbang, termasuk banyak emotikon yang banyak digunakan di hampir setiap aplikasi, platform dan perangkat. Unicode secara teratur diperbarui dengan sistem penulisan tambahan, emotikon baru / dikoreksi, simbol, dll.
Unicode juga mendefinisikan karakter format “tidak dapat dicetak” yang memungkinkan, misalnya, untuk menggabungkan karakter dan / atau memengaruhi karakter sebelumnya atau selanjutnya! Ini sangat berguna dalam skrip seperti bahasa Arab, di mana ligatur simbol tertentu ditentukan oleh orang lain. Emoji dapat menggunakan
joiner lebar nol untuk menggabungkan beberapa karakter menjadi mesin terbang visual tunggal. Sebagai contoh, Microsoft ninja emoji kucing dibentuk dengan menghubungkan kucing dengan emoji lainnya:
Microsoft Cat Ninja EmojiKetika ada terlalu banyak byte: UTF-8!
Presentasi yang unik dan sistematis dari semua karakter memerlukan ruang yang besar, hingga beberapa byte per karakter.
Oleh karena itu, untuk menghemat uang, beberapa pengkodean Unicode baru dikembangkan. Di antara yang paling populer adalah UTF-32 (4 byte per karakter), UTF-16 / UCS-2 (2 byte) dan UTF-8 (1-4 byte per karakter).
Sebagian besar karena kompatibilitas ke belakang dengan ASCII dan penghematan ruang, UTF-8 telah menjadi pengkodean Unicode paling populer di Internet. Ini telah menunjukkan pertumbuhan eksplosif sejak 2008, ketika menyalip ASCII dan pengkodean populer lainnya dalam popularitas:
Semakin populernya pengkodean UTF-8 (sumber: Wikipedia)Jadi, pada awalnya terminal mendukung teks ANSI 7-bit dan kemudian 8-bit, tetapi sebagian besar terminal modern mendukung teks Unicode / UTF-8.
Jadi apa itu baris perintah dan apa itu 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 ,
… !
, .