El comando who en Linux: mostrar usuarios conectados al sistema

Introducción

En cualquier entorno Linux, conocer quién está conectado al sistema en un momento dado es fundamental para la administración, la seguridad y el soporte técnico. El comando who es una herramienta sencilla pero poderosa que muestra información sobre los usuarios que han iniciado sesión en la máquina, ya sea de forma local o remota. En este artículo exploraremos su funcionamiento, sus opciones más útiles y ejemplos prácticos que podrás aplicar inmediatamente.

¿Qué hace exactamente el comando who?

El comando who lee el archivo /var/run/utmp (o su equivalente /var/log/wtmp en algunas distribuciones) y extrae los registros de inicio de sesión activos. Cada línea de salida representa una sesión de usuario y contiene, por defecto, los siguientes campos:

  • Nombre de usuario: el login que inició la sesión.
  • Terminal: el dispositivo o pseudo‑terminal asociado (por ejemplo, tty1, pts/0).
  • Fecha y hora de inicio: cuándo se estableció la conexión.
  • Origen (opcional): la dirección IP o el hostname desde el que se conectó, cuando está disponible.

Esta información es valiosa para detectar accesos no autorizados, gestionar sesiones abiertas o simplemente saber quién está trabajando en el servidor.

Uso básico

Ejecutar who sin argumentos muestra todas las sesiones activas:

who

Salida típica:

usuario1   tty7         2025-09-20 08:15 (:0)
usuario2   pts/0        2025-09-20 09:03 (192.168.1.45)
usuario3   pts/1        2025-09-20 09:12 (10.0.0.22)

Cada columna está separada por espacios o tabulaciones, lo que facilita su procesamiento con herramientas como awk o cut.

Opciones más usadas

El comando who posee varias opciones que amplían su utilidad. A continuación, las más relevantes:

  • -b o --boot: muestra la hora del último arranque del sistema.
  • -H o --heading: incluye una línea de encabezado que describe cada columna.
  • -q o --count: solo muestra el número de usuarios conectados y sus nombres.
  • -u: agrega información sobre el tiempo de inactividad y el PID del proceso de la shell.
  • -a o --all: equivale a usar -b -d --login -p -r -t -T -u y muestra toda la información disponible.
  • --help: muestra la ayuda resumida.

Por ejemplo, para ver la hora de arranque y el encabezado:

who -bH

Salida:

Nombre   Línea   Tiempo          Comentario
system boot  2025-09-20 06:45

Ejemplos prácticos

Veamos algunos escenarios donde who resulta especialmente útil.

1. Detectar sesiones remotas

Si quieres saber quién está conectado vía SSH, puedes filtrar por los pseudo‑terminales (pts/*):

who | grep 'pts/'

2. Contar usuarios activos

Para obtener rápidamente el número de usuarios conectados:

who -q

Salida:

usuario1 usuario2 usuario3
# users=3

3. Ver tiempo de inactividad

La opción -u muestra cuánto tiempo lleva cada terminal sin actividad:

who -u

Salida ejemplo:

usuario1   tty7         2025-09-20 08:15 08:15   1234 (:0)
usuario2   pts/0        2025-09-20 09:03 00:10   5678 (192.168.1.45)

La quinta columna indica horas:minutos de inactividad; un punto (.) significa que la sesión está activa en este momento.

4. Combinar con watch para monitoreo en tiempo real

Para observar cambios en las conexiones cada 5 segundos:

watch -n 5 who -H

5. Obtener solo los nombres de usuario únicos

Si necesitas una lista sin duplicados:

who | awk '{print $1}' | sort -u

Consejos de administración y seguridad

El comando who es una primera línea de defensa para auditorías de acceso. Algunas buenas prácticas incluyen:

  • Revisar periódicamente la salida de who -a para detectar cuentas inactivas o procesos huérfanos.
  • Combinar who con last para obtener un historial de inicio y cierre de sesiones.
  • En scripts de monitorización, usar who -q para activar alertas cuando el número de usuarios supere un umbral.
  • Recordar que who solo muestra sesiones actuales; para un historial completo, consulta /var/log/wtmp con last o lastb.

Limitaciones y alternativas

Aunque who es muy útil, tiene algunas limitaciones:

  • No muestra procesos en ejecución; para eso se usa ps o top.
  • En contenedores o entornos con nombres de usuario complejos, la salida puede resultar menos legible.
  • No proporciona información sobre el consumo de recursos por sesión.

Cuando se necesitan métricas más detalladas, herramientas como w (que combina información de who y uptime) o ss para conexiones de red pueden ser complementarias.

Conclusión

El comando who es una herramienta esencial para cualquier administrador de Linux que necesite saber, de forma rápida y fiable, quién está conectado al sistema. Su sintaxis sencilla, sus opciones flexibles y la posibilidad de combinarlo con otras utilidades de la shell lo hacen ideal tanto para tareas de diagnóstico como para scripts de automatización. Dominar who te permitirá mantener un mejor control sobre el acceso a tus servidores y responder con rapidez a cualquier incidente de seguridad.