La ligne de commande et le shell
La ligne de commande ou CLI (Command Line Interface / Interpreter) décrit le mécanisme le plus fondamental par lequel un humain exploite un ordinateur: Une CLI accepte l'entrée tapée par l'opérateur et exécute les commandes demandées.
Par exemple, echo Hello écrit le texte "Hello" sur le périphérique de sortie (qui peut être un écran). dir (Cmd) ou ls (PowerShell / * NIX) répertorie le contenu du répertoire en cours, etc.
Dans les ordinateurs précédents, les commandes disponibles à l'opérateur étaient souvent relativement simples, mais les opérateurs exigeaient rapidement de plus en plus de sophistication, et la possibilité d'écrire des scripts pour automatiser des tâches banales, répétitives ou complexes. Ainsi, les processeurs de ligne de commande ont gagné en sophistication et ont évolué vers ce que l'on appelle communément les « shell » de ligne de commande.
Sous UNIX / Linux, le shell original UNIX (sh) a inspiré une pléthore de shell, dont le shell Korn (ksh), le shell C (csh) et le Bourne Shell (sh), qui a engendré le Bourne Again Shell (bash), etc.
Dans le monde de Microsoft :
- Le MS-DOS d'origine (command.com) était un shell de ligne de commande relativement simple (sinon étrange) ;
- L'invite de commande de Windows NT (cmd.exe) a été conçue pour être compatible avec les scripts command.com/batch MS-DOS hérités et a ajouté plusieurs commandes supplémentaires pour le nouveau système d'exploitation, plus puissant
- En 2006, Microsoft a publié Windows PowerShell
- PowerShell est un shell de ligne de commande basé sur un objet moderne inspiré des fonctionnalités des autres shells. Il a été construit sur et intègre la puissance du .NET CLR & .NET Framework ;
- Grâce à PowerShell, les utilisateurs Windows peuvent contrôler, scripter et automatiser pratiquement tous les aspects d'une machine Windows, d'un groupe de machines Windows, d'un réseau, de systèmes de stockage, de bases de données, etc.
- En 2017, Microsoft publie PowerShell en open-source et lui permet de fonctionner sur macOS et de nombreuses versions de Linux et BSD!
- En 2016, Microsoft a présenté Windows Subsystem for Linux (WSL)
- Celui ci active les véritables binaires Linux non modifiés pour qu'ils s'exécutent directement sous Windows 10 ;
- Les utilisateurs ont la possibilité d’installer une ou plusieurs distributions Linux depuis le Windows Store
- Les utilisateurs peuvent exécuter une ou plusieurs instances de distribution les unes à côté des autres et des applications et outils Windows existants
- WSL permet aux utilisateurs Windows d'exécuter côte à côte tous leurs outils Windows préférés et leurs outils de ligne de commande Linux sans double amorçage ou utilisation de machines virtuelles gourmandes en ressources (VM)
Évolutions de la ligne de commande
MS-DOS
Dans les premières années de l'industrie du PC, la plupart des ordinateurs fonctionnaient entièrement en tapant des commandes dans la ligne de commande, qu’il soit question de machines basées sur Unix, CP / M, DR-DOS, ou d'autres. En fin de compte, MS-DOS a pris de l'importance en tant que système d'exploitation standard de facto pour les PC IBM compatibles, en particulier dans les entreprises :
MS-DOS a été très rapidement adopté par les entreprises, grandes et petites, qui, combinées, ont créé plusieurs millions de scripts batch, dont certains sont encore utilisés aujourd'hui! Les scripts batch sont utilisés pour automatiser la configuration des machines des utilisateurs, définir / modifier les paramètres de sécurité, mettre à jour le logiciel, le code de build, etc.
Tandis que la ligne de commande est un outil puissant entre les mains de ceux qui ont la patience et la ténacité d'apprendre à tirer le meilleur parti des commandes et des outils disponibles, la plupart des utilisateurs non techniques ont eu du mal à utiliser efficacement leurs ordinateurs. La plupart n'aimait pas devoir apprendre et se souvenir de nombreuses commandes apparemment arcanes / abrégées pour que leurs ordinateurs fassent quelque chose d'utile.
Aussi, une expérience utilisateur plus conviviale et axée sur la productivité était requise.
L'interface graphique devient mainstream
Vient alors l'interface utilisateur graphique (GUI), inspiré par le travail de Xerox 'Alto.
De nombreuses interfaces graphiques concurrentes sont apparues rapidement dans Apple Lisa et Macintosh, Commodore Amiga (Workbench), Atari ST (GRI de DRI), Acorn Archimedes (Arthur / RISC OS), Sun Workstation, X11 / X Windows et bien d'autres, y compris Microsoft Windows:
Windows 1.0 est arrivé en 1985, et était fondamentalement une application MS-DOS qui fournissait un simple environnement GUI à fenêtre en mosaïque, permettant aux utilisateurs d'exécuter plusieurs applications côte à côte:
Windows 1.01 en cours d'exécution sur MS-DOS
Cependant, Microsoft a réalisé qu’il pourrait uniquement étendre l'architecture et les capacités de MS-DOS et Windows et qu’il avait donc besoin d'un nouveau système d'exploitation sur lequel il devait se baser pour construire son avenir.
Microsoft s’essaye sur Unix et devient même un leader
Lors du développement de MS-DOS, Microsoft était également occupé à fournir Xenix - le port Unix de Microsoft version 7 - à une variété d'architectures de processeurs et de machines, y compris les Z8000, 8086/80286 et 68000.
En 1984, Xenix de Microsoft était devenu la variante Unix la plus populaire au monde !
Cependant, l'éclatement de Bell Labs - le siège d'Unix par le gouvernement américain - a donné naissance à AT&T qui a commencé à vendre Unix System V aux fabricants d'ordinateurs et aux utilisateurs finaux.
Microsoft a estimé que sans leur propre système d'exploitation, leur capacité à atteindre leurs objectifs futurs serait compromise. Cela a conduit à la décision de quitter Xenix: en 1987, Microsoft a transféré la propriété de Xenix à son partenaire The Santa Cruz Operation (SCO) avec lequel Microsoft avait travaillé sur plusieurs projets de portage et d'amélioration de Xenix sur diverses plateformes.
Microsoft et IBM sur OS/2
En 1985, Microsoft a commencé à travailler avec IBM sur un nouveau système d'exploitation appelé OS / 2. OS / 2 a été conçu à l'origine pour être « un DOS plus performant » et a été conçu pour tirer parti de certains des processeurs 32 bits modernes et d'autres technologies émergeant rapidement des OEM, y compris IBM.
Cependant, l'histoire d'OS / 2 était au mieux tumultueuse. En 1990, Microsoft et IBM ont mis fin à leur collaboration. Cela a été dû à un certain nombre de facteurs, y compris les différences culturelles importantes entre les développeurs IBM et Microsoft, les défis de planification, et le succès explosif et la croissance de l'adoption de Windows 3.1. IBM a continué le développement et le support d'OS / 2 jusqu'à la fin de 2006.
En 1988, Microsoft était convaincu que son succès futur exigeait une approche plus vaste, plus audacieuse et plus ambitieuse. Une telle approche nécessiterait un nouveau système d'exploitation moderne qui soutiendrait les objectifs ambitieux de l'entreprise.
Microsoft se lance sur Windows NT
En 1988, Microsoft a embauché Dave Cutler, créateur du système d'exploitation VAX / VMS populaire et très respecté de DEC. L'objectif de Cutler est de créer un nouveau système d'exploitation moderne et indépendant de la plateforme, que Microsoft posséderait, contrôlerait et qui fonderait la plus grande partie de son avenir.
Ce nouveau système d'exploitation est devenu Windows NT - la base qui a évolué vers Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8 et Windows 10, ainsi que toutes les versions de Windows Server, Windows Phone 7+, Xbox et HoloLens !
Windows NT a été conçu dès le début pour être indépendant de la plateforme, ayant été initialement conçu pour supporter l'i860 d'Intel, puis le MIPS R3000, Intel 80386+, DEC Alpha et PowerPC. Depuis lors, la famille Windows NT OS a été portée pour prendre en charge les architectures de processeur IA64 "Itanium", x64 et ARM / ARM64, entre autres.
Windows NT a fourni une interface de ligne de commande via son application de terminal "Windows Console" et le shell "Command Prompt" (cmd.exe). Cmd a été conçu pour être aussi compatible que possible avec les scripts batch MS-DOS, pour faciliter l'adoption de la nouvelle plateforme par l'entreprise.
La puissance de PowerShell
Bien que Cmd est toujours dans Windows jusqu’à ce jour, étant donné que son but principal est de rester aussi rétrocompatible que possible, Cmd est rarement amélioré. Même "corriger les bogues" est parfois difficile si ces "bogues" existaient dans MS-DOS ou des versions antérieures de Windows !
Au début des années 2000, le shell Cmd était déjà à bout de souffle et Microsoft et ses clients avaient un besoin urgent d'une expérience de ligne de commande plus puissante et plus flexible. Ce besoin a alimenté la création de PowerShell (qui provient du "Manifeste de la Monade" de Jeffrey Snover).
PowerShell est un shell orienté objet, contrairement aux shell basés sur les fichiers / flux généralement présents dans le monde * NIX: plutôt que de gérer des flux de texte, PowerShell traite les flux d'objets, permettant aux scripteurs PowerShell d'accéder directement aux objets et de manipuler leurs propriétés, plutôt que d'avoir à écrire et maintenir beaucoup de script pour analyser et manipuler le texte (par exemple via sed / grep / awk / lex / etc.)
PowerShell a été adopté par de nombreuses plateformes Microsoft et des partenaires, notamment Windows, Exchange Server, SQL Server, Azure et bien d'autres, et fournit des commandes pour administrer et contrôler pratiquement tous les aspects d'une machine Windows et / ou de l'environnement de façon très consistante.
PowerShell Core est disponible pour Windows et différentes versions de Linux, BSD et macOS!
Windows 10, une nouvelle ère pour la ligne de commande Windows!
Au début du développement de Windows 10, Microsoft a demandé à la communauté Windows quelles fonctionnalités elle voulait dans différentes zones du système d'exploitation. La communauté des développeurs s’est montrée particulièrement claire dans ses demandes et a souhaité que Microsoft :
- apporter des améliorations majeures à la console Windows
- donner aux utilisateurs la possibilité d'exécuter des outils Linux sous Windows.
Sur la base de ces commentaires, Microsoft a formé deux nouvelles équipes:
L'équipe de la console Windows et de la ligne de commande, chargée de prendre en charge et de réorganiser l'infrastructure de la console Windows et de la ligne de commande
Une équipe chargée d'activer les binaires Linux authentiques et non modifiés pour Windows 10 - le sous-système Windows pour Linux (WSL)
Que fait la console ?
Elle s’occupe de gérer les entrées de l'utilisateur :
- elle accepte la saisie à partir de périphériques tels que le clavier, la souris, le toucher, le touchpen, etc.
- elle traduit l'entrée en caractères pertinents et / ou en séquences ANSI / VT
- elle envoie des caractères à l'application / outil / shell connecté
Elle gère les sorties de l'application :
- elle accepter la sortie de texte à partir d'une application / outil Command-Line connecté
- elle met à jour l'affichage selon les besoins, en fonction de la sortie de l'application reçue (par exemple, le texte de sortie, déplacez le curseur, définissez la couleur du texte, etc.)
Elle gère les interactions du système :
- elle se lance lorsqu’elle est invoquée
- elle gère les ressources
- elle permet de redimensionner / agrandir / réduire, etc.
- elle se termine si nécessaire, ou lorsque le canal de communication est fermé / terminé
Cependant, la console Windows fait les choses un peu différemment:
Dans la console Windows
Avant Windows 7, les instances de la console Windows étaient hébergées dans CSRSS (Client Server Runtime Subsystem). Dans Windows 7, toutefois, la console a été extraite de CSRSS pour des raisons de sécurité et de fiabilité, et un nouvel hôte a été ajoutée aux binaires suivants:
- conhost.exe - le mode utilisateur Windows Console UX et plomberie de ligne de commande
- condrv.sys - un pilote de noyau Windows fournissant une infrastructure de communication entre conhost et un ou plusieurs shell / outils / applications de ligne de commande
Les principaux composants de la console sont les suivants (du bas vers le haut):
- ConDrv.sys - pilote en mode noyau
- Fournit un canal de communication haute performance entre la console et les applications de ligne de commande connectées
- Messages de contrôle d'E / S (IOCTL) entre les applications de ligne de commande et la console à laquelle ils sont "attachés"
- Les messages IOCTL de la console contiennent
- des données représentant des demandes d'exécution d'appels d'API sur l'instance de la console
- du texte envoyé de la console à l'application de ligne de commande
- ConHost.exe - Application graphique Win32:
- ConHost Core - les internes et la plomberie de la console
- Serveur API: convertit les messages IOCTL reçus des applications de ligne de commande en appels API et envoie des enregistrements de texte de la console à l'application de ligne de commande
- API: implémente l'API et la logique de la console Win32 derrière toutes les opérations que la console peut être appelée à exécuter
- Input Buffer: stocke les enregistrements d'événements du clavier et de la souris générés par l'entrée de l'utilisateur
- VT Parser: Si cette option est activée, analyse les séquences VT à partir du texte, extrait celles trouvées du texte et génère des appels d'API équivalents à la place.
- Output Buffer: stocke le texte affiché sur l'affichage de la console. Essentiellement un tableau 2D de structures CHAR_INFO qui contient les données et les attributs de chaque cellule (plus sur le tampon ci-dessous)
- Autre: Non inclus dans le diagramme ci-dessus comprennent l'infrastructure des paramètres de stockage / récupération des valeurs du registre et / ou des fichiers de raccourci, etc.
- Console UX App Services - la couche Console UX & UI
- Gère la disposition, la taille, la position, etc. de la fenêtre de la console à l'écran
- Affiche et gère les paramètres de l'interface utilisateur, etc.
- Gère la file d'attente des messages Windows, traite les messages Windows et traduit les entrées utilisateur dans les enregistrements d'événements de la clé et de la souris, en les stockant dans le tampon d'entrée.
- ConHost Core - les internes et la plomberie de la console
Source : Microsoft
Et vous ?
Que pensez-vous des évolutions de la ligne de commande dans Windows ?
Voir aussi :
Build 2018 : retour sur les annonces sur le sous-système Windows pour Linux (WSL), lors de la conférence de Microsoft dédiée aux développeurs
Windows 10 : plus d'outils ligne de commande via la Redstone 4 avec l'arrivée de distributions Linux additionnelles sur le Store
Microsoft ajoute le support de Curl et Tar dans Windows 10, accessibles directement depuis la ligne de commande
Microsoft ajoute le support d'un client OpenSSH dans Windows 10 accessible directement depuis la ligne de commande
Microsoft parle des évolutions du sous-système Linux WSL, qui vont accompagner la MàJ Creators Fall Update attendue le 17 octobre