Vanaf de vroegste dagen van elektronisch computergebruik hadden menselijke gebruikers een efficiënte manier nodig om opdrachten en gegevens naar de computer te sturen en om de resultaten van hun opdrachten/berekeningen te kunnen zien.
Een van de eerste echt effectieve mens-computer-interfaces was de Tele-Typewriter - of "Teletype". Teletypes waren elektromechanische machines met toetsenborden voor gebruikersinvoer en een of ander uitvoerapparaat - printers in de begindagen, schermen in recentere apparaten - die uitvoer aan de gebruiker vertoonden.
De tekens die de operator typte, werden lokaal gebufferd en verzonden van de Teletype naar een nabijgelegen mini- of mainframecomputer als een reeks signalen langs een elektrische kabel (bijv. RS-232-kabel) met 10 tekens per seconde (110 baud/bits per seconde - bps):
Opmerking: de geweldige PDP-8-site van David Gesswein bevat veel meer informatie over de ASR33 (en de PDP-8 en bijbehorende technologie), inclusief foto's, video's, enz. Het programma dat op de computer wordt uitgevoerd, zou de getypte tekens ontvangen, beslissen wat doen met hen, en kunnen optioneel, asynchroon tekens terugsturen naar de Teletype. De Teletype zou de geretourneerde tekens afdrukken / weergeven zodat de operator deze kan lezen en erop kan reageren.
In de jaren die volgden verbeterde de technologie, waardoor de transmissiesnelheden werden verhoogd tot 19.200bps en de luidruchtige en dure printer werd vervangen door een Cathode Ray Tube (CRT)-beeldscherm dat het vaakst wordt geassocieerd met computerterminals uit de jaren '80 en '. jaren 90, inclusief de alomtegenwoordige DEC VT100-terminal:
Hoewel de technologie verbeterde, bleef dit model van de terminal die tekens naar programma's op de computer stuurt en de computer die met tekstuitvoer naar de gebruiker reageert, het fundamentele interactiemodel voor alle opdrachtregels en terminals op alle platformen!
Een deel van de elegantie van dit model is het feit dat elk onderdeel van het systeem eenvoudig en consistent is gebleven: het toetsenbord straalde karakters uit die werden gebufferd voor uitvoer als elektrische signalen naar de aangesloten computer. Het uitvoerapparaat schreef eenvoudig de tekens die door de aangesloten computer worden uitgezonden op de weergavetechnologie (bijv. papier/scherm).
En omdat elke fase van het systeem met de volgende fase communiceerde door simpelweg stromen tekens door te geven, is het een relatief eenvoudig proces om verschillende communicatie-infrastructuur te introduceren, bijvoorbeeld door modems toe te voegen waarmee stromen van invoer- en uitvoertekens over grote afstanden via telefoonlijnen.
Tekstcodering
Het is belangrijk om te onthouden dat terminals en computers communiceren via tekenstromen: wanneer een toets op het toetsenbord van de terminal wordt ingedrukt, wordt een waarde die het getypte teken voorstelt naar de aangesloten computer gestuurd. Druk op de 'A'-toets en de waarde 65 (0x41) wordt verzonden. Druk op de 'Z'-toets en de waarde 90 (0x5a) wordt verzonden.
7-bit ASCII-tekstcodering
De lijst met tekens en hun waarden is gedefinieerd in de American Standard Code for Information Interchange (ASCII) -standaard ( ISO/IEC 646 / ECMA-6 ) "7-bit gecodeerde tekenset" die definieert
- De 128 waarden die de afdrukbare Latijnse AZ (65-90), az (97-122), 0-9 (48-57) vertegenwoordigen
- Veel voorkomende leestekens
- Verschillende niet-weergeefbare apparaatbesturingscodes (0-31 & 127)
Wanneer 7 bits niet genoeg zijn – Code-Pages
7 bits bieden echter niet genoeg ruimte om veel diakritische tekens, interpunctietekens en symbolen te coderen die in andere talen en regio's worden gebruikt. Dus, met de toevoeging van een extra bit, kan de ASCII-tekentabel worden uitgebreid met extra sets "Code-Pages" die tekens 128-255 definiëren (en mogelijk verschillende andere niet-afdrukbare ASCII-tekens opnieuw definiëren).
IBM definieerde bijvoorbeeld codepagina 437 die verschillende bloktekens zoals ╫ (215) en ╣ (185) en symbolen inclusief π (227) en ± (241) heeft toegevoegd, en opnieuw gedefinieerde afdrukbare tekens voor de normaal niet-afdrukbare tekens 1- 31:
De codepagina Latin-1 definieert veel tekens en symbolen die worden gebruikt door op het Latijn gebaseerde talen:
Veel opdrachtregelomgevingen en shells stellen de gebruiker in staat om codepagina's te wijzigen, waardoor de terminal verschillende tekens weergeeft (afhankelijk van de beschikbare lettertypen), vooral voor tekens met een waarde van 128-255. Houd er echter rekening mee dat de verkeerde codepagina ervoor kan zorgen dat de weergegeven tekst er " mojibaked " uitziet . En ja, "mojibake" is een echte term ! Wie weet?
Wanneer 8 bits niet genoeg zijn – Unicode
Hoewel codepagina's een tijdje een oplossing boden, hebben ze veel tekortkomingen, waaronder het feit dat ze niet toestaan dat tekst voor meerdere codepagina's/talen tegelijkertijd wordt weergegeven. Er was dus een nieuwe codering nodig die de nauwkeurige weergave mogelijk zou maken van elk karakter en elk schrift van elke taal die de mens kent, met voldoende ruimte over! Voer in, Unicode .
Unicode is een internationale standaard ( ISO/IEC 10646 ) die (momenteel) 137.439 tekens definieert die 146 moderne en historische scripts omvatten, plus vele symbolen en glyphs, waaronder de vele emoji die wijdverbreid in praktisch elke app, elk platform en elk apparaat worden gebruikt part9.Elm8CHxJ.y6GYdBrt@kader.hcc.nl" alt="😊" width="20" height="20" />De Unicode-standaard wordt regelmatig bijgewerkt, voegt extra schrijfsystemen toe, voegt emoji-symbolen toe/corrigeert, enz.
Wanneer veel-bytes te veel zijn - UTF-8!
De ruimte die nodig is om alle symbolen weer te geven die door Unicode zijn gedefinieerd, met name complexe tekens, emoji, enz., kan erg groot zijn en kan meerdere bytes vereisen om elk weer te geven teken uniek en systematisch te definiëren.
Zo zijn er verschillende coderingen ontwikkeld die opslagruimte verhandelen versus tijd/inspanning die nodig is om de gegevens te coderen/decoderen: UTF-32 (4 bytes / char), UTF-16/UCS-2 (2 bytes / char) en UTF -8 (1-4 bytes / char) behoren tot de meest populaire Unicode-coderingen.
Grotendeels dankzij de achterwaartse compatibiliteit met ASCII en de opslagefficiëntie, is UTF-8 naar voren gekomen als de meest populaire Unicode-codering op internet, en is het sinds 2008 explosief geadopteerd toen het ASCII en andere populaire coderingen inhaalde:
Dus, terwijl de meeste terminals begonnen met het ondersteunen van 7-bit en vervolgens 8-bit ANSI-tekst, ondersteunen de meeste moderne terminals Unicode/UTF-8-tekst.
Dus, wat IS een opdrachtregel en wat is een Shell?
De "Command-Line" of CLI (Command Line Interface/Interpreter) beschrijft het meest fundamentele mechanisme waarmee een mens een computer bedient: een CLI accepteert invoer die door de operator is ingetypt en voert de gevraagde opdrachten uit.
Schrijft bijvoorbeeld de tekst "Hallo" naar het uitvoerapparaat (bijv. scherm). (Cmd) of (PowerShell/*NIX) geeft de inhoud van de huidige map weer, enz.echo Hellodirls
In eerdere computers waren de commando's die beschikbaar waren voor de operator vaak relatief eenvoudig, maar operators eisten al snel meer en meer verfijning en de mogelijkheid om scripts te schrijven om alledaagse of repetitieve of complexe taken te automatiseren. Zo groeiden de opdrachtregelprocessors in verfijning en evolueerden ze naar wat nu algemeen bekend staat als opdrachtregel-shells.
In UNIX/Linux inspireerde de originele UNIX-shell (sh) een overvloed aan shells, waaronder de Korn-shell (ksh), C-shell (csh) en Bourne Shell (sh), die zelf de Bourne Again Shell (bash) voortbracht, enz.
In de wereld van Microsoft:
- De originele MS-DOS (command.com) was een relatief eenvoudige (zij het eigenzinnige) commandoregel-shell
- De "Command Prompt" (cmd.exe) van Windows NT is ontworpen om compatibel te zijn met oudere MS-DOS command.com/batch-scripts en heeft verschillende extra opdrachten toegevoegd voor het nieuwe, krachtigere besturingssysteem
- In 2006 bracht Microsoft Windows PowerShell uit
- PowerShell is een moderne objectgebaseerde opdrachtregel-shell geïnspireerd op de functies van andere shells, en is gebouwd op en bevat de kracht van het .NET CLR & .NET Framework
- Met PowerShell kunnen Windows-gebruikers praktisch elk aspect van een Windows-machine, een groep Windows-machines, netwerken, opslagsystemen, databases, enz. beheren, scripten en automatiseren.
- In 2017 heeft Microsoft PowerShell open source gemaakt en het in staat gesteld om op macOS en vele smaken van Linux en BSD te draaien!
- In 2016 introduceerde Microsoft het Windows-subsysteem voor Linux (WSL)
- Zorgt ervoor dat echte ongewijzigde Linux-binaries rechtstreeks op Windows 10 kunnen worden uitgevoerd
- Gebruikers installeren een of meer echte Linux-distributies vanuit de Windows Store
- Gebruikers kunnen een of meer distro-instanties naast elkaar en bestaande Windows-applicaties en -hulpprogramma's uitvoeren
- Met WSL kunnen Windows-gebruikers al hun favoriete Windows-tools en Linux-opdrachtregelprogramma's naast elkaar gebruiken zonder dual-boot of resource-hongerige virtuele machines (VM's) te gebruiken
We zullen in de toekomst de opdrachtregelshells van Windows opnieuw bekijken, maar weet nu dat er verschillende shells zijn, en ze accepteren opdrachten die door de gebruiker/operator zijn getypt, en voeren zo nodig een breed scala aan taken uit.
De moderne commandoregel
Moderne computers zijn veel krachtiger dan de "domme terminals" van weleer en draaien over het algemeen op een desktopbesturingssysteem (bijv. Windows, Linux, macOS) met een grafische gebruikersinterface (GUI). In deze GUI-omgevingen kunnen meerdere applicaties tegelijk draaien binnen hun eigen “venster” op het scherm van de gebruiker, en/of onzichtbaar op de achtergrond.
De onhandige, kolossale elektromechanische Teletype-machines zijn vervangen door moderne terminaltoepassingen die binnen een venster op het scherm draaien, maar nog steeds dezelfde essentiële functies vervullen als de terminalapparaten uit het verleden.
Op dezelfde manier werken opdrachtregeltoepassingen, waarmee terminal-apps zijn verbonden, op dezelfde manier als altijd: ze ontvangen invoertekens, beslissen wat ze met die tekens moeten doen, werken (optioneel) en kunnen tekst uitzenden die moet worden weergegeven aan de gebruiker.
Maar in plaats van te communiceren via trage seriële TTY-communicatielijnen, communiceren terminal-apps en opdrachtregeltoepassingen op dezelfde machine via zeer snelle, in-memory Pseudo Teletype (PTY)-communicatie.
De moderne commandoregel
Hoewel moderne terminals voornamelijk communiceren met lokaal draaiende opdrachtregelapplicaties, kunnen ze natuurlijk ook communiceren met opdrachtregelapplicaties die op andere machines op hetzelfde netwerk draaien, of zelfs externe machines die aan de andere kant van de wereld draaien via internet. Deze "remoting" van de opdrachtregelervaring is een krachtige tool die populair is op elk platform, vooral *NIX-platforms.
Dus, waar zijn we?
In dit bericht hebben we een historische rondleiding gegeven door de belangrijkste aspecten van de opdrachtregel die zowel *NIX als Windows gemeen hebben: Terminals, Shells, Tekst- en tekstcodering.
Het is belangrijk om de bovenstaande informatie te onthouden terwijl we doorgaan naar ons volgende bericht waar we meer zullen leren over de Windows Console, wat het is, hoe het werkt, hoe het verschilt van *NIX-terminals, waar het uitdagingen heeft en wat we doen er alles aan om deze uitdagingen het hoofd te bieden en de Windows-console de 21e eeuw in te brengen!
Blijf op de hoogte - er volgt meer !!