El shell de Linux es un intérprete de comandos cuya función es servir como interfaz principal entre el sistema operativo y el usuario, de tal forma que puedan interactuar el uno con el otro. Un shell es un programa que toma comandos escritos por el usuario y se los pasa al sistema operativo para que éste se encargue de ejecutarlos. Casi todas las distribuciones de Linux cuentan con un programa shell del GNU Project llamado bash.
En Linux, un shell es tanto un intérprete como un lenguaje de programación. Como intérprete de comandos, el shell proporciona la interfaz, usualmente a través de la Terminal, que permite utilizar el enorme conjunto de utilidades GNU. Como lenguaje de programación, brinda la funcionalidad y directivas necesarias para combinar estas utilidades. Esto quiere decir que, por ejemplo, podemos crear un archivo con una serie de comandos, convertirlo en ejecutable y correrlo como si se tratase de un nuevo programa, tales como los que existen /bin
.
Lo anterior quiere decir que con un shell podemos automatizar comandos y todo tipo de tareas que usemos constantemente, por ejemplo, podemos crear un script (pequeño archivo ejecutable) que automatice nuestra configuración de inicio de usuario cada vez que instalemos un nuevo sistema operativo, esto puede incluir programas y dotfiles de nuestra preferencia. Si desean conocer más sobre lo que se conoce como bash scripting y dotfiles próximamente estaré realizando unas publicaciones con más información acerca de esos temas.
whoami
eltico
Los shells pueden usarse de forma interactiva o no interactiva. En el modo interactivo, aceptan las entradas recibidas por el teclado. Al ejecutarse de forma no interactiva, los shells ejecutan comandos leídos desde un archivo, que también se conoce como guíon o script. En la imagen de arriba, abrimos una terminal y ejecutamos el comando whoami
(quién soy) para averiguar cual usuario está usando la computadora, en mi caso el usuario es eltico. Esta ejecución es de modo interactiva.
¿Qué es una «Terminal»?
Es un programa llamado emulador de terminal, el cual es un programa que abre una ventana y le permite al usuario interactuar con el shell. Existen muchas variantes para emuladores de terminal que vienen en las diferentes distribuciones de Linux, tales como: konsole de KDE, gnome-terminal de GNOME, LXTerminal de LXDE, xterm, eterm, rxvt, Terminator, Tilda y alacritty.
Ahora que entendemos las partes que componen lo que llamamos como interfaz de línea de comandos, procederemos a abrir nuestra terminal favorita y escribimos los siguientes comandos:
cat /etc/shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/bin/zsh
/usr/bin/zsh
echo $0
zsh
El primer comando cat /etc/shells
nos permite ver todas las shells disponibles en nuestro sistema. Las 4 primeras vienen instaladas por defecto en las últimas distribuciones basadas en Debian. El segundo comando echo $0
nos permite conocer cuál shell estamos usando actualmente, en mi caso zsh.
¿Cómo cambiar de shell?
Muy sencillo, sólo debemos ejecutar este comando en nuestra terminal favorita:
chsh -s /bin/zsh
Este comando tendrá listo el cambio de shell para la próxima vez que el usuario inicie sesión. En este caso /bin/zsh corresponde al ejecutable del shell o intérprete que queremos usar, en nuestro caso zsh. Actualmente los shells más utilizados son: bash, que viene instalado por defecto en la mayoría de distribuciones GNU/Linux, zsh, conocido por las extensivas configuraciones que permite crear y fish, un shell nuevo que ha tomado mucha fuerza en estos últimos años principalmente debido a su facilidad de uso, sin embargo, una desventaja es que no cumple con el estándar POSIX, por lo que muchos de sus comandos no son compatibles con los de otros shells.
Dentro de esta terminal, podemos continuar escribiendo los comandos que queramos y sabremos que están siendo ejecutados por el intérprete que hayamos establecido mediante chsh o bien por el intérprete predeterminado de nuestra distribución.
Algunos de los comandos más utilizados son:
- cd: cambiar de directorio
- ls: listar directorios
- find: encontrar directorios y archivos
- apt: instalar, actualizar y desinstalar paqutes
- ssh: conectarse a otras computadoras locales o externas
- adduser: agregar nuevos usuarios
Amigos, próximamente estaré publicando una lista de los 20 comandos más utilizados por usarios aprendices, intermedios y avanzados. Estén atentos!
Además, estaré subiendo una lista de los 3 shells más populares actualmente en el mundo de Linux y las razones por las que son preferidos. Hasta la próxima, developers!