linux
system
users
who
Список пользователей, вошедших в систему прямо сейчас
Описание
who — утилита, показывающая список пользователей, у которых в данный момент есть активные сессии в системе. По умолчанию выводит: имя пользователя, терминал (tty/pts), дату и время входа, а также IP-адрес или имя хоста, с которого выполнен вход.
В уроке 24 who применяется в скрипте системного отчёта для подсчёта активных пользователей: who | wc -l — классический паттерн, где каждая строка вывода who соответствует одной сессии.
Команда читает информацию из файлов /var/run/utmp (активные сессии) и при флаге -a — из /var/run/wtmp (история входов/выходов).
Синтаксис
who [OPTIONS] [FILE]
who am i # показать только текущую сессию
# Список вошедших пользователей
who
# Только имена и счётчик
who -q
# Полная информация (все поля)
who -a
Флаги и опции
| Флаг | Описание |
|---|---|
| (без флага) | Список активных сессий: имя пользователя, терминал, время входа, хост |
-b, --boot | Время последней загрузки системы |
-q, --count | Только имена пользователей и итоговый счётчик (# users=N) |
-H, --heading | Добавить заголовок столбцов (NAME, LINE, TIME, COMMENT) |
-a, --all | Вывести всю доступную информацию (объединяет несколько флагов) |
-r, --runlevel | Текущий уровень запуска системы (runlevel) |
-s, --short | Краткий формат: только имя, терминал, время (поведение по умолчанию) |
-u, --users | Добавить информацию о времени простоя (idle) каждой сессии |
--lookup | Разрешать имена хостов через DNS (может быть медленно) |
Паттерны использования
Основные вызовы
# Список сессий who # Пример вывода: # ec2-user pts/0 2025-06-12 14:15 (192.168.1.10) # admin pts/1 2025-06-12 14:22 (10.0.0.5) # Только имена и счётчик who -q # ec2-user admin # # users=2 # С заголовками столбцов who -H
Из урока 24: подсчёт пользователей
#!/usr/bin/env bash
# system_report.sh
# Подсчитать активные сессии
active_users=$(who | wc -l)
echo "Active users: $active_users"
# Или через who -q
who -q | grep "# users=" | awk -F'=' '{print $2}'
Мониторинг и оповещения
#!/usr/bin/env bash # Предупредить если пользователей больше порога max_users=5 current=$(who | wc -l) if [ "$current" -gt "$max_users" ]; then echo "WARNING: $current users logged in (max $max_users)" who # показать кто именно fi
Дополнительные сведения
# Время последней загрузки who -b # system boot 2025-06-10 08:35 # Текущая сессия (кто я) who am i # ec2-user pts/0 2025-06-12 14:15 (192.168.1.10) # Полная информация + заголовки who -aH
Советы и предупреждения
Совет: who vs w vs users
who — базовый список сессий. w — расширенная версия: добавляет то, что делает пользователь прямо сейчас (текущий процесс) и load average. users — только имена через пробел, без дат и хостов. Для скриптов обычно достаточно who | wc -l для подсчёта.
Совет: each line = one session
Один пользователь может иметь несколько строк в выводе
Один пользователь может иметь несколько строк в выводе
who, если он подключён из нескольких терминалов (например, несколько SSH-сессий). who | wc -l считает сессии, не уникальных пользователей. Для уникальных пользователей: who | awk '{print $1}' | sort -u | wc -l.
Внимание: who и контейнеры
Внутри Docker-контейнеров
Внутри Docker-контейнеров
who часто выводит пустой результат, поскольку контейнер не использует стандартную систему utmp. Это нормальное поведение — не признак ошибки.