- Команда last в Linux
- Синтаксис и опции last
- Примеры использования last
- 1. Просмотр всей истории
- 2. История определённого пользователя
- 3. История за определённый день
- 4. История за определённый период
- 5. Вывод хоста и имени пользователя (Заголовок 3) (-i/-R)
- 6. Вывод полного времени
- 8. История перезагрузок
- 9. История неудачных входов
- Выводы
- How long has my Linux system been running?
Команда last в Linux
Иногда при администрировании сервера под управлением Linux нужно посмотреть историю входов в систему и выходов для пользователей. Это удобно делать с помощью команды last. Хотя она пригодится и в других ситуациях.
В данной статье мы подробно расскажем, как работает last в Linux, какой у нее синтаксис и доступные опции. А затем перейдем к конкретным примерам использования и рассмотрим несколько сценариев.
Синтаксис и опции last
Данная утилита по умолчанию берет данные из файла /var/log/wtmp и выводит полный список пользователей, вошедших в систему и вышедших. Рассмотрим ее синтаксис. В терминале нужно задать опции, имя одного или нескольких пользователей и tty:
$ last опции имя_пользователя название_tty
Вместо last можно использовать lastb. В таком случае по умолчанию будет использоваться файл /var/log/btmp, в котором сохранены все неудачные попытки входа. Теперь пройдемся по доступным опциям:
- -a, —hostlast – выводить информацию об имени хоста (hostname) в последнем столбце. Изначально она отображается в третьем столбце.
- -d, —dns – выводить IP-адрес пользователя в случае удаленного подключения. Удобно использовать вместе с предыдущей опцией.
- -f, —file – выбрать свой файл для загрузки данных вместо используемого по умолчанию /var/log/wtmp. Опцию можно использовать несколько раз, выбрав два и более файла.
- -F, —fulltimes – выводить полные дату и время входов и выходов из системы.
- -i, —ip – выводить IP-адрес пользователя при удаленном подключении вместо имени хоста. Это несколько похоже на упомянутую ранее опцию —dns.
- -число, -n,—limit – указать, сколько строк информации будет выведено при выполнении команды.
- -p, —present – выводить информацию о сессиях в конкретное время.
- -R, —nohostname – не отображать графу с именем хоста.
- -s, —since – выводить информацию начиная с указанного момента времени.
- -t, —until – выводить информацию до указанного времени.
- —time-format – выбрать один из 4 доступных способов отображения времени: notime – вообще не выводить информацию, short – стандартный вариант, использующийся по умолчанию, full – полная информация, как в случае с опцией —fultimes, iso – использовать формат ISO-8601, включающий в себя часовой пояс.
- -w, —fullname – выводить полные имена пользователей и доменов.
- -x, —system – отображать записи о выключении системы и изменении уровня выполнения (run level).
Детальную информацию о команде last, синтаксис и все опции можно получить в терминале:
А теперь перейдем к примерам ее использования.
Примеры использования last
Сначала рассмотрим способ просмотра всей истории входов и выходов, объяснив детально каждое поле. Затем перейдем к изучению данных для конкретного пользователя. Это основные сценарии, которые могут пригодиться.
Еще мы разберем несколько полезных вариантов. Ориентируйтесь по оглавлению, чтобы перейти к нужному.
1. Просмотр всей истории
Главная задача – получить полную информацию для всех пользователей. Для этих целей команде last нужно передать опции -F, -w и -x:
Остановимся на каждом столбце более подробно:
- Сначала идет имя пользователя. Обратите внимание, что reboot – это отдельный пользователь, появляющийся во время перезагрузки, shutdown – при выключении, runlevel – при изменении уровня выполнения.
- Информация о tty сессии.
- Имя хоста.
- Время входа.
- Время выхода.
- Продолжительность сессии.
Обратите внимание, что в последней строке wtmp begins указано, с какого момента существует файл /var/log/btmp.
Если вам нужно получить подробную информацию об удаленных подключениях, то к команде добавится опция -d:
В результате в отдельной графе будет записан IP-адрес подключения.
2. История определённого пользователя
Когда компьютером пользуется сразу же несколько пользователей, информацию можно получить только по одному из них. Для этого утилите last нужно указать его имя. Рассмотрим все на примере пользователя root-user:
Если команда last выводит слишком большое количество информации, неудобное для изучения, то можно сократить количество строк. За это отвечает опция -n. Вот как будет выглядеть команда с ограничением на 4 строки:
Существует еще несколько вариантов ввода опции:
3. История за определённый день
С помощью опции -p добиться желаемого результата не выйдет, ведь она отображает информацию о сессиях только в конкретное время. Поэтому мы будем использовать опции -s и -t. Они задают время начала и конца сбора информации. В качестве примера возьмем 17 февраля 2022 года. Эта дата задается для -s. А для -t указывается следующий день:
last -s 2022-02-17 -t 2022-02-18
Обратите внимание на формат ввода даты. Если речь идет о вчерашнем дне, то вместо первого числа можно записать yesterday, а следующий день – today:
Для вывода информации за сегодняшний день для -s следует задать значение today, а -t просто не использовать:
4. История за определённый период
Как и в предыдущем случае, будут использоваться опции -s и -t. Но на этот раз можно указать любой временной промежуток. Форматы ввода данных те же самые, что и до этого. В качестве примера возьмем время с 2022-02-18 по 2022-02-23:
last -s 2022-02-18 -t 2022-02-24
Для -t мы указываем 24 число, потому что отчет данных берется с самого начала суток (00:00 на часах). Также вы можете указать точное время для начальной и конечной точки. В таком случае дату и время нужно вводить в несколько ином формате:
Вот пример команды в случае с временным промежутком от 17 февраля 04:57 до 19 февраля 08:15:
last -s ‘2022-02-17 04:57’ -t ‘2022-02-19 08:15’
5. Вывод хоста и имени пользователя (Заголовок 3) (-i/-R)
По умолчанию имя пользователя отображается в первом столбце, а имя хоста – в третьем.
Но при этом они могут быть записаны не в полном виде. Чтобы это исправить, используется опция -w:
При просмотре списка сеансов удаленного доступа будет полезной опция -i. Она заменяет имя хоста на IP-адрес пользователя:
Ну и еще упомянем опцию -R. При ее вводе команда last не станет выводить столбец с именем хоста:
6. Вывод полного времени
Изначально время начала и конца сеанса записывается в кратком формате. Получить подробную информацию можно через опцию -F:
Еще хотелось бы упомянуть опцию —time-format. С ее помощью можно полностью отключить показ даты и времени, за исключением продолжительности самой сессии:
А при просмотре сессий удаленного подключения полезным окажется следующий формат вывода:
В нем время и дата записываются по стандарту ISO-8601. При этом отдельно выводится часовой пояс подключившегося пользователя.
8. История перезагрузок
Все перезагрузки в Linux отмечаются как действие пользователя reboot в команде last. А для получения подробных сведений обо всех завершениях сеансов подойдет опция -x:
Мы уже описывали в начале статьи, за что отвечают пользователи shutdown и runlevel. Так что останавливаться на них не будем.
9. История неудачных входов
История неудачных входов хранится в файле /var/log/btmp. Для быстрого получения доступа к ней используется команда lastb. Но выполнять ее следует с правами супер-пользователя:
В остальном у нее такие же опции и синтаксис.
Выводы
В рамках данной статьи мы разобрались с особенностями и нюансами использования команды last Linux. С ее помощью получится посмотреть историю входов из системы и выходов для всех пользователей. В том числе и при удаленном подключении к ПК.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How long has my Linux system been running?
The uptime includes the time spent in a low-power state (standby, suspension or hibernation).
You can use uptime or last
To see only the last time
last reboot -F | head -1 | awk ''
The pseudo user reboot logs in each time the system is rebooted. Thus last reboot will show a log of all reboots since the log file was created.
it should be checked whether this works also for machines that have been running for more than one year, because I fear that the date format depends on how far away the date is (since the year is missing)
@WalterTross Thanks for notice. It’s possible to patch adding -F option so it will print the year too.
@Abdull Hi, even in my actual system (Ubuntu LTS — util-linux 2.34) the last reboot command does not require root priviledges and gives the same answer with or without sudo . (The same if I add the -F option). Note, however, that is last reboot not last boot . It is interesting/useful to know on which system/version you find it was needed (it may even depend on the specific local configuration — namely on which log file you are pointing/ have access too).
I usually use who -b , which produces output such as:
$ who -b system boot 2014-05-06 22:47 $
It tells me the date and time when the machine was last booted, rather than the time that has elapsed since it was last booted.
This command works on many other Unix systems too (Solaris, …).
It possible to use who -r (runlevel) too that produces an output like run-level 2 2014-05-06 22:47 with a number of words that should not depend from locale language settings (e.g. «system boot» 2 words, should be «Avvio di sistema» in Italian, 3 words)
@Octopus: On my Mac, I get different results from TZ=US/Pacific who -b and TZ=UTC0 who -b (Mac OS X 10.9.5 tested); likewise on Linux (Ubuntu 14.04 tested). That means it produces local time, where ‘local time’ is determined by the TZ environment variable. (If TZ is unset, it probably behaves as if it were TZ=UTC0 unless overridden by a setting in /etc/defaults or something similar.)
For date I get «jue abr 12 12:54:51 -03 2018». For uptime I get «12:53:30 up 30 days, 24 min. «. For who -b I get «system boot 1969-12-31 21:00»
@dstonek: was your system running in 1969? I thought not. it means you are probably getting an error from something and the -1 is translated to a time just before the Unix ‘epoch’. Output will vary with locale; you have demonstrated that.
With the uptime implementation from procps 3.3.6 or newer, this will perfectly do what you want:
$ uptime --since 2018-07-24 09:22:50
Use tuptime, you get all the information that you need, for example:
$ tuptime -e Startup: 1 at 08:03:58 10/08/15 Uptime: 6 hours, 56 minutes and 7 seconds Shutdown: OK at 15:00:05 10/08/15 Downtime: 17 hours, 8 minutes and 14 seconds Startup: 2 at 08:08:20 11/08/15 Uptime: 6 hours, 51 minutes and 38 seconds Shutdown: OK at 14:59:58 11/08/15 Downtime: 17 hours, 7 minutes and 46 seconds Startup: 3 at 08:07:45 12/08/15 Uptime: 6 hours, 50 minutes and 47 seconds Shutdown: OK at 14:58:32 12/08/15 Downtime: 17 hours, 5 minutes and 18 seconds Startup: 4 at 08:03:51 13/08/15 Uptime: 6 hours, 55 minutes and 12 seconds Shutdown: OK at 14:59:03 13/08/15 Downtime: 17 hours, 14 minutes and 20 seconds Startup: 5 at 08:13:24 14/08/15 Uptime: 1 hours, 28 minutes and 14 seconds System startups: 5 since 08:03:58 10/08/15 System shutdowns: 4 ok - 0 bad Average uptime: 5 hours, 48 minutes and 24 seconds Average downtime: 13 hours, 43 minutes and 7 seconds Current uptime: 1 hours, 28 minutes and 14 seconds since 08:13:24 14/08/15 Uptime rate: 29.74 % Downtime rate: 70.26 % System uptime: 1 days, 5 hours, 2 minutes and 1 seconds System downtime: 2 days, 20 hours, 35 minutes and 39 seconds System life: 4 days, 1 hours, 37 minutes and 40 seconds