Esto es un poco complejo. En primer lugar, los detalles dependen del tipo de shell que esté ejecutando. Para plagiarme a mí mismo :
Cuando abre un emulador de terminal ( gnome-terminalpor ejemplo), está ejecutando lo que se conoce como un shell interactivo sin inicio de sesión .
Cuando inicia sesión en su máquina desde la línea de comandos o ejecuta un comando como su - username, está ejecutando un shell de inicio de sesión interactivo .
Cuando inicia sesión gráficamente, está ejecutando algo completamente diferente. Los detalles dependerán de su sistema y entorno gráfico, pero en general, es el shell gráfico el que se ocupa de su inicio de sesión. Si bien muchos shells gráficos (incluido el predeterminado de Ubuntu) se leerán /etc/profiley ~/.profileno todos lo harán.
Finalmente, cuando ejecuta un script de shell, se ejecuta en un shell no interactivo y sin inicio de sesión .
Los archivos que bash leerá cuando se inicien dependen del tipo de shell en el que se ejecuta. Lo siguiente es un extracto de la sección INVOCACIÓN de man bash(énfasis mío):
Cuando se invoca bash como un shell de inicio de sesión interactivo o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos del archivo / etc / profile , si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden , y lee y ejecuta comandos del primero que existe y es legible. La opción --noprofile se puede usar cuando se inicia el shell para inhibir este comportamiento.
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión , bash lee y ejecuta comandos desde /etc/bash.bashrc y ~ / .bashrc , si existen estos archivos. Esto puede inhibirse usando la opción --norc. La opción de archivo --rcfile obligará a bash a leer y ejecutar comandos desde el archivo en lugar de /etc/bash.bashrc y ~ / .bashrc.
Esos son los archivos de inicialización. También tiene /etc/environmentdónde puede establecer variables ambientales globales, pero eso es leído en lugar de fuente (los comandos dentro de él no se ejecutan, pero se establecen definiciones de variables).
Ahora, el saludo que ves es otra cosa otra vez. Eso se establece /etc/motdy se muestra a través de pam_motd. Como se explica en man motd:
Pam_motd (8) muestra el contenido de / etc / motd después de un inicio de sesión exitoso pero justo antes de que ejecute el shell de inicio de sesión.
La abreviatura "motd" significa "mensaje del día", y este archivo se ha utilizado tradicionalmente para eso exactamente (requiere mucho menos espacio en disco que el correo para todos los usuarios).
En Debian GNU / Linux, también se muestra el contenido de /run/motd.dynamic. Este archivo es generado por /etc/init.d/motd en el arranque.
Para eliminar el mensaje, simplemente vacíe el /etc/motdarchivo y asegúrese de que no esté generando nada /etc/init.d/motdsi está presente.
De todos modos, en función de la salida que muestra, parece que está iniciando sesión a través de lo sshque significa que está ejecutando un shell de inicio de sesión interactivo , consulte lo que eso significa. Entonces, en resumen, las cosas que le importan que se obtienen al iniciar sesión son (y en este orden):
- El demonio SSH, a través del
pam_motdmódulo de la biblioteca PAM, muestra el contenido de /etc/motd. A través del pam_envmódulo, establece las variables de entorno de /etc/environmenty ~/.pam_environment.
- Se inicia un shell de inicio de sesión y se leen los siguientes archivos en orden:
/etc/profile
/etc/bash.bashrc(las /etc/profilefuentes predeterminadas de Ubuntu /etc/bash.bashrc).
~/.bash_profile. Los otros archivos que podrían haberse leído aquí ( ~/.profiley ~/.bash_login) se ignoran porque ~/.bash_profileexisten.
export SET_IN_ETC_PROFILE=yesen/etc/profile,export SET_IN_HOME_ZSHRC=yesen~/.zhshrc(soy un usuario zsh), etc ... A continuación, reiniciar el sistema y una bonitaenv|grep SET_INte contaré toda la historia. Para ver qué variables son vistas por las aplicaciones de escritorio (las que inicia desde el tablero o el WM, sin usar un terminal), consulte askubuntu.com/a/356973/16395envno tiene relación con la orden de ejecución.SET_INle mostrará qué archivos se han leído, no en qué orden se han leído. El orden es estándar, es lo que se muestra en los extractos de la página de manual que tengo en mi respuesta.La información que está viendo cuando inicia sesión a través de ssh se crea antes de que / etc / profile sea siquiera visto. Eche un vistazo a la secuencia de archivos en /etc/update-motd.d. Eso le mostrará dónde los mensajes que está viendo son generados por varios scripts.
fuente