← Весь справочник

who, w, last

Кто сейчас в системе и что делает, история входов и перезагрузок, неудачные попытки входа

Эти команды отвечают на вопросы «кто сейчас залогинен?», «что они запустили?» и «кто и когда входил раньше?». who и w читают список текущих сессий из /var/run/utmp, last — историю входов и перезагрузок из /var/log/wtmp, lastb — неудачные попытки входа из /var/log/btmp. Их используют при разборе инцидентов и перед перезагрузкой сервера — чтобы не выбросить из системы работающих людей.

Синтаксис

who [опции] [файл]
w [опции] [пользователь]
last [опции] [пользователь…] [терминал…]
lastb [опции]                 # то же, что last, но по /var/log/btmp

who — кто залогинен

ОпцияЧто показывает
без опцийимя, терминал, время входа, откуда (в скобках)
-Hдобавить строку заголовков
-qтолько имена и общее число: # users=3
-bвремя последней загрузки системы
-rтекущий уровень запуска (runlevel)
-uдобавить время простоя (. — активен в последнюю минуту, old — больше суток) и PID
-aвсё сразу: -b -d --login -p -r -t -T -u
-m, who am iтолько твоя сессия (терминал, подключённый к stdin)
-Tстатус приёма сообщений write: +, -, ?
файлчитать другой файл: who /var/log/wtmp — все входы из истории

Связанные команды: whoami — имя текущего пользователя, users — имена залогиненных одной строкой, logname — под каким именем выполнен вход (не меняется после su).

w — кто что делает

Первая строка — как у uptime: текущее время, сколько система работает, число пользователей, средняя нагрузка за 1, 5 и 15 минут.

СтолбецЧто значит
USERпользователь
TTYтерминал: pts/N — сессия ssh или окно терминала, ttyN — консоль
FROMоткуда вход (IP или имя хоста; видно с -f, если скрыто)
LOGIN@время входа
IDLEсколько терминал без ввода
JCPUвремя процессора всех процессов этого терминала
PCPUвремя процессора текущего процесса (из WHAT)
WHATкоманда, которая сейчас выполняется в сессии
ОпцияЧто делает
-hбез заголовка
-sкороткий формат: без LOGIN@, JCPU, PCPU
-fпереключить показ столбца FROM
-iпоказывать IP вместо имени хоста
-pпоказать PID процессов в WHAT
-oстарый формат: пустые значения вместо нулевого времени простоя
w пользовательтолько сессии этого пользователя

last — история входов

last читает /var/log/wtmp от новых записей к старым. В конце печатает, с какой даты начинается файл (wtmp begins …).

ОпцияЧто делает
-n 10, -10показать только 10 последних записей
пользовательтолько записи этого пользователя: last alice
rebootистория перезагрузок (псевдопользователь)
терминалзаписи по терминалу: last pts/0
-s время / -t времязаписи с указанного времени / до него: -s yesterday, -s 2024-05-01, -s -2days
-p времякто был в системе в указанный момент: -p '2024-05-01 15:00'
-Fполные даты и время входа и выхода
--time-format isoформат времени: notime, short, full, iso
-iIP-адреса числами
-dпреобразовать IP в имена хостов
-aимя хоста — в последний столбец (не обрезается)
-Rне показывать столбец хоста
-wне обрезать длинные имена пользователей и доменов
-xтакже записи о выключении и смене уровня запуска
-f файлчитать другой файл, например старый /var/log/wtmp.1

Формат строки: пользователь терминал хост вход - выход (длительность). Вместо времени выхода бывает:

ЗаписьЧто значит
still logged inсессия открыта сейчас
still running(для reboot) система работает с этой загрузки
downсессия закрылась при штатном выключении
crashсистема упала или перезагрузилась без закрытия сессии
gone - no logoutпроцесс сессии исчез без записи о выходе

Длительность: (01:05) — 1 час 5 минут, (2+04:00) — 2 дня и 4 часа.

lastb — неудачные входы

lastb принимает те же опции, что last, и читает /var/log/btmp — неверные пароли и несуществующие пользователи. Файл доступен только root. Последний вход каждого пользователя показывает lastlog (lastlog -u имя).

Примеры

# кто сейчас в системе, с заголовками
who -H

# сколько пользователей залогинено
who -q

# когда система загрузилась
who -b
uptime -s

# что сейчас делают пользователи, с IP
w -i

# последние 10 входов
last -n 10

# все входы пользователя за последние сутки, полные даты
last -F -s yesterday alice

# когда сервер перезагружался
last reboot | head

# кто был в системе в указанный момент
last -p '2024-05-01 15:00'

# топ IP по неудачным попыткам входа
lastb -i | awk '$3 ~ /^[0-9]/ { print $3 }' | sort | uniq -c | sort -rn | head

# посмотреть сырые записи wtmp
utmpdump /var/log/wtmp | tail -3

Подводные камни

  • Пустой вывод не значит «никого не было». В контейнерах (и в песочнице) входы не идут через login/sshd, поэтому utmp и wtmp пусты: who ничего не печатает, last выводит только wtmp begins ….
  • wtmp ротируется. last показывает только текущий файл; более старую историю смотри в last -f /var/log/wtmp.1. Строка wtmp begins подсказывает, с какой даты есть данные.
  • who видит только сессии с терминалом. Команды через ssh хост команда, cron-задачи и демоны в who и w не попадают — их ищи в ps.
  • crash не всегда авария сервера. Так помечается любая сессия, для которой нет записи о выходе до следующей загрузки, — в том числе при жёсткой перезагрузке виртуальной машины.
  • Имена и хосты обрезаются. Длинные имена пользователей и хостов в last урезаются по ширине столбца; используй -w и -a.
  • lastb требует root: у обычного пользователя — ошибка доступа к /var/log/btmp.

См. также

system-info · ps · id · su · sshd · date