Articulo de referencia

Shell (informática)

Una interfaz gráfica similar a la de finales de los años 80, que incluye una ventana gráfica para una página de manual , una ventana con forma de reloj (oclock) y varias ventana...

Una interfaz gráfica similar a la de finales de los años 80, que incluye una ventana gráfica para una página de manual , una ventana con forma de reloj (oclock) y varias ventanas con iconos . En la parte inferior derecha se puede ver un emulador de terminal que ejecuta un intérprete de comandos Unix , en el que el usuario puede escribir comandos como si estuviera sentado frente a una terminal .

Un shell de sistema operativo es un programa informático que proporciona un acceso relativamente amplio y directo al sistema en el que se ejecuta. El término shell se refiere a que es una capa relativamente delgada alrededor de un sistema operativo. [ 1 ] [ 2 ]

La mayoría de los intérpretes de comandos son programas de interfaz de línea de comandos (CLI). Algunas interfaces gráficas de usuario (GUI) también incluyen intérpretes de comandos.

Descripción general

Los sistemas operativos proporcionan diversos servicios a sus usuarios, entre los que se incluyen la gestión de archivos , la gestión de procesos (ejecución y finalización de aplicaciones ), el procesamiento por lotes y la supervisión y configuración del sistema operativo.

La mayoría de los intérpretes de comandos de los sistemas operativos no son interfaces directas al núcleo subyacente , incluso si un intérprete de comandos se comunica con el usuario a través de dispositivos periféricos conectados directamente al ordenador. Los intérpretes de comandos son, en realidad, aplicaciones especiales que utilizan la API del núcleo del mismo modo que otros programas de aplicación. Un intérprete de comandos gestiona la interacción entre el usuario y el sistema solicitando la entrada del usuario, interpretándola y, a continuación, procesando la salida del sistema operativo subyacente (de forma similar a un bucle de lectura-evaluación-impresión, REPL ). [ 3 ] Dado que el intérprete de comandos del sistema operativo es en realidad una aplicación, puede sustituirse fácilmente por otra aplicación similar en la mayoría de los sistemas operativos.

Además de los shells que se ejecutan en sistemas locales, existen diferentes maneras de hacer que los sistemas remotos estén disponibles para los usuarios locales; estos enfoques se conocen generalmente como acceso remoto o administración remota. Inicialmente disponible en mainframes multiusuario , que proporcionaban interfaces de usuario basadas en texto para cada usuario activo simultáneamente mediante un terminal de texto conectado al mainframe a través de una línea serie o módem , el acceso remoto se ha extendido a sistemas tipo Unix y Microsoft Windows. En sistemas tipo Unix, el protocolo Secure Shell (SSH) se suele utilizar para shells basados ​​en texto, mientras que el túnel SSH se puede utilizar para interfaces gráficas de usuario ( GUI) basadas en el sistema X Window . En Microsoft Windows, el protocolo de escritorio remoto se puede utilizar para proporcionar acceso remoto a GUI, desde Windows Vista , PowerShell Remote , desde Windows 10 compilación 1809. SSH [ 4 ] también se puede utilizar para acceso remoto basado en texto a través de WMI, RPC y WS-Management. [ 5 ]

La mayoría de los intérpretes de comandos de los sistemas operativos se dividen en dos categorías : de línea de comandos y gráficos. Los intérpretes de línea de comandos proporcionan una interfaz de línea de comandos (CLI) al sistema operativo, mientras que los intérpretes gráficos proporcionan una interfaz gráfica de usuario (GUI). Otras posibilidades, aunque menos comunes, incluyen una interfaz de usuario por voz y diversas implementaciones de una interfaz de usuario basada en texto (TUI) que no son CLI, como los sistemas de menús basados ​​en texto. Las ventajas relativas de los intérpretes CLI y GUI son objeto de debate frecuente. Muchos usuarios de computadoras utilizan ambos según la tarea a realizar. 

Historia

Los primeros sistemas interactivos proporcionaban un intérprete de línea de comandos simple como parte del monitor residente . Este intérprete podía recibir diferentes nombres, como COMCONen los sistemas DEC TOPS-10 . [ 6 ] El intérprete ejecutaba uno de varios comandos predefinidos, uno de los cuales consistía en ejecutar un programa de usuario. Los comandos comunes incluían iniciar y cerrar sesión del usuario en el sistema, asignar, liberar y manipular dispositivos y archivos, y consultar diversa información sobre el sistema o un proceso de usuario. [ 7 ]

