Вопрос или проблема
journalctl
имеет флаг -o short-unix
, который я могу использовать для изменения формата даты вывода на такие вещи, как -t systemd-sleep.
Но единственный способ, который я нашел, чтобы перечислить загрузки, это --list-boots
, но этот вариант, похоже, не подчиняется флагу -o
.
Есть ли способ заставить journalctl перечислить загрузки с метками времени unix? Поскольку systemd здесь надолго, я боюсь, что другие методы могут перестать работать в будущем, но я также открыт для таких предложений.
Вы можете, однако, преобразовать эти поля в метки времени unix.
То есть:
journalctl --list-boots | awk '{ d2ts="date -d \""$3" "$4" " $5"\" +%s"; d2ts | getline $(NF+1); close(d2ts)} 1'
Вы можете использовать альтернативный инструмент под названием tuptime
, чтобы получить точно такую же информацию. Например:
tuptime -bits
Используемые опции:
-b, показать идентификатор загрузки
-i, номер старта в обратном счете
-t, перечислить жизнь системы в виде таблицы
-s, вывод времени в секундах и эпохе
И они производят вывод, похожий на:
No. Boot ID Startup T. Uptime Shutdown T. End Downtime
-2 7d11db6e-f840-4d76-b727-7029ac5cf19c 1732303355 106 1732303461 OK 46483
-1 c89edbf8-32d0-42d3-8dc7-a1d8a6ddb1b7 1732349944 13318 1732363262 OK 8756
0 09df066a-0a26-41a9-be94-a0823f4e6e53 1732372018 3496
Раскрытие: Я создатель этого инструмента
Ответ или решение
Чтобы получить список загрузок с использованием временных меток Unix с помощью команды journalctl
, необходимо учитывать некоторые особенности работы этой утилиты и сопутствующих инструментов.
Использование journalctl
для получения информации о загрузках
По умолчанию команда journalctl --list-boots
отображает информацию о загрузках, но, к сожалению, она не поддерживает изменение формата вывода в формате временных меток Unix с помощью флага -o
. Тем не менее, вы можете использовать комбинацию стандартных инструментов Unix, таких как awk
, для преобразования вывода в нужный формат.
journalctl --list-boots | awk '{ d2ts="date -d \""$3" "$4" " $5"\" +%s"; d2ts | getline $(NF+1); close(d2ts)} 1'
В этом примере мы используем awk
для обработки вывода journalctl
. Скрипт извлекает дату и время, конвертирует их в Unix-время и добавляет результат в последнюю колонку. Давайте рассмотрим детали данного решения:
- $3, $4, $5: Это колонки, содержащие дату и время из вывода
journalctl --list-boots
. date -d
: Команда, которая преобразует строку даты и времени в Unix-время при помощи формата+%s
.getline $(NF+1)
: Считывает результат преобразования и добавляет его в конец текущей строки.
Альтернативный подход: использование tuptime
Если вы хотите упростить процесс и получить заведомо точную информацию о загрузках и их временных метках, вы можете использовать утилиту tuptime
. Эта программа является более специализированным инструментом для мониторинга загрузок системы и предлагает удобный интерфейс.
С помощью tuptime
вы можете легко получить информацию о загрузках со следующими опциями:
tuptime -bits
Здесь опции означают:
- -b: отображает идентификатор загрузки.
- -i: номер старта в обратном порядке.
- -t: перечисляет время работы системы в виде таблицы.
- -s: выводит время в секундах и в формате epoch.
Пример вывода tuptime
:
No. Boot ID Startup T. Uptime Shutdown T. End Downtime
-2 7d11db6e-f840-4d76-b727-7029ac5cf19c 1732303355 106 1732303461 OK 46483
-1 c89edbf8-32d0-42d3-8dc7-a1d8a6ddb1b7 1732349944 13318 1732363262 OK 8756
0 09df066a-0a26-41a9-be94-a0823f4e6e53 1732372018 3496
Заключение
В результате, хотя journalctl --list-boots
и не поддерживает прямой вывод временных меток Unix, вы можете использовать комбинацию команд Unix для преобразования вывода. Либо вы можете обратиться к утилите tuptime
, которая предоставляет аналогичную информацию с удобным форматом. Расширенные возможности tuptime
делают её отличным выбором для отслеживания состояния загрузок системы.
Это решение будет актуально и надежно, так как systemd
продолжает расширяться и интегрироваться в современные дистрибутивы Linux.