Algoritmos y Estructuras de Datos Herramientas Lenguaje de programación
!Prog C/C++ Rust
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Sistemas Operativos

Shell, Bash y Bashrc

[date: 31-08-2022 00:00] [last modification: 24-06-2023 12:56]
[words: 1535] [reading time: 8min] [size: 49194 bytes]

Guia breve sobre Bash, diferencias con Shell, terminal, consola y prompt.

Shell y Bash

Una shell un tipo de software que provee de una interfaz para los usuarios de un sistema operativo para que estos puedan interactuar con el kernel y sus servicios. Puedes imaginarlo como una capa (concha) alrededor del kernel y sus servicios

También existen shells para diversos lenguajes de programación, por ejemplo, ejecuta python sin ningún argumento (sal con exit()).

En la práctica, la shell es un intérprete que ejecuta los comandos que el usuario le dé.

La shell estándar que casi todos sistemas Linux modernos utilizan es Bourne Again Shell (bash), que es derivada de Bourne Shell (sh), la primera que apareció en Unix. Otras alternativas populares son ZSH y Fish. Y en Windows se usa Powershell.

Fuente: StackOverflow Shell vs Console vs Terminal

Terminal

Una terminal es el programa que ejecuta una shell, lee el input del usuario y se lo pasa a esta última para que pueda ser procesado, además de presentar el resultado.

Hace décadas, consistía en varios dispositivos físicos, y a medida que los sistemas Unix/Linux fueron mejorarado, estos se abstrayeron a software. Por lo tanto estos también se pueden llamar emuladores de terminal y pseudo-terminales.

Para dejarlo más claro, algunos ejemplos son Windows Terminal o Alacritty.

Consola

Esta es un tipo de terminal. Históricamente la consola era un monitor y un teclado conectados a un puerto dedicado para tener comunicación directa y de bajo nivel con el Sistema Operativo. Los sistemas Linux actuales ofrecen consolas virtuales, a las que puedes acceder con Alt + F1 o Alt + Ctrl + F1, siendo cada tecla de función una consola distinta.

Prompt

Un command prompt es un campo de entrada para comandos del usuario, y en bash suele tener este aspecto (aunque es personalizable):

1<username>@<hostname>:~$

El ~ representa el directorio actual, así que si haces cd blog/content/linux/ por ejemplo, cambiará a:

1<username>@<hostname>:~/blog/content/linux$

Y en caso de ser root:

1root@<hostname>:~/blog/content/linux#

Archivos que ejecuta Bash

Consulta este maravilloso post.

Bash diferencia entre varias posibilidades cuando una instancia suya es creada. Se distingue entre:

Este último se puede comprobar con echo $0, si devuelve -bash será login, y bash si es non-login.

Diagrama de ejecución de archivos de bash

Bash funciona de la siguiente forma. Lee las columnas hacia abajo. Primero ejecuta A, luego B, entonces C, etc. B1, B2, B3 signfica que solo ejecuta el primero de los que encuentre.

~~~~B~ee////A/tt....S.ccbbbpHb//aaar_apbsssoEsrahhhfNhosr__iV_fhcpllli.roeolboggeafiosinuhltrecIlnotgeiABBBrn123CactiveInnotne-rlABaocgtiinveScrAipt

Por lo que se puede concluir con:

Se puede evitar la ejecución de todos estos scripts con el argumento --noprofile.

Al cerrar sesión (con exit) se ejecuta ~/.bash_logout.

Fuente: GNU Manual y el Manual sobre bash. Más información en esta respuesta de StackOverflow.

Bash config

Como ya he mencionado antes, la configuración de Bash se puede almacenar en el archivo ~/.bashrc, que está oculto por defecto.

Para recargar dicha configuración, puedes simplemente volver a ejecutar el script:

1. ~/.bashrc
2# o bien
3source ~/.bashrc

Bash Prompt

El prompt se controla usando variables de Bash:

1PS3="Enter a number: "
2
3select character in Sheldon Leonard Penny Howard Raj
4do
5    echo "Selected character: $character"
6    echo "Selected number: $REPLY"
7done

Modificando la variable PS1, podrás modificar tu prompt.






Colores (uso \e[<colornum>m...\e[m):

FondoLetra
Negro4030
Rojo4131
Verde4232
Amarillo4333
Azul4434
Violeta4535
Cian4636
Blanco4737

Ejemplo:

1export PS1="\e[46m\u@\h:\w\e[m\$ " # en cian: <usuario>@<hostname>:~$

Alias

Un alias es tal y como suena, darle un nickname a un comando que utilizas mucho, como por ejemplo ls -lh.

1# sintáxis: alias <aliasname>="<comando>"
2alias ll="ls -lh"

Otros alias comunes son:

1alias   ..="cd .."
2alias  ...="cd ../.."
3alias ....="cd ../../.."
4alias   .4="cd ../../../.."
5alias   .5="cd ../../../../.."
6
7alias la="ls -lah"
8alias rm="rm -i"    # Pide confirmación antes de borrar
9alias cp="cp -i"    # Pide confirmación antes de sobreescribir

Recuerda que también es posible añadir estos alias a su propio archivo: ~/.bash_aliases.

Nota: Si se te lía, puedes usar unalias -a para eliminar todos los alias

Shopt

El comando shopt puede usarse para cambiar cualquiera de está opciones con el parámetro -s:

Puedes listar todas las opciones con shopt -p, y las actualmente configuradas con shopt -s.

Más información: ComputerHope

Bind

También es posible cambiar los atajos de teclado, gracias al comando bind. Puedes encontrar más información en Computer Hope.

Path

También es común modificar la variable PATH en esta configuración, y poder ejecutar programas de directorios personalizados:

1export PATH=$PATH:<new/path>

Nota: Ojo con modificar esta variable, ya que podrías eliminar todo el contenido y no podrías ejecutar nada.

Colores de ls

Puedes cambiar los colores de salida del comando ls editando la variable LS_COLORS. Le puedes asignar a cada posible elemento (directorio, archivo, enlace, etc) el color que quieras con esta clave:


Ejemplo:

1LS_COLORS=$LS_COLORS:'di=0;35:' # Concatena el valor al resto de la variable
2export LS_COLORS

Atajos de teclado estándar para terminal

Por defecto usa los atajos de Emacs:




Anterior: Cuando Linux crashea Volver a Linux Siguiente: Archivos de link