El propósito de este procedimiento es crear un medio de intercambio en el que se pueda activar cualquier procedimiento, como si se llamara desde el interior de otro programa . En adelante, para simplificar, nos referiremos a este procedimiento como la "SHELL".

Louis Pouzin, The SHELL: Una herramienta global para llamar y encadenar procedimientos en el sistema [ 8 ]

En 1964, para el sistema operativo Multics , Louis Pouzin concibió la idea de "usar comandos de alguna manera como un lenguaje de programación" y acuñó el término shell para describirlo. [ 9 ] En un documento de 1965, el shell se define como "un procedimiento común llamado automáticamente por el supervisor cada vez que un usuario escribe algún mensaje en su consola, en un momento en que no tiene ningún otro proceso en ejecución activa bajo el control de la consola. Este procedimiento actúa como una interfaz entre los mensajes de la consola y la subrutina [en el supervisor]". [ 8 ] Este sistema fue implementado por primera vez por Glenda Schroeder y un hombre anónimo de General Electric . [ 9 ]

Multics también introdujo la función activa , un concepto clave en algunos shells posteriores. Esto se define como

una cadena... que se reemplaza por un valor de retorno de cadena de caracteres antes de que se ejecute la línea de comandos que la contiene. Las funciones activas se utilizan a menudo... para implementar macros del lenguaje de comandos. [ 10 ]

En 1971, Ken Thompson desarrolló el intérprete de comandos Thompson en la primera versión de Unix. Si bien era más simple que el intérprete de comandos Multics, contenía algunas características innovadoras que se han mantenido en los intérpretes de comandos modernos, incluido el uso de < y > para la redirección de entrada y salida .

La interfaz gráfica apareció por primera vez en el sistema NLS de Douglas Engelbart , presentado en diciembre de 1968 en la Conferencia Conjunta de Informática de Otoño en San Francisco, en lo que se ha denominado la "Madre de todas las demostraciones" . Los colegas de Engelbart en el Instituto de Investigación de Stanford llevaron el concepto al Centro de Investigación Xerox Palo Alto (PARC), donde apareció en el Alto , presentado en 1973. A partir de ahí, la idea se extendió al Lilith de Niklaus Wirth en 1980 y al Apple Lisa en 1983, y luego se generalizó.

Intérpretes de línea de comandos

Símbolo del sistema , una interfaz de línea de comandos en Windows
Bash , un intérprete de comandos de Unix ampliamente adoptado.

Una interfaz de línea de comandos (CLI) es un intérprete de comandos del sistema operativo que utiliza caracteres alfanuméricos tecleados en un teclado para proporcionar instrucciones y datos al sistema operativo de forma interactiva. Por ejemplo, un teletipo puede enviar códigos que representan pulsaciones de teclas a un intérprete de comandos que se ejecuta en el ordenador; el intérprete analiza la secuencia de teclas y responde con un mensaje de error si no reconoce la secuencia de caracteres, o puede realizar alguna otra acción del programa, como cargar una aplicación, listar archivos, iniciar sesión de un usuario, entre otras. Los sistemas operativos como UNIX cuentan con una gran variedad de intérpretes de comandos con diferentes comandos, sintaxis y capacidades, siendo el intérprete POSIX la base. Algunos sistemas operativos tenían un único estilo de interfaz de comandos; los sistemas operativos comerciales como MS-DOS incluían una interfaz de comandos estándar ( COMMAND.COM ), pero también solían estar disponibles interfaces de terceros que proporcionaban características o funciones adicionales, como menús o ejecución remota de programas.

Los programas de aplicación también pueden implementar una interfaz de línea de comandos. Por ejemplo, en sistemas tipo Unix, el programa telnet dispone de varios comandos para controlar la conexión con un sistema informático remoto. Dado que los comandos del programa se componen de las mismas teclas que los datos que se envían al ordenador remoto, se requiere algún método para distinguirlos. Se puede definir una secuencia de escape , utilizando una tecla local especial que nunca se transmite, sino que siempre es interpretada por el sistema local. El programa se vuelve modal, alternando entre interpretar los comandos del teclado o transmitir las teclas como datos para su procesamiento.

