Нерідко Адміністраторам серверів, які працюють під керуванням 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.