¿Es normal que el mismo usuario inicie sesión dos veces pero desde otro TTY?

No sé si esto es algo que está en macOS, pero en Linux normalmente veo solo un usuario si ejecuto el comando whoy .w

¿Es normal que el mismo usuario inicie sesión dos veces pero desde otro TTY?

No sé de dónde vino la segunda cuenta con el mismo nombre de usuario.

jen-air:~ jen$ who
jen     console  Aug 22 20:56 
jen     ttys000  Aug 23 08:39 

jen-air:~ jen$ w
 8:43  up 11:47, 2 users, load averages: 1.51 1.60 1.70
USER     TTY      FROM              LOGIN@  IDLE WHAT
jen     console  -                Wed20   11:46 -
jen     s000     -                 8:39       - w

Respuestas (4)

Aquí hay un poco más de información sobre lo que está sucediendo, desde una perspectiva de Unix de nivel inferior. Es largo y va más allá de lo que pediste, pero puede ser interesante para ti o para alguien más que pase por esta página.

Si observa el wmanual del comando ( man w), dice que "La utilidad w imprime un resumen de la actividad actual en el sistema, incluido lo que está haciendo cada usuario". Eso es un poco vago y un poco engañoso. En concreto lo que whace es informarte sobre los inicios de sesión actuales . Los inicios de sesión se registran en un archivo llamado /var/run/utmpx. Existen métodos de biblioteca comunes para actualizar utmpxlas entradas, de modo que cada programa que necesita registrar o eliminar un inicio de sesión utiliza el mismo procedimiento.

wlee el utmpxarchivo utilizando esas rutinas de biblioteca comunes y muestra información sobre las sesiones de inicio de sesión actuales, junto con el proceso de primer plano . Una sesión de inicio de sesión puede estar haciendo muchas cosas a la vez, pero solo un programa está en primer plano. Todos los demás son de fondo, que es lo que sucede cuando pones un &comando o presionas control-Zmientras se ejecuta un programa en una terminal.

Se crea una sesión de inicio de sesión cuando inicia sesión en su computadora en la pantalla integrada. Si tiene habilitado el cambio de usuario, se registra un inicio de sesión para cada usuario y permanece activo hasta que se cierra la sesión. Y si inicia sesión de forma remota (por ejemplo, con ssh), se registra un inicio de sesión para eso. Cada uno de estos debe aparecer en wla salida de .

La mayoría de las aplicaciones de terminal, incluidas Terminal.app e iTerm, así como xtermsi usa X11.app, pueden crear shells de inicio de sesión en una ventana o pestaña. Cuando crea una nueva ventana en una de estas aplicaciones, puede obtener otra sesión de inicio de sesión, que aparece como otra línea en w. ¡Pero estas aplicaciones no necesariamente crean shells de inicio de sesión! Si una nueva ventana/pestaña es un shell de inicio de sesión, generalmente se controla en las preferencias. Por ejemplo, en iTerm2, puede elegir en Preferencias > Perfiles > General > Comando si desea iniciar un shell de inicio de sesión o algún otro programa. Si solo pone "bash" allí, obtendrá un shell, pero no será un shell de inicio de sesión .

Entonces, ¿cuál es la diferencia? Es sutil, pero útil saberlo.

Hay una buena discusión sobre los shells de inicio de sesión frente a los shells regulares aquí: https://unix.stackexchange.com/questions/38175/difference- between-login-shell-and-non-login-shell . Pero podemos resumir como: un shell de inicio de sesión se inicia como el primer proceso después de que algo configura un inicio de sesión en utmpx. Cualquier programa puede ejecutar un shell sin inicio de sesión en cualquier momento, pero no es el primer proceso después de una entrada en utmpx. (Más técnicamente, un shell de inicio de sesión es el proceso líder en un grupo de procesos. El hecho de que generalmente tenga una utmpxentrada es descriptivo, no necesario).

Si su shell es bash, como la mayoría, cada instancia lee y ejecuta el .bashrcarchivo. Cuando bashse ejecuta como shell de inicio de sesión, también lee y ejecuta los archivos .bash_profiley . .profileEsos archivos pueden contener instrucciones que deberían suceder solo para todas las sesiones nuevas. Eso es lo más práctico que hay que saber sobre los shells de inicio de sesión. Eso, y los shells de inicio de sesión aparecen en w.

Aquí hay un experimento para ilustrar. Abra una nueva ventana de Terminal y ejecute w. Deberías ver algo como:

11:57  up 7 days, 59 mins, 5 users, load averages: 3.58 3.53 3.91
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:57       - w

s000es el nombre de la terminal en la que se está ejecutando w. Existe en el sistema de archivos en /dev/ttys000. Por lo general, existe una relación de uno a uno entre los shells de inicio de sesión y los terminales, pero no siempre.

Ahora abra una nueva ventana de Terminal. Vuelva al primero y wvuelva a ejecutar.

12:09  up 7 days,  1:11, 5 users, load averages: 5.35 4.35 4.05
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:38       - w
dgc      s001     -                11:57       - -bash

Verá un nuevo inicio de sesión en s001—  /dev/ttys001— que se está ejecutando -bash. Ese guión al principio es una convención que le dice que bash se está ejecutando como un shell de inicio de sesión. No hay un programa en primer plano en ese terminal, por lo wque le muestra el shell en sí.

Ahora vuelva a su segunda ventana y ejecute bash. ¿Qué esperas que suceda?

12:13  up 7 days,  1:14, 5 users, load averages: 5.61 5.07 4.41
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:38       - w
dgc      s001     -                11:57       - bash

El guión se ha ido. Esto se debe a que ahora se está ejecutando la misma sesión de inicio de sesión (terminal), en primer plano, un shell que no es un shell de inicio de sesión. Es un hijo del original -bash. Si voltea hacia atrás y escribe exitpara salir de child bash, verá el de -bashnuevo.

Finalmente, tenga en cuenta el inicio de consolesesión. Ese nunca cambiará en el uso ordinario. Por lo general, ejecuta el sistema de escritorio/ventana. Si enciende su Mac y no inicia sesión, pero luego ingresa sshdesde otra computadora, no verá esa línea en absoluto. Siempre aparecerá inactivo y siempre parecerá que no está ejecutando nada, excepto con el guión, porque es una sesión de inicio de sesión.

Cuando un programa que creó una sesión de inicio de sesión finaliza ese inicio de sesión, retrocede y elimina la entrada del utmpxuso de los métodos de biblioteca comunes para ello. Y debido a que utmpxreside en el /var/rundirectorio, se elimina automáticamente cada vez que se reinicia la computadora, por lo que si apaga repentinamente su Mac mientras está conectado, no seguirá viendo inicios de sesión falsos para siempre.

La aplicación Terminal predeterminada en macOS abre un segundo inicio de sesión, de modo que cuando se ejecuta el comando whoo la aplicación Terminal, hay un segundo inicio de sesión.w

Según su entorno y la aplicación Terminal, algunas aplicaciones de emulación de terminal como iTerm2 mostrarán solo un inicio de sesión.

, es normal.

La consola es su inicio de sesión de escritorio y el segundo inicio de sesión aparece después de abrir una ventana de Terminal. De hecho, si tiene más de una ventana/pestaña de Terminal abierta, se muestra una entrada correspondiente a cada una.

Es un poco sorprendente que no haya una configuración en Preferencias para controlar si la ventana es un inicio de sesión o no.

Sí, es normal. Si usa un multiplexor de terminal como tmux o screen, cada 'pestaña' será una sesión de usuario separada.