Una característica común de muchos intérpretes de línea de comandos es la capacidad de guardar secuencias de comandos para su reutilización. Un archivo de datos puede contener secuencias de comandos que el intérprete de línea de comandos puede ejecutar como si las hubiera introducido un usuario. Al ejecutar estas instrucciones almacenadas, pueden aplicarse funciones especiales del intérprete de línea de comandos. Estos archivos por lotes (archivos de script) pueden utilizarse repetidamente para automatizar operaciones rutinarias, como la inicialización de un conjunto de programas al reiniciar el sistema. El uso del modo por lotes en los intérpretes de comandos suele implicar estructuras, condicionales, variables y otros elementos de lenguajes de programación; algunos cuentan con los elementos básicos necesarios para este propósito, mientras que otros son lenguajes de programación muy sofisticados. Por otro lado, algunos lenguajes de programación pueden utilizarse de forma interactiva desde el intérprete de comandos del sistema operativo o en un programa específico.

Varios intérpretes de comandos, como Nushell, Xonsh, Bash (instrumento de Unix) y Z shell , ofrecen autocompletado de comandos , lo que permite al intérprete expandir comandos basándose en unos pocos caracteres introducidos por el usuario. [ 11 ]

Un intérprete de línea de comandos puede ofrecer una función de historial, de modo que el usuario pueda recordar comandos anteriores introducidos en el sistema y repetirlos, posiblemente con alguna modificación. Dado que todos los comandos al sistema operativo debían ser escritos por el usuario, eran comunes los nombres de comando cortos y los sistemas compactos para representar las opciones del programa. A veces, los nombres cortos resultaban difíciles de recordar para el usuario, y los primeros sistemas carecían de los recursos de almacenamiento necesarios para proporcionar una guía de instrucciones detallada en línea.

Estructuras gráficas

Una interfaz gráfica de usuario (GUI) permite manipular programas gráficamente, facilitando operaciones como abrir, cerrar, mover y redimensionar ventanas , así como cambiar el foco entre ellas. Las interfaces gráficas pueden estar integradas en los entornos de escritorio o venir por separado, incluso como un conjunto de utilidades poco integradas.

La mayoría de las interfaces gráficas de usuario desarrollan la metáfora de un "escritorio electrónico" , donde los archivos de datos se representan como si fueran documentos en papel sobre un escritorio, y los programas de aplicación tienen representaciones gráficas similares en lugar de ser invocados mediante nombres de comandos.

Sistemas tipo Unix

Operación de arrastrar y soltar realizada en un grupo de archivos entre KDesktop y Konqueror en KDE.

Los entornos gráficos suelen basarse en un sistema de ventanas . En el caso de X Window System o Wayland , el entorno consta de un gestor de ventanas X o un compositor Wayland , respectivamente, así como de uno o varios programas que proporcionan la funcionalidad para iniciar aplicaciones instaladas, gestionar ventanas abiertas y escritorios virtuales, y a menudo, dar soporte a un motor de widgets. GNOME Shell y KDE Plasma son entornos gráficos para X Window System y Wayland.

En el caso de macOS , Quartz Compositor actúa como el sistema de ventanas, y el shell consta del Finder , [ 12 ] el Dock , [ 12 ] SystemUIServer, [ 12 ] y Mission Control . [ 13 ]

Microsoft Windows

Las versiones modernas del sistema operativo Microsoft Windows utilizan el shell de Windows . El shell de Windows proporciona el entorno de escritorio , el menú de inicio y la barra de tareas , así como una interfaz gráfica de usuario para acceder a las funciones de administración de archivos del sistema operativo. Las versiones anteriores también incluían el Administrador de programas , que era el shell de la serie 3.x de Microsoft Windows y que, de hecho, venía incluido en versiones posteriores de Windows, tanto de la serie 95 como de la serie NT, al menos hasta Windows XP. Las interfaces de las versiones 1 y 2 de Windows eran notablemente diferentes.

Las aplicaciones de escritorio también se consideran interfaces de usuario, siempre que utilicen un motor de terceros. Asimismo, muchos usuarios y desarrolladores insatisfechos con la interfaz del Explorador de Windows han creado software que modifica el funcionamiento y la apariencia de la interfaz o la reemplaza por completo. WindowBlinds de StarDock es un buen ejemplo del primer tipo de aplicación. LiteStep y Emerge Desktop son buenos ejemplos del segundo.

Los programas de interoperabilidad y el software diseñado específicamente permiten a los usuarios de Windows utilizar equivalentes de muchas de las interfaces gráficas de usuario (GUI) basadas en Unix que se describen a continuación, así como de Macintosh. Una versión equivalente del Administrador de presentaciones de OS/2 para la versión 3.0 puede ejecutar algunos programas de OS/2 bajo ciertas condiciones utilizando el subsistema de entorno de OS/2 en versiones de Windows NT.

