Warisan kuburan masa lalu. Masalah Baris Perintah Windows

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 ASR

Catatan: 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 VT100

Meskipun 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 Perintah

Modelnya 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 standar

Ketika 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 437

Halaman kode Latin-1 mendefinisikan sekumpulan karakter yang digunakan oleh bahasa berbasis Latin:


Latin-1 Codepage

Di 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 Emoji

Ketika 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-DOS

Windows 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 XenixUnix 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 :

  1. Windows
  2. Linux Windows

Microsoft :

  1. Windows Console , Windows Console
  2. 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, … … « », .

, , , , , :

  1. , , . . ( )
  2. /IO ( )

Windows Console :


    • , , .. STL
    • , ( ), « »
  • 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 … , , , !

?


, :


    • , , , .
    • / ANSI/VT
    • //
  • :
    • /
    • , (, , , ..)
  • :
    • / / ..

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. . , « / ». !

, ? … . :

  1. IOCTL ,
  2. Windows , ConHost.exe — ,
  3. 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
    • Windows API
      • Windows
    • IOCTL « »
      • -Windows
    • Windows «»
      • ConHost.exe
      • ,
    • Windows ANSI/VT
      • Windows 10
    • UTF-8 ,

… !

, .

Source: https://habr.com/ru/post/id417679/


All Articles