Esta es una gran pregunta - que tiene múltiples respuestas en múltiples niveles - y meditando sobre la cual, uno puede realmente "grok" mucho sobre los sistemas informáticos y la arquitectura del SO (Sistema Operativo) - mientras que las otras respuestas han tratado de decir "concisamente" lo que es un shell- no han profundizado mucho en los significados O "¿Qué significa la palabra shell en la programación?" Así que aquí va...
(0) Qué aspecto tiene un shell: (¡ya que una imagen vale más que mil palabras!)
(i) Terminal de MacOS / shell bash (bash en sí es una forma corta de "Bourne Again Shell")
(ii) Símbolo del sistema de Windows
(1) Significados literales
Primero, en el idioma inglés, qué es un caparazón - "A shell is the outer part - could be a tortoise shell OR a peanut shell OR a coconut shell."
Y en inglés, ¿qué hay dentro de un caparazón? El núcleo - que se define (en inglés, no sólo en CS o programación) como "lo que está dentro de una cáscara."
Imagen de abajo - la cáscara y el núcleo de una nuez de avellana.
(2) La perspectiva de las Ciencias de la Computación (CS) / Sistema Operativo (OS):
Ahora, en CS/Programación, hay algo que se llama "Sistema Operativo" (OS) que es el conjunto de programas necesarios para que un ordenador funcione, antes de que pueda hacer cosas interesantes como el procesamiento de textos, navegar por Internet, jugar, etc.
El sistema operativo tiene 3 partes:
(A) El Kernel - Este es el núcleo de un sistema operativo moderno - que realiza tareas como las funciones de red, la gestión de la energía del hardware, la gestión de dispositivos y también la programación de tareas entre múltiples programas concurrentes, etc.
(B) Programas de Utilidad - Estos son los programas que ayudan a realizar tareas de utilidad comúnmente necesarias - como la gestión de discos (particionamiento, desfragmentación, formateo, etc.), procesamiento de textos básicos (utilizando el Bloc de notas en Windows o Text Edit en MacOS), gestión de usuarios (es decir, cambiar la contraseña, añadir un usuario), etc.
(C) El Shell (¡ajá!) - El shell aquí es la interfaz - ya sea de línea de comandos / basada en la consola o la interfaz gráfica de usuario, a través de la cual el usuario y los programas de usuario interactúan con el sistema operativo - y que hace un montón de tareas, incluyendo el seguimiento del estado actual del sistema visto por el usuario actual.
En el diagrama anterior, las "Aplicaciones" incluirían:
(i) el shell (ya que el shell también es una aplicación que realiza las funciones como se describe a continuación)
(ii) las aplicaciones de usuario (por ejemplo, procesador de textos, gráficos, juegos, etc.)
(iii) Utilidades del sistema operativo
¿Qué se entiende por / incluido en las funciones del shell en la definición anterior del shell?
(a) Gestionar las asociaciones de archivos - Saber qué programa abre qué archivo - para poder decir:
(i) Ejemplo-1:
- [en MacOS] "abrir abc.txt" O "abrir xyz.jpg" - y el intérprete de comandos utilizará el programa por defecto actualmente asociado para abrir abc.txt (TextEdit por defecto en MacOS) o para abrir xyz.jpg (utilizando Vista Previa por defecto en MacOS).
- [en Windows] escribiendo un nombre de archivo en la línea de comandos O haciendo clic en un archivo abre el archivo utilizando el programa asociado al archivo.
(ii) Interpretar atajos / alias relacionados con el estado del usuario actual para realizar acciones comunes:
Ejemplos:
- cd ~ (en MacOS X; Linux; muchas variantes de unix) - cambiará el directorio actual al directorio de inicio del usuario actual.
- Haga clic en un acceso directo o en un alias en el escritorio - en Windows / MacOS - el shell interpreta a dónde apunta el alias o el acceso directo - y abre el archivo con el programa predeterminado asociado O ejecuta una aplicación.
Para más información sobre el ejemplo "cd ~" anterior y su mecánica subyacente, vea varias respuestas a la pregunta:
En programación, ¿qué hace el comando "cd ~"?
(b) Automatizar tareas comunes permitiendo al usuario especificar alias / accesos directos / lotes O scripts para ejecutar grupos de comandos O abrir archivos específicos.
De esto se trata el "shell scripting" (en Unix / Linux / MacOS etc) y de la "programación de archivos por lotes" en los sistemas Windows.
También existe algo llamado "Windows Power Shell" que proporciona una interfaz basada en JavaScript / VBScript a las profundidades internas del sistema operativo Windows y que a menudo es utilizado por los administradores de sistemas y otras personas que necesitan automatizar tareas administrativas y de gestión de sistemas comunes.
(c) Gestionar el "entorno del sistema" - el estado de la instancia actual de la shell como visible para el usuario actual:
Así, si tiene varios usuarios conectados a un sistema, entonces cada usuario puede tener varias instancias de la "shell" abiertas y cada "shell" puede tener un directorio actual, así como la "Ruta" del sistema y varias otras variables de entorno configuradas y puede cambiarlas a voluntad y este "entorno del sistema" se pasará a los programas ejecutados desde la instancia actual de la shell por el usuario actual.
(d) La interfaz gráfica de usuario (GUI) Shell - tanto en Windows como en MacOS - la GUI del sistema es también una "shell" que ayuda al usuario actual a comunicarse con el núcleo del sistema operativo y a invocar las utilidades del sistema y que mantiene y gestiona el "entorno del sistema" del usuario actual, así como otros aspectos del estado del sistema actual visibles para el usuario actual.
(3) La Historia / Motivación: ¿Por qué existen los OS Shells? ¿Por qué las partes internas del SO así como el "shell" no pueden ser un gran bloque?
Influencia del SO Unix y la filosofía de diseño de Unix: La mayoría de los sistemas operativos - antes de que el sistema operativo Unix fuera concebido, descrito e implementado en los Laboratorios Bell en la década de 1970 - que se construyó como un gran bloque monolítico y que también se limitó a un tipo particular de ordenador.
La gente que diseñó e implementó Unix, imaginó un sistema operativo que sería modular y elegante y que se ejecutaría en una variedad de sistemas informáticos y arquitecturas (es decir: ser portátil) - y por lo tanto, diseñó el sistema operativo para consistir en un "núcleo", "shell" y "programas de utilidad". Tras el éxito de Unix y más tarde de Linux y su difusión en varias universidades y centros académicos, así como en el ejército de los EE.UU. y en la incipiente Internet, se convirtió en un patrón de diseño estándar en el diseño de sistemas operativos para abstraer el sistema operativo en un shell, un kernel y programas de utilidad.
El uso del Shell de Unix y su diseño desde la perspectiva del usuario se describe en el libro clásico apodado "la Biblia", también conocido como "el libro amarillo" - el "Entorno de Programación de Unix" por Kernighan y Pike.
Abajo, una foto de Brian Kernighan y Rob Pik - los tipos que escribieron el libro anterior y que estaban entre el grupo de tipos que escribieron el libro anterior.
Sistemas operativos fallidos que no fueron diseñados adecuadamente:
Más recientemente también, ha habido sistemas operativos/plataformas que eran en su mayoría monolíticos - pero que fallaron incluyendo (pero no limitado a):
(1) El sistema operativo original de BlackBerry (antes de Blackberry 10) - un juego que se atasca podría causar un fallo del sistema operativo en el que todos los contactos y archivos en el dispositivo se perderían - porque no había una separación adecuada entre las diferentes partes del sistema operativo/sistema.¡
(2) SHP de Samsung (Samsung Handset Platform) y su posterior evolución Bada OS - Este sistema operativo tuvo la distinción de inspirar el menor interés de los desarrolladores y la disminución continua del interés de los desarrolladores - a pesar de que los dispositivos que ejecutaban BADA eran líderes del mercado en ciertos mercados como Francia.
Habiendo enviado múltiples aplicaciones en Bada - puedo dar testimonio personalmente de cómo una caja de visualización de cadena mal programada podría bloquear un teléfono Samsung Wave M!
Espero que esto ayude...
Referencias / lecturas adicionales:
(1) Leer Diseño del Sistema Operativo Unix - por Maurice J Bach
(2) Leer Entorno de Programación Unix - por Kernighan y Pike
(3) Artículos de Wikipedia sobre la Arquitectura de Unix, el Diseño de Unix, el Kernel y varios shells.
(4) Artículo de Wikipedia: Shell de Windows
(5) Artículo de Wikipedia: Shell (informática)
No dudes en upvote, comentar, sugerir mejoras y pedirme aclaraciones... ¡¡¡Estoy encantado de ayudar!!!
Si te ha gustado esta respuesta, no dudes también en seguirme: Nalin Savara - y leer y upvote y compartir mis otras respuestas también!!!