Página principal » cómo » ¿Cuál es la diferencia entre Bash, Zsh y otros shells de Linux?

    ¿Cuál es la diferencia entre Bash, Zsh y otros shells de Linux?

    La mayoría de las distribuciones de Linux incluyen el shell bash de forma predeterminada, pero también puede cambiar a otro entorno de shell. Zsh es una alternativa particularmente popular, y hay otras conchas, como ceniza, tablero, pescado y tcsh. Pero ¿cuál es la diferencia, y por qué hay tantos?

    ¿Qué hacen las conchas??

    Cuando inicia sesión en la línea de comandos o inicia una ventana de terminal en Linux, el sistema inicia el programa shell. Los depósitos ofrecen una forma estándar de extender el entorno de línea de comandos. Puede cambiar el shell predeterminado por otro, si lo desea.

    El primer entorno de shell fue Thompson Shell, desarrollado en Bell Labs y lanzado en 1971. Los entornos de Shell se han basado en el concepto desde entonces, agregando una variedad de nuevas características, funcionalidades y mejoras de velocidad..

    Por ejemplo, Bash ofrece funciones para completar el comando y el nombre del archivo, funciones avanzadas de scripting, un historial de comandos, colores configurables, alias de comandos y una variedad de otras funciones que no estaban disponibles en 1971 cuando se lanzó el primer shell.

    El shell también se utiliza en segundo plano por varios servicios del sistema. Las distribuciones de Linux incluyen muchas funciones escritas como shell scripts. Estos scripts son comandos y otras funciones avanzadas de shell shell se ejecutan en el entorno de shell..

    Conchas que conducen a Bash: sh, csh, tsh y ksh

    El progenitor más prominente de las conchas modernas es la concha de Bourne, también conocida como "sh", que recibió su nombre por su creador Stephen Bourne, quien trabajó en los Laboratorios Bell de AT&T. Lanzado en 1979, se convirtió en el intérprete de comandos predeterminado en Unix debido a su soporte para la sustitución de comandos, tuberías, variables, pruebas de condición y bucles, junto con otras características. No ofrecía mucha personalización para los usuarios, y no admitía detalles modernos como los alias, la finalización de comandos y las funciones de shell (aunque esta última finalmente se agregó).

    El shell C, o "csh", fue desarrollado a fines de la década de 1970 por Bill Joy en la Universidad de California, Berkley. Agregó una gran cantidad de elementos interactivos con los que los usuarios podrían controlar sus sistemas, como los alias (atajos para comandos largos), habilidades de administración de trabajos, historial de comandos y más. Fue modelado a partir del lenguaje de programación C, en el que estaba escrito el propio sistema operativo Unix. Esto también significaba que los usuarios del shell Bourne tenían que aprender C para poder ingresar comandos. Además, csh tenía bastantes errores que los usuarios y creadores tuvieron que solucionar por igual durante un largo período de tiempo. La gente terminó usando el shell Bourne para los scripts porque manejaba mejor los comandos no interactivos, pero se quedaba con el shell C para un uso normal..

    Con el tiempo, muchas personas corrigieron errores y agregaron funciones al shell C, que culminaron en una versión mejorada de csh conocida como "tcsh". Pero csh seguía siendo el predeterminado en las computadoras basadas en Unix, y había agregado algunas características no estándar. David Korn de Bell Labs trabajó en KornShell, o "ksh", que intentó mejorar la situación al ser compatible con el lenguaje de la shell Bourne pero agregando muchas características desde la shell csh. Fue lanzado en 1983, pero bajo una licencia propietaria. No fue software libre hasta la década de 2000, cuando se lanzó bajo varias licencias de código abierto.

    El nacimiento de bash

    La interfaz del sistema operativo portátil para Unix, o POSIX, fue otra respuesta a las agitadas implementaciones csh propietarias. Creó con éxito un estándar para la interpretación de comandos (entre otras cosas) y, finalmente, reflejó muchas de las características en KornShell. Al mismo tiempo, el Proyecto GNU intentaba crear un sistema operativo gratuito compatible con Unix. El Proyecto GNU desarrolló un shell de software libre para ser parte de su sistema operativo libre y lo llamó "Bourne Again Shell", o "bash".

    Bash ha mejorado en las décadas desde su primer lanzamiento en 1989, pero sigue siendo el shell predeterminado en la mayoría de las distribuciones de Linux en la actualidad. También es el shell predeterminado en macOS de Apple y está disponible para su instalación en Windows 10 de Microsoft.

    Cáscaras más nuevas: ceniza, tablero, zsh y pescado

    Si bien la comunidad de Linux se ha basado en Bash en los años posteriores, los desarrolladores no dejaron de crear nuevos shells cuando se lanzó por primera vez hace 28 años..

    Kenneth Almquist creó un clon de shell Bourne conocido como Almquish shell, A Shell, "ash" o, a veces, simplemente "sh". también era compatible con POSIX y se convirtió en el shell predeterminado en BSD, una rama diferente de Unix. La cáscara de la ceniza es más liviana que el bash, lo que la hace popular en los sistemas Linux integrados. Si tiene un teléfono Android arraigado con BusyBox instalado, o cualquier otro dispositivo con el paquete de software BusyBox, está usando el código de ceniza.

    Debian desarrolló un entorno de shell basado en ash y lo llamó "dash". Está diseñado para ser compatible con POSIX y ligero, por lo que es más rápido que Bash, pero no tendrá todas sus características. Ubuntu usa el shell del tablero como su shell predeterminado para las tareas no interactivas, acelerando los scripts de shell y otras tareas que se ejecutan en segundo plano. Sin embargo, Ubuntu todavía usa bash para shells interactivos, por lo que los usuarios aún tienen el entorno interactivo con todas las funciones.

    Una de las carcasas nuevas más populares es la concha Z o "zsh". Creada por Paul Falstad en 1990, zsh es un shell de estilo Bourne que contiene las características que encontrarás en bash, y aún más. Por ejemplo, zsh tiene corrector ortográfico, la capacidad de vigilar inicios de sesión / desconexiones, algunas funciones de programación incorporadas como bytecode, soporte para notación científica en sintaxis, permite aritmética de punto flotante y más funciones.

    Otro shell más reciente es el Friendly Interactive Shell, o "fish", lanzado en 2005. Tiene una sintaxis de línea de comandos única que está diseñada para ser un poco más fácil de aprender, pero no se deriva del shell Bourne o C shell. Es una idea interesante, pero lo que aprendas a través del uso de peces no necesariamente te ayudará a usar bash y otras conchas derivadas de Bourne.

    ¿Cuál debería elegir? (y por qué Zsh es popular)

    No necesitas elegir una concha. Su sistema operativo elige su shell predeterminado para usted, y esa elección casi siempre es bash. Siéntese frente a una distribución de Linux, o incluso una Mac, y casi siempre tendrá un entorno de shell bash. Bash tiene algunas características avanzadas, pero probablemente no las use a menos que programe scripts de shell.

    En sistemas Linux incrustados o sistemas BSD, terminarás con el shell ash. Pero ash es un shell basado en Bourne y es en gran parte compatible con bash. Cualquier conocimiento que tenga sobre el uso de bash se transferirá al uso de un shell ash o dash, aunque algunas funciones avanzadas de scripting no están disponibles en este shell ligero.

    Casi todos los shell que encontrarás están basados ​​en Bourne y funcionan de forma similar, incluyendo zsh.

    Es por eso que zsh es popular. Este nuevo shell es compatible con bash, pero incluye más características. El shell zsh ofrece corrección de ortografía incorporada, finalización mejorada de la línea de comandos, módulos cargables que actúan como complementos para su shell, alias globales que le permiten alias nombres de archivos o cualquier otra cosa en la línea de comandos en lugar de solo comandos, y más apoyo temático. Es como bash, pero con muchos extras, funciones adicionales y opciones configurables que podría apreciar si pasa mucho tiempo en la línea de comandos..

    Si está familiarizado con bash, puede cambiar a zsh sin aprender una sintaxis diferente, solo obtendrá funciones adicionales. Si está familiarizado con zsh, puede cambiar a bash sin aprender una sintaxis diferente, simplemente no tendrá acceso a esas funciones..

    “Oh My ZSH” es una herramienta que te ayuda a habilitar más fácilmente los complementos de zsh y cambiar entre temas prefabricados, personalizando rápidamente tu shell de zsh sin pasar horas ajustando las cosas..

    También hay otras conchas. Por ejemplo, el shell tcsh sigue existiendo y sigue siendo una opción. FreeBSD usa tsch como su shell raíz predeterminado y ash como su shell interactivo predeterminado. Si usa la programación en C regularmente, tsch podría ser un mejor ajuste para usted. Sin embargo, no es tan común como bash o zsh.

    Cómo cambiar entre conchas

    Es fácil cambiar a un nuevo shell para probarlo. Simplemente instale el shell desde el administrador de paquetes de su distribución de Linux y escriba el comando para iniciar el shell.

    Por ejemplo, digamos que quieres probar zsh en Ubuntu. Ejecutarías los siguientes comandos para instalarlos y luego lanzarlos:

    sudo apt instalar zsh zsh

    Entonces estarías sentado en una concha de zsh. Tipo " salida ”En el shell para dejarlo y volver a su shell actual.

    Esto es sólo temporal. Cada vez que abra una nueva ventana de terminal o inicie sesión en su sistema en la línea de comandos, verá su shell predeterminado. Para cambiar el shell que ve cuando inicia sesión en conocido como su shell de inicio de sesión, generalmente puede usar el chsh , o "Cambiar Shell", comando.

    Para usar este comando, primero deberá encontrar la ruta completa a su shell con el comando which. Por ejemplo, digamos que queremos cambiar a la shell zsh. Ejecutaríamos el siguiente comando:

    cual zsh

    En Ubuntu, esto nos dice que el binario zsh está almacenado en / usr / bin / zsh.

    Ejecute el siguiente comando, ingrese su contraseña y se le pedirá que elija un nuevo shell de inicio de sesión:

    chsh

    De acuerdo con el comando anterior, entraríamos / usr / bin / zsh . El shell zsh sería nuestro defecto hasta que ejecutáramos el chsh comando y lo cambió de nuevo.