Нередко Администраторам серверов, работающих под управлением Linux-подобных операционных систем, необходима информация о точном времени запуска той или иной команды, запускавшейся в системе в последнее время. И, хотя, стандартные средства управления командной оболочки Bash предусматривают наличие функции вывода последних запущенных в системе команд, вывод даты и времени их выполнения по умолчанию отключен. Поэтому, необходимо специально включить временную отметку, чтобы такая информация появлялась вместе со списком выводимых команд. Причём сделать это можно по-разному. Рассмотрим этот вопрос более детально на конкретных примерах.
Возможности функции history командного интерпретатора Bash
Функция history относится к числу встроенных средств оболочки и, соответственно, выполняется значительно быстрее своих внешних аналогов. Функция «запоминает» около одной тысячи последних введённых пользователем управляющих инструкций, список которых, как правило, хранится в директории .bash_history домашнего каталога текущего пользователя.
Для примера, введём её в командной строке Bash нашей системы Ubuntu, чтобы просмотреть список последних запущенных команд:
$ history
Как видим, функция действительно способна запоминать по нескольку сотен управляющих инструкций, в нашем случае их число составило 394. Все они были запущены текущим пользователем, начиная от первого запуска системы. Однако, как и предполагалось, время их запуска не было выведено.
Существует два способа для включения временной отметки. Первый из них обеспечивает вывод отметки времени на период работы текущего сеанса пользователя и, поэтому, является временным. Второй способ требует настройки конфигурационных файлов, что гарантирует автоматическое включение временной отметки при каждой загрузке системы. Рассмотрим эти способы по отдельности.
Временное включение функции вывода даты и времени запуска команд
Здесь необходимо воспользоваться внутренними возможностями оболочки, которые позволяют экспортировать значения переменной окружения HISTTIMEFORMAT, чтобы сделать их доступными для других процессов.
Управляющая инструкция для экспорта при этом будет иметь следующий вид:
$ export HISTTIMEFORMAT='%d/%m/%y %T'
Где %d/%m/%y – формат выводимой функцией history даты (дд/мм/гг), %T – формат выводимого времени (чч:мм:сс).
Проверим результат с помощью history. Для этого наберём в терминале:
$ history
Можно убедиться, что формат вывода изменился, теперь стала доступной информация о дате и времени запуска команд, что нам и было нужно. Однако здесь хотелось бы отметить один очень важный момент. Как видно из представленной ниже выборки результатов, дата и время начали изменяться только для последних введённых команд, а для всех предыдущих зафиксировано время выполнения последней инструкции, выполненной до установки отметки времени (exit). Это связано с тем, что эти команды относятся к предыдущему сеансу работы этого же пользователя, когда отметка времени ещё не была активирована. Однако для всех управляющих инструкций текущего сеанса дата и время выводятся верно.
389 28/11/23 14:48:11ls
390 28/11/23 14:48:11cd root
391 28/11/23 14:48:11exit
392 28/11/23 14:48:11nano .config/syncthing/config.xml
393 28/11/23 14:48:11exit
394 28/11/23 14:48:11history
395 28/11/23 14:48:11exit
396 28/11/23 14:52:48export HISTTIMEFORMAT='%d/%m/%y %T'
397 28/11/23 14:55:20history
Само собой, форматы вывода, как даты, так и времени мы можем изменять на своё усмотрение. Например, для вывода даты в формате гггг/мм/дд команда будет иметь следующий вид:
$ export HISTTIMEFORMAT='%F %T'
Проверяем:
$ history
Получили ожидаемый результат.
Включение отметки времени в истории в автоматическом режиме
В этом случае инициализация переменной HISTTIMEFORMAT будет происходить в автоматическом режиме при каждой загрузке системы. Очевидно, это наиболее приемлемый вариант для Администратора. Для реализации указанного режима необходимо отредактировать файл сценария с названием .bashrc, который хранит настройки для терминальной сессии. Файл находится в домашнем каталоге пользователя и выполняется каждый раз при его входе в систему.
Отредактируем указанный файл. Для этого наберём в терминале следующую команду:
$ nano ~/.bashrc
В окне открывшегося файла снизу добавим строчку export HISTTIMEFORMAT='%f %t', как показано ниже.
Сохраним внесённые изменения и выйдем из редактора (команда ctrl+X).
Необходимо иметь в виду, что автоматическое включение временной метки будет происходить лишь для того пользователя, во время сеанса которого она была установлена. Для всех остальных это работать не будет. Для того чтобы это касалось абсолютно всех пользователей системы, нужно отредактировать общесистемный файл, который управляет установкой переменных окружения Bash по умолчанию.
Введём в терминале:
$ nano /etc/profile
В конец файла добавим ту же строку, что и в предыдущем случае.
Сохраним изменения и вернёмся в терминальный режим.
Внесённые в систему изменения начнут действовать сразу же после перезапуска изменённого файла с помощью соответствующей встроенной команды Bash, например, source.