Que signifie le mot « shell » en programmation ?


C'est une grande question - qui a de multiples réponses à de multiples niveaux - et en méditant sur laquelle, on peut vraiment "grok" beaucoup de choses sur les systèmes informatiques et l'architecture des OS (Operating System) - alors que les autres réponses ont essayé de dire de manière "concise" ce qu'est un shell- elles n'ont pas vraiment approfondi les significations OU "Que signifie le mot shell en programmation ?". Alors c'est parti...

(0) A quoi ressemble un shell : (puisqu'une image vaut mille mots !)


(i) Terminal MacOS / shell bash (bash lui-même est une forme abrégée de "Bourne Again Shell")

main-qimg-af5fd2ac89cdd4206091f2e8d3c26814.webp


(ii) Invite de commande Windows

main-qimg-04e2681989a66d8f7190d1dbccd7ed77.webp

(1) Significations littérales

D'abord, dans la langue anglaise, qu'est-ce qu'une coquille - "Une coquille est la partie extérieure - cela peut être une carapace de tortue OU une carapace d'arachide OU une carapace de noix de coco."

main-qimg-331c52e8bd6f793fbb0278b3eccb4e2c.webp

Et en anglais, qu'y a-t-il à l'intérieur d'une coquille ? Le noyau - qui est défini (en anglais, pas seulement en CS ou en programmation) comme "ce qui se trouve à l'intérieur d'une coquille".

main-qimg-8b57be9cd9fee7272deffca3a6e29eb2.webp

Photo ci-dessous - la coquille et le noyau d'une noisette.

main-qimg-87d6bcb8ba84ff7b2700c3f0b694821f.webp

(2) Le point de vue de l'informatique (CS) / du système d'exploitation (OS):

Maintenant, en CS/Programmation, il y a quelque chose qui s'appelle le "système d'exploitation" (OS) qui est l'ensemble des programmes nécessaires pour faire fonctionner un ordinateur, avant qu'il puisse faire des choses cool comme le traitement de texte, la navigation sur Internet, les jeux, etc.

Le système d'exploitation comporte 3 parties :

(A) Le noyau - C'est le cœur d'un système d'exploitation moderne - qui effectue des tâches comme les fonctions de mise en réseau, la gestion de l'alimentation du matériel, la gestion des périphériques et aussi la planification des tâches entre plusieurs programmes concurrents, etc.

(B) Les programmes utilitaires - Ce sont les programmes qui aident à effectuer les tâches utilitaires couramment nécessaires - comme la gestion des disques (partitionnement, défragmentation, formatage, etc.), le traitement de texte de base (en utilisant le Bloc-notes sur Windows OU l'édition de texte sur MacOS), la gestion des utilisateurs (c'est-à-dire , changer le mot de passe, ajouter un utilisateur), etc.

(C) Le shell (aha !) - Le shell est ici l'interface - qu'elle soit en ligne de commande / basée sur la console OU qu'elle soit une interface graphique, par laquelle l'utilisateur et les programmes utilisateurs interagissent avec le système d'exploitation - et qui effectue tout un tas de tâches, y compris le suivi de l'état actuel du système tel que vu par l'utilisateur actuel.

main-qimg-ca6b7762d4c5f2d4c56f9e00e378639b.webp

Dans le schéma ci-dessus, les "applications" comprendraient :

(i) l'interpréteur de commandes (puisque l'interpréteur de commandes est lui aussi une application qui remplit les fonctions décrites ci-dessous)

(ii) les applications utilisateur (par ex, traitement de texte, graphisme, jeux, etc.)

(iii) Utilitaires du système d'exploitation

Qu'entend-on par / inclus dans les fonctions de l'interpréteur de commandes dans la définition ci-dessus de l'interpréteur de commandes ?

(a) Gestion des associations de fichiers - Savoir quel programme ouvre quel fichier - afin de pouvoir dire :

(i) Exemple-1:

  • [sous MacOS] "open abc.txt" OU "ouvrir xyz.jpg" - et le shell utilisera le programme par défaut actuellement associé pour ouvrir abc.txt (TextEdit par défaut sur MacOS) ou pour ouvrir xyz.jpg (en utilisant Preview par défaut sur MacOS).
  • [sous Windows] taper un nom de fichier sur la ligne de commande OU cliquer sur un fichier ouvre le fichier en utilisant le programme associé au fichier.

(ii) Interpréter les raccourcis / alias liés à l'état de l'utilisateur actuel pour effectuer des actions courantes:

Exemples:

  • cd ~ (dans MacOS X ; Linux ; de nombreuses variantes d'unix) - changera le répertoire actuel en répertoire personnel de l'utilisateur actuel.
  • Cliquez sur un raccourci OU un alias sur le bureau - dans Windows / MacOS - le shell interprète où l'alias OU le raccourci pointe - et ouvre le fichier avec le programme par défaut associé OU exécute une application.

Pour en savoir plus sur l'exemple "cd ~" ci-dessus et sa mécanique sous-jacente, voir les différentes réponses à la question :

En programmation, que fait la commande "cd ~" ?

(b) Automatiser les tâches courantes en permettant à l'utilisateur de spécifier des alias / raccourcis / lots OU scripts pour exécuter des groupes de commandes OU ouvrir des fichiers spécifiques.

C'est ce qu'est le "script shell" (dans Unix / Linux / MacOS, etc.) et ce qu'est la "programmation de fichiers batch" sur les systèmes Windows.

Il existe également quelque chose appelé "Windows Power Shell" qui fournit une interface basée sur JavaScript / VBScript aux internes profonds du système d'exploitation Windows et qui est souvent utilisé par les administrateurs de systèmes et d'autres personnes qui ont besoin d'automatiser les tâches administratives et de gestion des systèmes courants.

(c) La gestion de "l'environnement système" - l'état de l'instance actuelle du shell tel qu'il est visible par l'utilisateur actuel :

Si vous avez plusieurs utilisateurs connectés à un système, alors chaque utilisateur peut avoir plusieurs instances du "shell" ouvertes et chaque "shell" peut avoir un répertoire actuel ainsi que le "Path" du système et diverses autres variables d'environnement configurées et peut les modifier à volonté et cet "environnement système" sera transmis aux programmes exécutés à partir de l'instance actuelle du shell par l'utilisateur actuel.

(d) Le shell de l'interface utilisateur graphique (GUI) - dans Windows et MacOS - l'interface utilisateur graphique du système est également un "shell" qui aide l'utilisateur actuel à communiquer avec le noyau du système d'exploitation et à invoquer les utilitaires du système et qui maintient et gère l'"environnement système" de l'utilisateur actuel ainsi que d'autres aspects de l'état actuel du système tels qu'ils sont visibles pour l'utilisateur actuel.

(3) L'histoire / la motivation : Pourquoi les shells d'OS existent-ils ? Pourquoi les internes de l'OS ainsi que le "shell" ne peuvent-ils pas être un seul grand bloc ?

Influence de l'OS Unix et de la philosophie de conception Unix : La plupart des OS - avant la conception, la description et la mise en œuvre de l'OS Unix aux Bell Labs dans les années 1970 - qui a été construit comme un grand bloc monolithique et qui était également restreint à un type particulier d'ordinateur.

Les gens qui ont conçu et mis en œuvre Unix, ont envisagé un OS qui serait modulaire et élégant et qui fonctionnerait sur une variété de systèmes informatiques et d'architectures (ie : être portable)- et ainsi, conçu l'OS pour se composer d'un "noyau", "shell" et "programmes utilitaires". Après le succès d'Unix et plus tard de Linux et sa percolation à travers diverses universités et académies ainsi que dans l'armée américaine et l'Internet naissant - il est devenu un modèle de conception standard dans la conception de systèmes d'exploitation pour abstraire le système d'exploitation en un shell, un noyau et des programmes utilitaires.

L'utilisation du Shell Unix et sa conception du point de vue de l'utilisateur est décrite dans le livre classique surnommé "la Bible" alias "le livre jaune"- le "Unix Programming Environment" par Kernighan et Pike.

main-qimg-d3e3072b541872c041250736987c4d37.webp

Ci-après, une photo de Brian Kernighan et Rob Pik - les gars qui ont écrit le livre ci-dessus et qui faisaient partie du groupe de gars qui ont écrit le livre ci-dessus.

main-qimg-5f40bce761b64d127ecfc7846c8cee7a.webp

Des OS défaillants qui n'ont pas été correctement conçus :

Plus récemment aussi, il y a eu des OS / plateformes qui étaient pour la plupart monolithiques - mais qui ont échoué, y compris (mais sans s'y limiter) :

(1) L'OS original de BlackBerry (avant Blackberry 10) - un jeu qui se bloquait pouvait provoquer un crash de l'OS dans lequel tous les contacts et les fichiers sur l'appareil étaient perdus - parce qu'il n'y avait pas de séparation appropriée entre les différentes parties de l'OS / système.

main-qimg-b8495586936e7233fe408f0f9e4f55b1.webp

(2) La SHP (Samsung Handset Platform) de Samsung et son évolution ultérieure Bada OS - Cet OS a eu la particularité d'inspirer le moins d'intérêt de la part des développeurs et de diminuer continuellement l'intérêt des développeurs - même si les appareils fonctionnant sous BADA étaient leaders sur certains marchés comme la France.

Ayant expédié plusieurs applications sur Bada - je peux personnellement témoigner de la façon dont une boîte d'affichage de chaînes mal programmée pouvait faire planter un téléphone Samsung Wave M !!!

main-qimg-8bcb75f7c2d5a25a3b95536499d020e0.webp

J'espère que cela vous aidera...

Références / lectures complémentaires:

(1) Lire Design of the Unix Operating System - par Maurice J Bach

(2) Lire Unix Programming Environment - par Kernighan et Pike

(3) Articles de Wikipédia sur l'architecture Unix, le design Unix, le noyau et les différents shells.

(4) Article de Wikipédia : Shell Windows

(5) Article Wikipedia : Shell (informatique)

Ne vous gênez pas pour upvoter, commenter, suggérer des améliorations et me demander des précisions... Je suis heureux d'aider !!!

Si vous avez aimé cette réponse, n'hésitez pas non plus à me suivre : Nalin Savara - et de lire et upvoter et partager mes autres réponses également !!!

.