مقدمة من Microsoft Rich Turner من Microsoft. تتناول هذه المقالة سطر الأوامر: من مظهره وتطوره إلى خطط الإصلاح الشامل لوحدة تحكم Windows وسطر الأوامر في الإصدارات المستقبلية من Windows. سواء كنت محترفًا من ذوي الخبرة أو جديدًا في مجال تكنولوجيا المعلومات ، نأمل أن تجد المقالة مثيرة للاهتمام.
ذات مرة في خادم بعيد ، بعيد ...
منذ الأيام الأولى من تطوير علوم الكمبيوتر ، كان الناس بحاجة إلى طريقة فعالة لنقل الأوامر والبيانات إلى جهاز كمبيوتر ورؤية نتيجة هذه الأوامر / الحسابات.
كانت Tele-Typewriter أو Teletype واحدة من أولى الواجهات الفعالة حقًا بين الإنسان والآلة. هذه آلة كهروميكانيكية مع لوحة مفاتيح لإدخال البيانات ونوع من أجهزة الإخراج - أولاً تم استخدام طابعة ، وفي وقت لاحق شاشة.
يتم تخزين الأحرف التي يتم إدخالها بواسطة عامل التشغيل محليًا وإرسالها من teletype إلى كمبيوتر مجاور أو حاسب مركزي كسلسلة من الإشارات عبر كابل كهربائي (على سبيل المثال ، RS-232) بسرعة 10 أحرف في الثانية (110 بود ، بت في الثانية ، بت في الثانية):
Teletype Model 33 ASRملاحظة: يحتفظ David Hesswaine بموقع PDP-8 ممتاز حيث يمكنك العثور على مزيد من المعلومات حول ASR33 ( وتكنولوجيا PDP-8 ذات الصلة) ، بما في ذلك الصور ومقاطع الفيديو وما إلى ذلك.
يتلقى البرنامج على الكمبيوتر الأحرف التي تم إدخالها ، ويقرر ما يجب فعله بها ، وربما يرسل استجابة غير متزامنة إلى النمط التليفزيوني. يمكن أن تقوم Teletype بطباعة / إظهار عامل التشغيل للأحرف المستلمة.
ثم تحسنت التكنولوجيا ، وزادت سرعة الإرسال إلى 19200 بت في الثانية ، وتم استبدال الطابعات الصاخبة والمكلفة بشاشات CRT (نوع واسع من الشاشات في الثمانينيات والتسعينيات) ، كما هو الحال في محطة DEC VT100 الشهيرة:
DEC VT100 Terminalعلى الرغم من أن التكنولوجيا قد تحسنت ، إلا أن هذا النموذج - يرسل الطرفية الأحرف إلى البرنامج على الكمبيوتر ، ويعطي النص للمستخدم - لا يزال اليوم كنموذج أساسي لتفاعل جميع أسطر الأوامر ووحدات التحكم على جميع الأنظمة الأساسية!
معمارية المحطة الطرفية وسطر الأوامرالنموذج أنيق بطريقته الخاصة. أحد الأسباب هو بساطة ونزاهة كل مكون: تنتج لوحة المفاتيح أحرفًا يتم تخزينها مؤقتًا كإشارات كهربائية. يعرض جهاز الإخراج ببساطة الأحرف المتلقاة من الكمبيوتر على الشاشة (الورق / الشاشة).
في كل مرحلة ، يتم إرسال دفق من الشخصيات فقط في النظام ، لذا فهذه عملية بسيطة نسبيًا لتنفيذ البنية التحتية للاتصالات المختلفة. على سبيل المثال ، لإضافة أجهزة مودم لإرسال تيارات من أحرف الإدخال والإخراج لمسافات طويلة عبر خطوط الهاتف.
ترميز النص
من المهم أن نتذكر أن الأجهزة الطرفية وأجهزة الكمبيوتر تتبادل البيانات من خلال تدفقات الشخصيات. عند الضغط على مفتاح على لوحة المفاتيح الطرفية ، يتم إرسال قيمة تمثل الحرف الذي تم إدخاله إلى الكمبيوتر المتصل. اضغط على المفتاح "A" - وسيتم إرسال القيمة 65 (0x41). اضغط على "Z" و 90 (0x5a).
ترميز ASCII 7 بت
يتم تعريف قائمة الشخصيات ومعانيها في
الكود القياسي الأمريكي لتبادل المعلومات (ASCII) ، المعروف أيضًا بـ
ISO / IEC 646 /
ECMA-6 - "مجموعة أحرف مشفرة 7 بت" ، والتي تحدد:
- 128 قيمة تمثل الأحرف اللاتينية المطبوعة A - Z (65-90) ، a - z (97−122) ، 0−9 (48−57)
- العديد من علامات الترقيم الشائعة
- العديد من رموز التحكم غير القابلة للطباعة (0-31 و 127):
أحرف ASCII 7 بت قياسيةعندما تكون 7 بتات غير كافية: صفحات الرموز
ومع ذلك ، لا توفر 7 بت مساحة كافية لترميز العديد من علامات التشكيل وعلامات الترقيم والشخصيات المستخدمة في اللغات والمناطق الأخرى. لذا مع إضافة بت إضافي ، يمكنك توسيع جدول أحرف ASCII بمجموعات إضافية من "صفحات الرموز" لـ 128-255 حرفًا (وإعادة تعريف محتمل للعديد من أحرف ASCII غير القابلة للطباعة).
على سبيل المثال ، قدمت شركة IBM صفحة الشفرة 437 مع العديد من الأحرف الرسومية مثل ╫ (215) و ╣ (185) والرموز الرياضية ، بما في ذلك π (227) و ± (241) ، وأيضًا إعادة تعريف الأحرف القابلة للطباعة للأحرف غير القابلة للطباعة الشائعة من 1 إلى 31:
صفحة التعليمات البرمجية 437تحدد صفحة الرموز اللاتينية -1 مجموعة الأحرف المستخدمة من قبل اللغات اللاتينية:
لاتينية -1 صفحة الشفرةفي العديد من بيئات سطر الأوامر والأغلفة ، يمكنك تغيير صفحة الرموز الحالية بحيث تعرض الوحدة الطرفية أحرفًا مختلفة (اعتمادًا على الخطوط المتاحة) ، خاصةً للأحرف بقيمة 128-255. لكن صفحة الرموز المحددة بشكل غير صحيح ستؤدي إلى عرض
محتال . ونعم ، "krakozyabry"
مصطلح حقيقي ! من كان يظن؟ ؛)
عندما تكون 8 بتات غير كافية: Unicode
قامت صفحات الرموز بحل المشكلة مؤقتًا ، ولكن لديها العديد من أوجه القصور ، على سبيل المثال ، لا تسمح بعرض النص من عدة صفحات / لغات التعليمات البرمجية في وقت واحد. وبالتالي ، كان من الضروري إدخال ترميز جديد يعرض بدقة كل حرف وأبجدية لجميع اللغات المعروفة للبشرية ، مما يترك الكثير من المساحة الخالية! إدخال
Unicode .
Unicode هو معيار دولي (
ISO / IEC 10646 ) يحدد حاليًا 137.439 حرفًا من 146 نصًا حديثًا وتاريخيًا ، بالإضافة إلى العديد من الأحرف والرموز ، بما في ذلك العديد من الرموز التي يتم استخدامها على نطاق واسع في كل تطبيق ومنصة و الجهاز. يتم تحديث Unicode بانتظام مع أنظمة كتابة إضافية ، رموز جديدة / تصحيحها ، رموز ، إلخ.
يحدد Unicode أيضًا أحرف التنسيق "غير القابلة للطباعة" التي تسمح ، على سبيل المثال ، بدمج الأحرف و / أو التأثير على الأحرف السابقة أو اللاحقة! هذا مفيد بشكل خاص في النصوص مثل العربية ، حيث يتم تحديد ربطة رمز معين من قبل الآخرين. يمكن لـ Emojis استخدام أداة ربط
بعرض صفر لدمج شخصيات متعددة في حرف رسومي واحد. على سبيل المثال ، يتم تشكيل الرموز التعبيرية لقطط النينجا من Microsoft عن طريق توصيل القطة برموز تعبيرية أخرى:
Microsoft Cat Ninja Emojiعندما يكون هناك عدد كبير جدًا من البايت: UTF-8!
يتطلب العرض الفريد والمنهجي لجميع الأحرف مساحة كبيرة تصل إلى عدة بايت لكل حرف.
لذلك ، لتوفير المال ، تم تطوير العديد من ترميزات Unicode الجديدة. من بين الأكثر شيوعًا UTF-32 (4 بايت لكل حرف) و UTF-16 / UCS-2 (2 بايت) و UTF-8 (1-4 بايت لكل حرف).
إلى حد كبير بسبب التوافق العكسي مع ASCII وتوفير المساحة ، أصبح UTF-8 ترميز Unicode الأكثر شيوعًا على الإنترنت. لقد أظهر نموًا هائلاً منذ عام 2008 ، عندما تخطى ASCII والترميزات الشعبية الأخرى في الشعبية:
الشعبية المتزايدة لترميز UTF-8 (المصدر: ويكيبيديا)وبالتالي ، دعمت المحطات في البداية نص 7-bit ثم 8-bit ANSI ، لكن معظم المطاريف الحديثة تدعم نص Unicode / UTF-8.
إذن ما هو سطر الأوامر وما هو الصدفة؟
« » 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 ,
… !
, .