GNU/Linux >> Tutoriales Linux >  >> Linux

¿Diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?

Entiendo la diferencia básica entre un shell interactivo y un shell no interactivo. Pero, ¿qué diferencia exactamente un shell de inicio de sesión de un shell que no es de inicio de sesión?

¿Puede dar ejemplos de usos de un interactivo sin inicio de sesión? concha?

Respuesta aceptada:

Un shell de inicio de sesión es el primer proceso que se ejecuta bajo su ID de usuario cuando inicia sesión para una sesión interactiva. El proceso de inicio de sesión le dice al shell que se comporte como un shell de inicio de sesión con una convención:pasar el argumento 0, que normalmente es el nombre del ejecutable del shell, con un - carácter antepuesto (por ejemplo, -bash mientras que normalmente sería bash . Los shells de inicio de sesión normalmente leen un archivo que hace cosas como establecer variables de entorno:/etc/profile y ~/.profile para el shell Bourne tradicional, ~/.bash_profile adicionalmente para bash, /etc/zprofile y ~/.zprofile para zsh, /etc/csh.login y ~/.login por dinero en efectivo, etc.

Cuando inicia sesión en una consola de texto, o a través de SSH, o con su - , obtienes un inicio de sesión interactivo cáscara. Cuando inicia sesión en modo gráfico (en un administrador de pantalla X), no obtiene un shell de inicio de sesión, sino un administrador de sesión o un administrador de ventanas.

Es raro ejecutar un inicio de sesión no interactivo shell, pero algunas configuraciones de X hacen eso cuando inicia sesión con un administrador de pantalla, para organizar la lectura de los archivos de perfil. Otras configuraciones (esto depende de la distribución y del administrador de visualización) lea /etc/profile y ~/.profile explícitamente, o no los lea. Otra forma de obtener un shell de inicio de sesión no interactivo es iniciar sesión de forma remota con un comando pasado a través de una entrada estándar que no es una terminal, p. ssh example.com <my-script-which-is-stored-locally (a diferencia de ssh example.com my-script-which-is-on-the-remote-machine , que ejecuta un shell no interactivo y sin inicio de sesión).

Cuando inicia un shell en una terminal en una sesión existente (pantalla, terminal X, búfer de terminal de Emacs, un shell dentro de otro, etc.), obtiene un interactivo, sin inicio de sesión cáscara. Ese shell podría leer un archivo de configuración de shell (~/.bashrc para bash invocado como bash , /etc/zshrc y ~/.zshrc para zsh, /etc/csh.cshrc y ~/.cshrc para csh, el archivo indicado por ENV variable para shells compatibles con POSIX/XSI como dash, ksh y bash cuando se invoca como sh , $ENV si está establecido y ~/.mkshrc para mksh, etc.).

Cuando un shell ejecuta un script o un comando pasado en su línea de comando, es un no interactivo, sin inicio de sesión cáscara. Tales shells se ejecutan todo el tiempo:es muy común que cuando un programa llama a otro programa, en realidad ejecuta un pequeño script en un shell para invocar a ese otro programa. Algunos shells leen un archivo de inicio en este caso (bash ejecuta el archivo indicado por BASH_ENV variable, zsh ejecuta /etc/zshenv y ~/.zshenv ), pero esto es arriesgado:el shell se puede invocar en todo tipo de contextos, y casi no hay nada que pueda hacer que no rompa algo.

Relacionado:¿Comprender tc qdisc e iperf?

Estoy simplificando un poco, vea el manual para los detalles sangrientos.


Linux
  1. ¿La diferencia entre un comando incorporado y uno que no lo es?

  2. ¿La diferencia entre las cotizaciones "...", '...', $'...' y $"..." en el caparazón?

  3. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  4. ¿Cuál es la lectura del archivo Conf entre el Shell de inicio de sesión y el de no inicio de sesión?

  5. Linux:¿cuál es la diferencia entre `su -` y `su –login`?

Explicación de la diferencia entre apt y apt-get

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Diferencia entre Snat y Masquerade?

¿Cuál es la diferencia entre una consola, una terminal y un shell?

¿Diferencia entre $HOME y '~' (tilde)?

¿Diferencia entre '{}' y {} en el comando de búsqueda?