Invocación desde un programa

Normalmente, también se puede invocar un intérprete de comandos desde dentro de un programa a través de funciones estándar del sistema system(), como popen()y exec()sin que intervenga ninguna interfaz de usuario.

Además de estas funciones estándar, Windows, por ejemplo, proporciona la API de shell de Windows, que expone un conjunto de funciones que los programas pueden usar para interactuar con el shell de Windows. Estas funciones de shell se proporcionan en archivos DLL (como shell32.dll y shlwapi.dll) y no requieren que la interfaz gráfica de usuario (GUI) predeterminada del shell de Windows, es decir, explorer.exe, esté en ejecución. Explorer.exe y sus reemplazos generalmente utilizan la API de shell de Windows para proporcionar a los usuarios una GUI de shell de Windows sin tener que implementar ellos mismos las funcionalidades principales del shell de Windows (que son implementadas y proporcionadas por shell32.dll y shlwapi.dll). Sin embargo, los programas pueden usar la API de shell de Windows para otros fines y sin proporcionar a los usuarios una interfaz de usuario de shell.

Otros usos

El término «shell» también se usa de forma imprecisa para describir el software de aplicación que se «construye alrededor» de un componente específico, como los navegadores web y los clientes de correo electrónico, por analogía con las conchas que se encuentran en la naturaleza. De hecho, el shell (de línea de comandos) encapsula el núcleo del sistema operativo . A estos también se les suele llamar «envoltorios». [ 2 ]

En los sistemas expertos , un shell es una pieza de software que es un sistema experto "vacío" sin la base de conocimiento para ninguna aplicación en particular. [ 14 ]

Véase también

Referencias

  1. "El quinto hombre de Internet" , Escaneo cerebral, The Economist , Londres: Economist Group , 13 de diciembre de 2013. El Sr. Pouzin creó un programa llamado RUNCOM que ayudaba a los usuarios a automatizar comandos tediosos y repetitivos. Ese programa, que describió como una "capa" que envolvía las entrañas del ordenador, inspiró —y dio nombre— a toda una clase de herramientas de software, llamadas shells de línea de comandos, que aún permanecen ocultas en los sistemas operativos modernos.
  2. 1 2 Raymond, Eric S. (ed.). "shell" . The Jargon File .
  3. "Conjuntos de shells del sistema operativo" . Centro de información de AIX 6.1 . IBM Corp. Consultado el 16 de septiembre de 2012 .
  4. teocci. "¿Cómo conectarse por SSH a Windows 10 u 11?" . GitHub Gist . Consultado el 24 de enero de 2025 .
  5. Wheeler, Sean (14 de octubre de 2018). "Ejecución de comandos remotos" . Microsoft Docs . Microsoft . Consultado el 30 de junio de 2019. Puede ejecutar comandos en uno o cientos de equipos con un solo comando de PowerShell. Windows PowerShell admite la computación remota mediante diversas tecnologías, como WMI, RPC y WS-Management.
  6. Digital Equipment Corporation (noviembre de 1980). Componentes internos del monitor TOPS-10 (PDF) . págs. CMND-1 – CMND-16 . Consultado el 29 de marzo de 2022 . 
  7. Digital Equipment Corporation (agosto de 1977). Manual de comandos del sistema operativo DECSystem 10 (PDF) . Consultado el 29 de marzo de 2022 .
  8. 1 2 Poizin, Louis. "The SHELL: Una herramienta global para llamar y encadenar procedimientos en el sistema" (PDF) .
  9. 1 2 Pouzin, Louis. "El origen de la concha" . multicians.org . Consultado el 29 de marzo de 2022 .
  10. Comandos comunes de Multics (PDF) . Honeywell Inc. Febrero de 1983. págs. 1-1 – 1-2 . GB58-00 . Consultado el 30 de diciembre de 2025 . 
  11. Sitio web oficial de Xonsh
  12. 1 2 3 "El ciclo de vida de un demonio" . Apple Inc.
  13. "Reiniciar Mission Control en OS X Lion" . OSXDaily. 23 de noviembre de 2011.
  14. British Computer Society: Glosario de términos de TIC e informática de la BCS . Pearson Education. 2005. pág. 135. ISBN  978-0-13-147957-9.