Comprensión de los archivos de inicialización de shell y los perfiles de usuario en Linux


Linux es un sistema de tiempo compartido multiusuario, lo que implica que más de un usuario puede iniciar sesión y utilizar un sistema. Y los administradores del sistema tienen la tarea de administrar varios aspectos de cómo los diferentes usuarios pueden operar un sistema en términos de instalación/actualización/eliminación de software, programas que pueden ejecutar, archivos que pueden ver/editar, etc.

Linux también permite que los entornos de los usuarios se creen o mantengan de dos formas principales: utilizando configuraciones de todo el sistema (globales) y específicas del usuario (personales). Normalmente, el método básico para trabajar con un sistema Linux es el shell, y el shell crea un entorno en función de ciertos archivos que lee durante su inicialización después de un inicio de sesión de usuario exitoso.

En este artículo, explicaremos los archivos de inicialización de shell en relación con los perfiles de usuario para la gestión de usuarios locales en Linux. Le informaremos dónde guardar las funciones de shell personalizadas, los alias, las variables y los programas de inicio.

Importante: A los efectos de este artículo, nos centraremos en bash, un shell compatible con sh que es el shell más popular/utilizado en los sistemas Linux que existen.

Si está utilizando un programa shell diferente (zsh, ash, fish, etc.), lea su documentación para obtener más información sobre algunos de los archivos relacionados de los que hablaremos aquí.

Inicialización de Shell en Linux

Cuando se invoca el shell, hay ciertos archivos de inicialización/inicio que lee que ayudan a configurar un entorno para el propio shell y el usuario del sistema; que son funciones predefinidas (y personalizadas), variables, alias, etc.

Hay dos categorías de archivos de inicialización leídos por el shell:

  • Archivos de inicio de todo el sistema: estas contienen configuraciones globales que se aplican a todos los usuarios del sistema y, por lo general, se encuentran en el directorio/etc. Incluyen:/etc/profiles y/etc/bashrc o /etc/bash.bashrc.
  • archivos de inicio específicos del usuario: estas configuraciones de almacenamiento que se aplican a un solo usuario en el sistema y normalmente se encuentran en el directorio de inicio de los usuarios como archivos dot. Pueden anular las configuraciones de todo el sistema. Incluyen: .profiles, .bash_profile, .bashrc y .bash_login.

Nuevamente, el shell se puede invocar en tres modos posibles:

El shell se invoca después de que un usuario inicie sesión con éxito en el sistema, utilizando/bin/login, después de leer las credenciales almacenadas en el archivo/etc/passwd.

Cuando el shell se inicia como un shell de inicio de sesión interactivo, lee el/etc/profile y su equivalente específico del usuario ~/.bash_profile.

El shell se inicia en la línea de comandos utilizando un programa de shell, por ejemplo $/bin/bash o $/bin/zsh. También se puede iniciar ejecutando el comando/bin/su.

Además, un shell interactivo sin inicio de sesión también se puede invocar con un programa de terminal como konsole, xterm desde un entorno gráfico.

Cuando el shell se inicia en este estado, copia el entorno del shell padre y lee el archivo ~/.bashrc específico del usuario para obtener instrucciones de configuración de inicio adicionales.

$ su
# ls -la

El shell se invoca cuando se ejecuta un script de shell. En este modo, está procesando una secuencia de comandos (conjunto de comandos/funciones de shell o genéricos del sistema) y no requiere la entrada del usuario entre comandos a menos que sea de otra manera. Opera utilizando el entorno heredado del shell padre.

Comprensión de los archivos de inicio de Shell en todo el sistema

En esta sección, mostraremos más luz sobre los archivos de inicio de shell que almacenan configuraciones para todos los usuarios en el sistema y estos incluyen:

El archivo/etc/profile: almacena configuraciones de entorno de todo el sistema y programas de inicio para la configuración de inicio de sesión. Todas las configuraciones que desee aplicar a los entornos de todos los usuarios del sistema deben agregarse en este archivo.

Por ejemplo, puede establecer su variable de entorno PATH global aquí.

# cat /etc/profile

Nota: En ciertos sistemas como RHEL/CentOS 7, recibirá advertencias como "No se recomienda cambiar este archivo a menos que sepa lo que está haciendo. Es mucho mejor crear un script de shell .sh personalizado en /etc/profile.d/ para realizar cambios personalizados en su entorno, ya que esto evitará la necesidad de fusionar en futuras actualizaciones ".

El directorio /etc/profile.d/: almacena los scripts de shell que se utilizan para realizar cambios personalizados en su entorno:

# cd /etc/profile.d/
# ls  -l 

El archivo/etc/bashrc o /etc/bash.bashrc: contiene funciones y alias para todo el sistema, incluidas otras configuraciones que se aplican a todos los usuarios del sistema.

Si su sistema tiene varios tipos de shells, es una buena idea poner configuraciones específicas de bash en este archivo.

# cat /etc/bashrc

Comprensión de los archivos de inicio de Shell específicos del usuario

A continuación, explicaremos más sobre los archivos de punto de inicio de shell (bash) específicos del usuario, que almacenan configuraciones para un usuario en particular en el sistema, están ubicados en el directorio de inicio de un usuario e incluyen:

# ls -la

El archivo ~/.bash_profile: almacena el entorno específico del usuario y las configuraciones de los programas de inicio. Puede configurar su variable de entorno PATH personalizada aquí, como se muestra en la captura de pantalla a continuación:

# cat ~/.bash_profile

El archivo ~/.bashrc: este archivo almacena alias y funciones específicos del usuario.

# cat ~/.bashrc

El archivo ~/.bash_login: contiene configuraciones específicas que normalmente solo se ejecutan cuando inicia sesión en el sistema. Cuando ~/.bash_profile está ausente, bash leerá este archivo.

El archivo ~/.profile: este archivo se lee en ausencia de ~/.bash_profile y ~/.bash_login; puede almacenar las mismas configuraciones, a las que también pueden acceder otros shells del sistema. Debido a que aquí hemos hablado principalmente de bash, tenga en cuenta que es posible que otros shells no entiendan la sintaxis de bash.

A continuación, también explicaremos otros dos archivos importantes específicos del usuario que no son necesariamente archivos de inicialización de bash:

El archivo ~/.bash_history - bash mantiene un historial de los comandos que ha ingresado un usuario en el sistema. Esta lista de comandos se guarda en el directorio de inicio de un usuario en el archivo ~/.bash_history.

Para ver esta lista, escriba:

$ history 
or 
$ history | less

El archivo ~/.bash_logout: no se usa para el inicio del shell, pero almacena instrucciones específicas del usuario para el procedimiento de cierre de sesión. Se lee y se ejecuta cuando un usuario sale de un shell de inicio de sesión interactivo.

Un ejemplo práctico sería borrar la ventana de la terminal al cerrar la sesión. Esto es importante para las conexiones remotas, que dejarán una ventana limpia después de cerrarlas:

# cat bash_logout 

Para obtener información adicional, consulte el contenido de estos archivos de inicialización de shell en varias distribuciones de Linux y también lea la página de manual de bash:

¡Eso es todo por ahora! En este artículo, explicamos los archivos de inicio/inicialización de shell en Linux. Utilice el formulario de comentarios a continuación para respondernos.