El uso de alias
Los alias son una herramienta útil si queremos modificar los parámetros que le enviamos a un comando sin escribirlos por ejemplo, o si quisiésemos ejecutar una versión especial customizada cono otro nombre como apareció a propuesta de uno de ustedes en la clase.
Su utilización es muy sencilla, vimos dos ejemplos en clase:
alias ls='ls --color=auto'
Este es un alias que debian genera por defecto en la instalación para el usuario «normal», es decir el que no tiene privilegios. Esta es la razón por qué cuando ejecutamos ls desde root o desde un usuario sin privilegios funciona de otra forma (Mostrando los diferentes tipos de archivos en diferentes colores por ejemplo).
Otra opción que dijimos es conveniente configurar por seguridad es:
alias rm='rm -i'
Esto nos permitía ser precavidos respecto de un comando muy peligroso, debido a que el borrado de un archivo en unix desde la consola no puede deshacerse tan fácilmente como en Windows. Algunas distribuciones también configuran este alias por defecto para requerir la confirmación de borrado de un archivo antes de proceder.
Pero vimos que estos alias solo viven en la sesión en que los configuramos. Lo mismo ocurre con otras optimizaciones que quisiésemos hacer en nuestro entorno.
HISTSIZE y HISTFILESIZE
A veces suele ser conveniente tener un stock bastante grande de comandos anteriores, no solo para poder volver a ejetutarlos con la tecla [up] o flechita hacia arriba, ya que a medida que avancemos en el conocimiento de los comandos estaremos utilizando cada vez más comandos y con más parámetros. De esa manera podemos accederlos nuevamente sin tener que tipearlos nuevamente.
Hay varios modos de volver a ejecutar comandos anteriores en bash (importante que no todos los shells presentan esta posibilidad)
1) Utilizando la flecha hacia arriba del teclado. Con esta tecla vamos subiendo uno a uno en el orden inverso en que fueron ejecutados.
2) Utilizando el comando «history» y usando el signo de exclamación «! seguido del número de orden del comando
Por eso es importante que nos sintamos cómodos con la cantidad de comandos que se guardan según nuestra operación cotidiana.
NOTA SEGURIDAD: Es importante tener en cuenta que en algunos casos algunos comandos permiten incluir contraseñas como parámetros en su ejecución. La mayoría de los comandos como por ej «mariadb» permiten también hacerlo interactivamente. Toda vez que un comando permita ingresar una contraseña de manera interactiva es conveniente utilizarlo así para no guardar registros de history con contraseñas tipeadas en texto claro que podrían en otro momento ser accedidas mediante el comando history.
HISTSIZE
y HISTFILESIZE
son dos variables de entorno relacionadas con el historial de comandos en bash
, pero tienen propósitos ligeramente diferentes:
HISTSIZE
:HISTSIZE
controla el número máximo de comandos que se mantienen en la memoria del historial durante una sesión debash
. Es decir, determina cuántos comandos pasados se pueden recordar y recuperar mediante la navegación del historial mientras la sesión está en curso.- Si
HISTSIZE
se establece en 100, por ejemplo, solo se recordarán los últimos 100 comandos ejecutados en la sesión actual debash
.
HISTFILESIZE
:HISTFILESIZE
controla el tamaño máximo del archivo de historial (~/.bash_history
por defecto) en el que se guardan los comandos ejecutados en sesiones anteriores debash
. Es decir, determina cuántos comandos pasados se guardan en el archivo de historial después de que finaliza la sesión.- Si
HISTFILESIZE
se establece en 1000, por ejemplo, solo se guardarán los últimos 1000 comandos ejecutados en todas las sesiones debash
y los comandos más antiguos se descartarán para mantener el tamaño del historial dentro de ese límite.
En resumen, HISTSIZE
controla el tamaño del historial en la memoria durante la sesión actual, mientras que HISTFILESIZE
controla el tamaño del archivo de historial en disco después de que la sesión ha finalizado.
export HISTSIZE=5000
export HISTFILESIZE=5000
Cuando veamos shell scripting y variables explicaremos por qué es necesario para setear una variable de entorno que quiero tener disponible en todos mis comandos sucesivos con el comando «export». En general las variables de entorno se suelen escribir por convención completamente en mayúsculas. Esto ayuda a tener una coherencia entre todos los operadores/administradores del mundo respecto de qué son.
Los archivos /etc/profile /etc/bash_rc .profile .bashrc .bash_login
Hablamos en la clase que para
hacer todos estos cambios persistentes sin tener que volver a
ejecutarlos cada vez que iniciamos sesión teníamos que incluirlos en los archivos que se ejecutan automáticamente cada vez que ingresamos en una consola
Trabajamos en la clase que estos archivos no son más que una secuencia de comandos propios del shell que vamos a abrir que nos ayudan con la configuración inicial de nuestro entorno a nuestro gusto cuando abrimos una consola.
Es importante tener en cuenta algunas particularidades según cuándo y cómo se ejecutan cada uno de estos archivos según el tipo de shell al que ingresemos (/dev/tty<n> o /dev/pts/<n>) y si hubo o no login en ese ingreso
Shell de Inicio de Sesión Interactivo (Login Shell):
- Si
bash
se inicia como un shell de inicio de sesión (por ejemplo, cuando nos conectamos a través de una consola de texto remota por ssh o TTY), se ejecutan los siguientes archivos en este orden:/etc/profile
(si existe y es legible)- El primer archivo legible del home del usuario entre
~/.bash_profile
,~/.bash_login
y~/.profile
(se usa solo uno, en ese orden de prioridad. El caracter «~» remite a la home del usuario).
- Si
Shell Interactivo No de Inicio de Sesión (Non-login Shell):
- Si
bash
se inicia como un shell interactivo que no es de inicio de sesión (por ejemplo, cuando abrimos una nueva terminal desde el entorno gráfico), se ejecuta:~/.bashrc
- Si
Shell No Interactivo (Non-interactive Shell):
- Si
bash
se inicia como un shell no interactivo (por ejemplo, al ejecutar un script), se ejecuta:- Ninguno de los archivos de configuración mencionados arriba, a menos que explícitamente se invoquen. Este punto es muy importante, debido a que cuando lanzamos un script, salvo que invoquemos explicitamente con un comando por ejemplo
source /etc/profile
- Ninguno de los archivos de configuración mencionados arriba, a menos que explícitamente se invoquen. Este punto es muy importante, debido a que cuando lanzamos un script, salvo que invoquemos explicitamente con un comando por ejemplo
EJEMPLO DE COMPORTAMIENTO
- Si
Al iniciar sesión desde una consola de texto (TTY):
bash
se considera un shell de inicio de sesión.- Primero intentará ejecutar
/etc/profile
. - Luego, buscará y ejecutará el primer archivo legible entre
~/.bash_profile
,~/.bash_login
y~/.profile
(en ese orden).
Al abrir una terminal desde el entorno gráfico:
bash
se considera un shell no de inicio de sesión.- Ejecutará
~/.bashrc
.
Configuración Consistente en Todos los Shells
Para asegurar que ciertas configuraciones se apliquen tanto a shells de inicio de sesión como a shells no de inicio de sesión, puedes configurar tu ~/.bash_profile
para que también ejecute ~/.bashrc
si existe.