El shell de inicio de sesión es el primer proceso que se ejecuta con su ID de usuario cuando inicia sesión en una sesión interactiva.
Esto puede parecer simple en la superficie, pero si profundizas, podría resultar un poco confuso. Para entender, veamos revisar el proceso de inicio de sesión en los sistemas Linux.
Linux es un sistema multiusuario en el que varios usuarios pueden iniciar sesión y utilizar el sistema al mismo tiempo.
El primer proceso en un sistema Linux, ya sea init o systemd, inicia un programa getty. Este getty, abreviatura de 'get tty' (tty denota terminales físicos o virtuales), es responsable de proteger el sistema del acceso no autorizado.
Cuando intenta conectarse a un sistema Linux, ya sea directamente (si tiene un servidor instalado en un sistema local) o a través de SSH (si tiene el servidor en una ubicación remota), getty le solicita (a través del programa de inicio de sesión) que ingrese su nombre de usuario y cuando se ingresa el nombre de usuario, solicita la contraseña.
Sus entradas se verifican con la información almacenada en el archivo /etc/passwd. Las entradas en el archivo /etc/passwd tienen información como nombre de usuario, ID de usuario, directorio de inicio y el primer programa que debe iniciarse después de que el inicio de sesión sea exitoso.
Como puede ver en la imagen de arriba, el primer programa que se inicia cuando el usuario abhishek inicia sesión. Para los usuarios estándar de Linux, es el shell de inicio de sesión.
También podría haber otros valores en el campo. Por ejemplo, sshd es un usuario del sistema, no un usuario real y no puede iniciar sesión en el sistema de forma interactiva como un usuario normal como abhishek.
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
Si no hay una entrada en la columna del primer programa/inicio de sesión en shell, se establece de forma predeterminada en /bin/sh, es decir, el shell estándar.
Espero que no haya sido demasiada información.
Shell de inicio de sesión frente a shell de no inicio de sesión
Muy bien, entonces inició sesión en un sistema y sabe que es un shell de inicio de sesión. Pero, ¿qué significa? ¿Hay otras conchas también? ¿Dónde están?
En Linux, cuando ejecuta un script de shell, se ejecuta en su propio shell (un shell no interactivo). Puede iniciar un nuevo shell desde su shell actual (un shell interactivo).
En términos técnicos, estos son subcapas, pero hablaremos más sobre este tema más adelante. Centrémonos en el shell de inicio de sesión por ahora.
Archivos de perfil y RC para el shell
El shell de inicio de sesión lee la variable de entorno y otra configuración de /etc/profile y un archivo de perfil en el directorio de inicio. Esto le permite completar pestañas, salida en color y establecer otras cosas como umask, etc.
Probablemente sepa que hay más de un shell disponible para sistemas Linux. La mayoría de las distribuciones de Linux usan bash shell de forma predeterminada, pero puede instalar un shell diferente como zsh o Fish shell.
Si su shell de inicio de sesión es bash, lee desde el archivo /etc/profile y ~/.bash_profile. Si su shell de inicio de sesión es zsh, lee desde /etc/zprofile y ~/.zprofile.
Los archivos en el directorio /etc establecen la configuración de shell respectiva para todos los usuarios del sistema. Esto normalmente lo configura el administrador del sistema.
Los archivos en el directorio de inicio del usuario son específicos del usuario, obviamente. Esto permite a los usuarios crear alias para comandos de uso frecuente o utilizar una variable PATH personalizada para un programa.
Los shells que no son de inicio de sesión se originan en el shell de inicio de sesión y, por lo tanto, obtienen todo el entorno establecido por el shell de inicio de sesión a través de los archivos de perfil. Además de eso, el shell interactivo sin inicio de sesión puede definir sus propias variables de entorno a través de archivos rc (configuración de recursos) en /etc o en el directorio de inicio.
Para bash shell, por lo general, son los archivos /etc/bash.bashrc y ~/.bash_rc, mientras que para zsh shell, son /etc/zshrc y ~/.zshrc.
Permítanme mostrar la diferencia con un ejemplo práctico.
¿Observa cómo cambia el indicador de shell a un color verdoso? Es porque lee el archivo /etc/bash.bashrc y Ubuntu ha puesto parámetros adicionales en este archivo. El indicador de color es uno de ellos.
Para resumir:
- Los archivos de perfil son para shells de inicio de sesión interactivos. Los archivos rc son para shells interactivos sin inicio de sesión.
- Los archivos en el directorio /etc se ejecutan primero y luego los archivos en el directorio de inicio.
- Los shells interactivos sin inicio de sesión se benefician de los archivos de perfil y rc.
¿Cómo saber si está en un shell de inicio de sesión?
Eso es muy simple en realidad, al menos para el shell bash. Para el shell de inicio de sesión, el nombre del ejecutable del shell comienza con -
. Para el shell sin inicio de sesión, es solo el nombre del shell.
Sabes cómo comprobar el caparazón, ¿verdad? Compruebas el valor del argumento 0.
En Linux de escritorio, no usa el shell de inicio de sesión. Su inicio de sesión es administrado por un administrador de visualización. Es por eso que cuando abre una terminal en el escritorio de Linux, verá que incluso el primer shell que se ejecuta en la terminal no es el shell de inicio de sesión.He tratado de aclarar las cosas sobre el shell de inicio de sesión aquí. Sin embargo, si nunca se preguntó acerca de estas cosas, puede dejar algunas preguntas sin respuesta. Siéntete libre de preguntarlo en la sección de comentarios e intentaré responderlos.
Si eres un usuario experto que lee esto y encuentras algo técnicamente incorrecto o falta algún punto importante, házmelo saber en los comentarios.