Configurar, Usar, Personalizar Bash
Table of contents
Características del BASH Shell
Este documento es en el contexto del Sistema Operativo UBUNTU a menos que se aclare de otra manera.
En su forma nativa y sin requerir ningun cambio, Bash ofrece lo necesario para empezar a trabajar immediatamente cuando entramos al sistems.
Entre otras características Bash ofrece lo siguiente:
- la abilidad de entrar comandos y ver el resultado
- functiones para agrupar comandos para tareas complejas
- combinar comandos directamete en la linea de comandos para alterar el resultado
- parámetros para guardar valores que pueden ser usados en el entorno o programas
- carácters especiales para expandir el rango de accíon de los comandos
Primicias del BASH Shell
Para usar BASH solo entramos comandos y vemos el resultado.
En esta ejemplo, usamos el comando ping
para probar el paso de red a nuestro sitio externo de internet docs.devesp.com
.
devuser@ubuntu2204-1-devesp
~/linux-devesp
hist:208 -> ping -c 1 docs.devesp.com
PING devesplab.github.io (185.199.108.153) 56(84) bytes of data.
64 bytes from cdn-185-199-108-153.github.com (185.199.108.153): icmp_seq=1 ttl=62 time=31.0 ms
--- devesplab.github.io ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 31.012/31.012/31.012/0.000 ms
Usando Aliases en BASH
Bash posee la característca que ofrece el uso de aliases. El propósito es crear nombres familiares y cortos para agrupar comandos repetitivos y talvez largos; en lugar de teclear un comando largo, solo usamos el alias. Podemos crear aliases que combinan banderas para obtener mejores resultados.
Por ejemplo, aqui creamos el alias ll
equivalente a ls --color -l
.
devuser@ubuntu2204-1-devesp
~/linux-devesp
hist:210 -> cat ~/.aliasrc
alias ls='ls --color -C1F'
alias ll='ls --color -l'
alias la='ls --color -la'
alias ld='ls --color -1F'
Ahora podemos usar ll
en lugar de ls --color -l
y obtener una lista larga de archivos.
devuser@ubuntu2204-1-devesp
~/linux-devesp
hist:211 -> ll
total 56
-rw-rw-r-- 1 devuser devuser 35149 May 19 02:22 LICENSE
-rw-rw-r-- 1 devuser devuser 693 May 19 02:22 README.md
drwxrwxr-x 3 devuser devuser 4096 May 19 02:22 linux-docs/
drwxrwxr-x 6 devuser devuser 4096 May 19 02:22 linux-files/
drwxrwxr-x 3 devuser devuser 4096 May 19 02:22 linux-labs/
drwxrwxr-x 2 devuser devuser 4096 May 25 22:45 linux-scripts/
Corriendo Programas en BASH
El Bash shell permite crear, ver y ejecutar programas.
En este ejemplo hacemos lo siguiente:
- usamos el comando
cat
para mostrar el contenido del programagreeting.sh
- usamos el comand
ls
que muestra el permiso de ejecutar del programa - corremos el programa que crea un archivo de registro
- usamos el comando
cat
para mostrar el contenido del archivo de registro
Fri 2024Jun21 03:29:23 UTC
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:209 -> cat greeting.sh
#!/bin/bash
#
# Di hola y muestra la fecha
#
DATE=`date +"%m/%d/%y"`
LOG=greeting.log
[ -f ${LOG} ] || echo "INFO: creando ${LOG} porque no existe" && touch ${LOG}
function greeting(){
echo "Hola, Mundo! Hoy es ${DATE}" > ${LOG}
}
greeting
Corramos el programa
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:210 -> ls -l greeting.sh
-rwxrwxr-x 1 devuser devuser 246 May 19 02:22 greeting.sh*
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:211 -> ./greeting.sh
INFO: creando greeting.log porque no existe
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:212 -> ./greeting.sh
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:213 -> cat greeting.log
Hola, Mundo! Hoy es 06/21/24
Exportando Variables de Entorno en BASH
El Bash Shell provee varias variables en el ambiente del usuario. Estas pueden verse con el comando env
.
devuser@ubuntu2204-1-devesp
~
hist:213 -> env
SHELL=/bin/bash
PWD=/home/devuser
LOGNAME=devuser
XDG_SESSION_TYPE=tty
HOME=/home/devuser
XDG_SESSION_CLASS=user
TERM=xterm
USER=devuser
SHLVL=1
XDG_SESSION_ID=c1
XDG_RUNTIME_DIR=/run/user/2045
PATH=/home/devuser/bin:/home/devuser/Library/Python/3.9/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
MYSITE=DevEsp
MAIL=/var/mail/devuser
OLDPWD=/home/devuser/linux-devesp/linux-scripts
_=/usr/bin/env
Podemos crear y usar variables de ambiente que demuestra los aspectos dinámicos y versátiles del Shell.
En este ejemplo exportamos la variable MYSITE
asignandole un valor, y luego la usamos en un comando.
devuser@ubuntu2204-1-devesp
~/linux-devesp
hist:208 -> export MYSITE=DevEsp
devuser@ubuntu2204-1-devesp
~/linux-devesp
hist:209 -> echo ${MYSITE} is for learning
DevEsp is for learning
Archivos Especiales de BASH
Generalmente, en un sistema de Ubuntu o RedHat se ven los archivos escondidos de la lista que sigue.
devuser@ubuntu2204-1-devesp
~
hist:210 -> la
total 88
drwxr-xr-x 1 devuser devuser 4096 Jun 9 00:01 ./
drwxr-xr-x 1 root root 4096 May 18 22:55 ../
-rw-r--r-- 1 devuser devuser 2935 Jul 15 2023 .aliasrc
-rw------- 1 devuser devuser 2922 May 28 00:56 .bash_history
-rw-r--r-- 1 devuser devuser 149 Jul 15 2023 .bash_profile
-rw-r--r-- 1 devuser devuser 647 May 26 00:23 .bashrc
-rw------- 1 devuser devuser 20 Jun 9 00:01 .lesshst
-rw-r--r-- 1 devuser devuser 35 Jul 15 2023 .profile
Bash usa esos archivos para diferentes actividades.
- .aliasrc
- archivo que el usuario crea para crear combinanciones de comandos
- .bash_history
- archivo preexistence que BASH usa para registrar las actividades del usuario en la linea de comandos
- .bash_profile
- archivo de personalizacion inicial cuando el usuario entra al sistema
- .bashrc
- archivo estándard de inicialización del usuario
- .lesshst
- archivo usado para registar el uso del comando
less
por el usuario - .profile
- originalmente usado por SH que esta presente solo por razones históricas pero también puede ser usado por BASH
Archivos de Inicialización de BASH
Hablemos de dos archivos en particular que el usuario puede cambiar para personalizar su ambiente: .bashrc
y ~/.bash_profile
.
Ejemplo de .bashrc
mostrando la inicialización estandard a nivel de usuario.
En este archivo el usuario puede poner ajustes especificos a su gusto.
Un ejemplo puede ser:
- agregar aliass del archivo
.aliasrc
- declarar personalizaciones para manejo de historia de comandos
- modificar la variable de ambiete
PS1
para el indicador en la terminal - usar el comando
export
para agregar pasos a carpetas que continenen untilidadesdevuser@ubuntu2204-1-devesp ~ hist:211 -> cat ~/.bashrc source ~/.aliasrc HISTCONTROL='ignoreboth:erasedups' PS1='-->' export PATH=$HOME/bin:$HOME/Library/Python/3.9/bin:$HOME/mycode:$PATH
Ejemplo de .bash_profile
mostrando la inicialización estandard a nivel de sistema. Nótese que incluye una instrucción para cargar el contenido de ` ~/.bashrc` si existe.
devuser@ubuntu2204-1-devesp
~
hist:210 -> cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
Expansión en BASH
En bash existen ciertas facilidades que permiten el manejo inteligente de ciertas tareas.
Los tipos de expaciones so a seguir:
- expansión de corsé
- expansión de tilde
- expansión de parámetros y variables
- sustitución de comando
- expansión aritmética
- división de palabras
- expansión de nombre de archivo
Discutiremos expansión en BASH on otra lección. Pero veamos unos ejemplos simples y de uso frequente aquí.
Expansión de Tilde
En Bash la tilde ~
denota el directorio de inicio del usuario. Podemos demostrar esto usando el comando echo
.
devuser@ubuntu2204-1-devesp
~
hist:217 -> echo ~
/home/devuser
Asi que donde sea que usemos ~
se traduce al directorio de inicio; en nuestra ejemplo es /home/devuser
.
Usando la tilde veamos la lista de archivos en el directorio linux-devesp/linux-scripts
.
devuser@ubuntu2204-1-devesp
~
hist:217 -> ls ~/linux-devesp/linux-scripts
file-update-timestamp.sh*
forever-loop.sh*
greeting.log
greeting.sh*
Usando echo
vemos el paso absoluto del programa.
devuser@ubuntu2204-1-devesp
~
hist:218 -> echo ~/linux-devesp/linux-scripts
/home/devuser/linux-devesp/linux-scripts
Los archivos y programas usados aqui estan disponibles en linux-devesp
Podemos ejecutar el program de esta manera.
devuser@ubuntu2204-1-devesp
~
hist:219 -> ~/linux-devesp/linux-scripts/forever-loop.sh
Hello, DevESP... today is Sat Jun 22 18:51:52 UTC 2024
Expansión de Corsé
Aqui usamos la variable de entorno $HOME
y el corsé para agrupar varios directorios a crear simultaneamente.
mkdir $HOME/{dir1,dir2,dir3}
El resultado se ve así:
devuser@ubuntu2204-1-devesp
~
hist:210 -> ll
total 20
drwxrwxr-x 2 devuser devuser 4096 Jun 22 18:42 dir1/
drwxrwxr-x 2 devuser devuser 4096 Jun 22 18:42 dir2/
drwxrwxr-x 2 devuser devuser 4096 Jun 22 18:42 dir3/
Expansión de nombre de archivo
El símbolo *
es comúnmente usado para encapsular el patrón de nombre de varios archivos.
Este ejemplo muestra que capturamos cualquier símbolo con *
seguido por la extensión .sh
.
devuser@ubuntu2204-1-devesp
~/linux-devesp/linux-scripts
hist:221 -> ls -l *.sh
-rwxrw-rw- 1 devuser devuser 3926 May 25 22:45 file-update-timestamp.sh*
-rwxrw-rw- 1 devuser devuser 178 May 25 22:45 forever-loop.sh*
-rwxrwxr-x 1 devuser devuser 246 May 19 02:22 greeting.sh*
Básicamente hemos listado cualquier programa de bash, esos que tienen .sh
como extension de archivo.
Conclusion
El SH y BASH shell es una de las primeras creaciones altamente adoptadas por la comunidad usuaria. Ofrecen muchas características versátiles que hacen su uso muy atractivo. El uso del SHELL varia desde lo más simple tales como entrar comandos para ver archivos, a lo más complejos tales como escriber programas para automatizar tareas complejas.
Es recomendable aprender como usar el shell de manera proficiente para tomar ventaja de muchos usos versatiles.
Referencias
Glosario De Comandos
Los comandos siguientes son usados frecuentemente en sesiones de Linux.
- cuentas de sistema
- Tipo de cuenta que no es usuada por algun usuario para entrar al sistema. El propósito de una cuenta de sistema es generalmente para actividades administrativas o ejecución de apllicaciones de terceros que no requieren acción directa de usuarios a travéz de la linea de comandos en una terminal.
- extension de archivo
- se refiera al grupo de letras con que finaliza un nombre de archivo y que generalmente indica el tipo de función que ofrece o el tipo de aplicacíon que se requiere para operarlo. Por ejemplo: un documento de Adobe Acrobat usa
.pdf
, un documento de Microsoft Word usa.doc
, mientras que un programa de Bash usa.sh
. - export
- comando usado para crear variables con NOMBRE y VALOR en el SHELL
- env
- sirve para mostrar variables con NOMBRE y VALOR en el ambiente del usario.
Referencias Utiles
Paginas Manuales
Otras referencias