• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Як включити відмітку часу в історії Bash в Linux

Зміст

Для здійснення задач адміністрування linux-систем нерідко буває необхідним знати точний час виконання тієї або іншої команди, запущеної з терміналу. Функція history відноситься до однієї з частин аудиту сервера, стосовно безпеки. Однак, за замовчуванням вона не зберігає час виконання команди, і тому необхідно налаштовувати керуючу оболонку системи. І для цього необхідні знання її можливостей.

Призначення та різновиди командних оболонок Unix-подібних систем

Сучасні керуючі оболонки повинні відповідати, насамперед, стандарту POSIX (Portable Operating System Interface ), котрий стандартизує роботу операційної системи (ОС) з прикладними програмами, тобто, визначає API. Вони фактично є командними процесорами ОС, працюючими в режимі інтерпретатора, коли команда одразу ж запускається на виконання та миттєво виводиться на дисплей результат виконання по її завершенні. Будь-яка оболонка має у своєму складі, так звані, влаштовані команди, котрі завжди знаходяться в оперативній пам'яті та команди, реалізовані у вигляді окремих виконавчих файлів, котрі зберігаються на диску у визначених каталогах ОС та завантажуються до ОП по запиту. Звісно, час їх виконання буде трохи більший, але цим можна нехтувати.

Будь-яка керуюча оболонка стандартно виконує певні функції ОС. Наведемо основні з них:

  • Організація вводу / виводу.
  • Робота з файлами.
  • Керування порядком виконання задач.
  • Управління сценаріями.
  • Організація роботи з середовищем змінних.

Історично так склалося, що для ОС на базі 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

Результат виконання "стандартної"лщманди history

Як можна переконатися, позначка часу для історії Linux у списку відсутня. Розглянемо два варіанти, як можна увімкнути мітки часу засобами bash – тимчасово з терміналу та автоматично при перезавантаженні ОС.

Тимчасове увімкнення мітки часу в історії команд

Для увімкнення позначки часу в історії Linux встановимо змінну навколишнього середовища HISTTIMEFORMAT, котра відповідає за відображення відмітки часу для кожного запису в історії:

$ export HISTTIMEFORMAT='%F %T '

Ця функція експортує змінну, роблячи її доступною для похідних процесів. Параметри %F та %T визначають формат відображення дати та часу відповідно. Для дати встановлений формат – рр-мм-дд. Для часу – чч:хх:сс. Після цього знову запустимо на виконання функцію історії:

$ history

Результат виконання команди history з тимачасово включению міткою часу

Дивлячись на результат, можна переконатися, що мітка часу bash з'явилася для кожного запису у списку, тобто увімкнена. Звісно, можна змінити формат виводу дати, використовуючи додаткові параметри:

$ export HISTTIMEFORMAT='%d/%m/%y %T '

Тут встановлений формат виводу дати для міток часу у вигляді – дд/мм/рр. Переконаємося, що формат дати змінився:

$ history

Вивід команди history зі зміненим форматом дати

У випадку необхідності виводу історії Linux з датою лише для кількох останніх команд, введемо:

$ history | tail -3

Таким чином ми передали на вхід функції tail результати роботи history для останніх трьох команд. В результаті, буде виведений список лише з них, причому всі записи будуть мати позначку часу. Звісно, перед цим повинна бути встановлена змінна навколишнього середовища HISTTIMEFORMAT, як ми це зробили раніш. Поглянемо на вихід результатів на представленому нижче зображенні та переконаємося, що це працює.

Вивід обмеженої кількості команд із включеною міткою часу

Автоматична ініціалізація змінної HISTTIMEFORMAT для всіх процесів

У випадку, якщо нам потрібно, щоб мітка часу в історії bash постійно відображалася для записів в історії, можна налагодити автоматичну ініціалізацію змінної HISTTIMEFORMAT при перезавантаженні ОС. Для цього запустимо редактор nano та відредагуємо файл ~/.bashrc:

$ nano ~/.bashrc

Редагування файлу ~/.bashrc за допомогою редактора nano

На дісплей буде виведено вікно редактора. В кінець тексту додамо строку export HISTTIMEFORMAT='%F %T ', після чого збережемо зміни (CTRL+O) та вийдемо з редактора (CTRL+X). Щоб внесені нами зміни негайно почали діяти, введемо у терміналі:

$ source ~/.bashrc

Треба зазначити, що після внесених змін історія команд з міткою часу буде відображатися лише для поточного користувача. Для того, щоб вона відображалась для всіх користувачів системи, відредагуємо файл /etc/profile:

$ sudo nano /etc/profile

В його кінець додамо строку export HISTTIMEFORMAT='%F %T ', після чого збережемо зміни та вийдемо з редактора, слідуючи вказівкам при попередньому редагуванні.

Редагування файлу etc/profile за допомогою редактора nano

Щоб внесені зміни негайно почали діяти, запустимо відповідну функцію, як показано нижче:

$ 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
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA