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-terminal
por 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/profile
y ~/.profile
no 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/environment
dó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/motd
y 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/motd
archivo y asegúrese de que no esté generando nada /etc/init.d/motd
si está presente.
De todos modos, en función de la salida que muestra, parece que está iniciando sesión a través de lo ssh
que 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_motd
módulo de la biblioteca PAM, muestra el contenido de /etc/motd
. A través del pam_env
módulo, establece las variables de entorno de /etc/environment
y ~/.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/profile
fuentes predeterminadas de Ubuntu /etc/bash.bashrc
).
~/.bash_profile
. Los otros archivos que podrían haberse leído aquí ( ~/.profile
y ~/.bash_login
) se ignoran porque ~/.bash_profile
existen.
export SET_IN_ETC_PROFILE=yes
en/etc/profile
,export SET_IN_HOME_ZSHRC=yes
en~/.zhshrc
(soy un usuario zsh), etc ... A continuación, reiniciar el sistema y una bonitaenv|grep SET_IN
te 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/16395env
no tiene relación con la orden de ejecución.SET_IN
le 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