Статья также доступна на украинском (перейти к просмотру).
Содержание
- Назначение и разновидности командных оболочек Unix-подобных систем
- История команд Linux с меткой времени
- Временное включение метки времени в истории команд
- Автоматическая инициализация переменной HISTTIMEFORMAT для всех процессов
Для осуществления задач администрирования linux-систем нередко бывает необходимо знать точное время выполнения той или иной команды, запущенной из терминала. Функция history относится к одной из частей аудита сервера по безопасности. Однако, по умолчанию, она не сохраняет время выполнения команды, и поэтому необходимо настраивать управляющую оболочку системы. И для этого необходимы знания его возможностей.
Назначение и разновидности командных оболочек Unix-подобных систем
Современные управляющие оболочки должны соответствовать, прежде всего, стандарту POSIX (Portable Operating System Interface), который стандартизирует работу операционной системы (ОС) с прикладными программами, то есть определяет API. Они фактически являются командными процессорами операционной системы, работающими в режиме интерпретатора, когда команда сразу же запускается на выполнение и мгновенно выводится на дисплей результат выполнения по ее завершению. Любая оболочка имеет в своем составе так называемые устроенные команды, которые всегда находятся в оперативной памяти и команды, реализованные в виде отдельных исполнительных файлов, которые хранятся на диске в определенных каталогах ОС и загружаются в ОП по запросу. Конечно, время их выполнения будет немного больше, но этим можно пренебрегать.
Любая управляющая оболочка стандартно выполняет определенные функции операционной системы. Приведем основные из них:
- Организация ввода/вывода.
- Работа с файлами.
- Управление порядком выполнения задач.
- Управление сценариями.
- Организация работы со средой переменных.
$ history
Как можно убедиться, отметка времени для истории Linux в списке отсутствует. Рассмотрим два варианта, как можно включить метки времени по средствам bash – временно с терминала и автоматически при перезагрузке ОС.
Временное включение метки времени в истории команд
Для включения отметки времени в истории Linux установим переменную окружающей среды HISTTIMEFORMAT, отвечающую за отображение отметки времени для каждой записи в истории:
$ export HISTTIMEFORMAT='%F %T '
Эта функически так сложилось, что для операционной системы на базе Unix стандартной признана оболочка sh (Bourne shell), в соответствии с названием исполнительного файла интерпретатора. Однако время не стоит на городе и идет постоянный поиск нового и более совершенного. В результате появились такие средства управления ОС, как ksh, csh, bash и dash, имеющие между собой много общего и все они опираются на sh. Наиболее популярной оболочкой для linux-систем является bash, которая приняла, в частности, синтаксис и ключевые слова от sh, а некоторые функции, в том числе и историю – от ksh и csh. Эта управляющая оболочка в основном отвечает требованиям стандарта POSIX, но с рядом расширений. Она позволяет выполнять скриптовые сценарии, совместимые с sh, за исключением тех, которые используют устроенные команды sh или ссылаются на специальные переменные. В целом, она более гибкая и перспективная по сравнению с sh, чем и объясняется ее популярность. И поэтому у всех ОС на базе Linux bash есть заранее установленная программа.
История команд Linux с меткой времени
Управляющие оболочки запоминают последние команды, введенные в терминале, количество которых может достигать 1000, в зависимости от дистрибутива Linux. Однако, как отмечалось выше, стандартные возможности функции history не предполагают наличия метки времени для записей из списка. Это также относится и к bash, которая хранит список команд в файле .bash_history в домашнем каталоге Linux. Введем в терминале:
$ history
ция экспортирует переменную, что делает ее доступной для производных процессов. Параметры %F и %T определяют формат отображения даты и времени соответственно. Для даты установлен формат – рр-мм-дд. Для времени – чч:хх:сс. После этого снова запустим на выполнение функцию истории:
$ history
Глядя на результат, можно убедиться, что метка времени bash появилась для каждой записи в списке, то есть включена. Конечно, можно изменить формат вывода даты, используя дополнительные параметры:
$ export HISTTIMEFORMAT='%d/%m/%y %T '
Здесь установлен формат вывода даты для меток времени в виде – дд/мм/гг. Убедимся, что формат даты изменился:
$ history
Вывод команды history с измененным форматом даты
В случае необходимости вывода истории Linux с датой только для нескольких последних команд, введем:
$ history | tail -3
Таким образом, мы передали на вход функции tail результаты работы history для последних трех команд. В результате будет выведен список только из них, причем все записи будут иметь отметку времени. Конечно, перед этим должна быть установлена ??переменная окружающей среды HISTTIMEFORMAT, как мы это сделали раньше. Взглянем на выход результатов на представленном ниже изображении и убедимся, что это работает.
Автоматическая инициализация переменной HISTTIMEFORMAT для всех процессов
В случае если нам нужно, чтобы метка времени в истории bash постоянно отображалась для записей в истории, можно наладить автоматическую инициализацию переменной HISTTIMEFORMAT при перезагрузке операционной системы. Для этого запустим редактор nano и отредактируем файл ~/.bashrc:
$ nano ~/.bashrc
На экран будет выведено окно редактора. В конце текста добавить строку export HISTTIMEFORMAT='%F %T ', после чего сохраним изменения (CTRL+O) и выйдем из редактора (CTRL+X). Чтоб внесенные нами конфигурации начали действовать немедленно, введем в терминале:
$ source ~/.bashrc
Следует отметить, что после внесенных изменений история команд будет отображаться только для текущего пользователя. Чтобы она отображалась для всех пользователей системы, отредактируем файл /etc/profile:
$ sudo nano /etc/profile
В конце добавим строку export HISTTIMEFORMAT='%F %T ',
после чего сохраним изменения и выйдем из редактора, следуя указаниям при предварительном редактировании.
Чтобы внесенные изменения немедленно начали действовать, запустим соответствующую функцию, как показано ниже:
$ sudo source /etc/profile
Таким образом мы настроили автоматическое отображение меток времени в истории Linux средствами bash для всех пользователей ОС, независимо от типа их профиля.
Приглашаем Вас использовать наш качественный VPS сервис.
KVM виртуализация, гарантированные ресурсы, место для резервных копий, автоматическое хранение образов виртуальных машин на двух независимых бекаповых серверах, поддержка 24/7, более 15 различных шаблонов для автоматического создания виртуальных машин.
Подписывайтесь на наш телеграмм канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш канал YouTube на youtube.com/freehostua.
При написании статьи использовались материалы Марины Ермолаевой, Игоря Рудника и YouTube канала Webcom Academy, а также Ильи Русакова из блога Serpstat.
Мы что-то упустили, в чем ошиблись?
Объясните это в комментариях, и мы обязательно обсудим это.
Дата: 14.06.2022 Автор: Евгений
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus