Как посмотреть историю выполненных команд на VPS?

В этой статье разберём:

  • как посмотреть историю команд через history;
  • где хранится файл истории Bash;
  • как искать нужные команды в истории;
  • как включить дату и время для команд;
  • как очистить историю при необходимости;
  • какие ограничения есть у истории команд на VPS.

Как быстро посмотреть историю команд

Самый простой способ — команда history. Она показывает список команд, которые выполнялись в текущем shell-пользователе.

history

Обычно вывод выглядит так:

  101  sudo apt update
  102  sudo apt install nginx
  103  sudo systemctl status nginx
  104  sudo nano /etc/nginx/sites-available/default
  105  sudo nginx -t

Слева указан номер команды в истории, справа — сама команда. Если история большая, удобнее смотреть только последние строки:

history | tail -30
Просмотр последних команд через history tail

Так можно быстро вспомнить, что запускалось перед ошибкой или изменением состояния сервера.

Где хранится история команд

В Bash история обычно хранится в файле:

~/.bash_history

Символ ~ означает домашний каталог текущего пользователя. Например, для пользователя admin это может быть:

/home/admin/.bash_history

Посмотреть путь к файлу истории можно так:

echo $HISTFILE

А вывести последние строки из файла истории:

tail -30 ~/.bash_history
Файл bash history с историей команд на VPS

Важно: файл .bash_history обычно обновляется после завершения shell-сессии. Поэтому команды из текущего открытого терминала могут быть видны в history, но ещё не попасть в файл ~/.bash_history.

Как искать нужные команды в истории

Если нужно найти конкретную команду, удобно использовать grep. Например, найти все команды, где встречался apt:

history | grep apt

Найти команды с systemctl:

history | grep systemctl

Найти команды, связанные с SSH:

history | grep ssh

Можно искать сразу несколько вариантов:

history | grep -E "apt|systemctl|nginx|ssh"
Поиск команд в истории через grep

Это удобно, когда вы помните не всю команду, а только её часть: название пакета, службы, файла или утилиты.

Поиск по истории через Ctrl+R

В Bash есть быстрый интерактивный поиск по истории команд. Нажмите:

Ctrl+R

После этого начните вводить часть команды, например:

systemctl

Терминал покажет последнюю подходящую команду из истории. Если нужно найти более раннее совпадение, можно нажимать Ctrl+R повторно.

Полезные действия:

  • Enter — выполнить найденную команду;

  • стрелка вправо/влево — вставить команду в строку и отредактировать;

  • Ctrl+C — отменить поиск.

Совет: если команда опасная, не нажимайте Enter сразу. Лучше сначала вывести её в строку, проверить глазами и только потом запускать.

Как включить дату и время в истории команд

По умолчанию команда history часто показывает только номера и команды, без даты и времени. Для диагностики удобнее видеть, когда именно команда была выполнена.

Временно включить отображение времени можно так:

HISTTIMEFORMAT="%F %T " history | tail -30

Формат:

  • %F — дата в формате год-месяц-день;

  • %T — время в формате часы:минуты:секунды.

История команд с датой и временем

Чтобы включить такой формат постоянно, добавьте строку в файл ~/.bashrc:

echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
source ~/.bashrc

После этого новые команды в истории будут отображаться с датой и временем.

Как настроить размер истории команд

За размер истории отвечают переменные HISTSIZE и HISTFILESIZE.

Посмотреть текущие значения:

echo $HISTSIZE
echo $HISTFILESIZE
  • HISTSIZE — сколько команд хранится в памяти текущей shell-сессии;

  • HISTFILESIZE — сколько строк хранится в файле истории.

Чтобы увеличить размер истории, добавьте в ~/.bashrc:

echo 'HISTSIZE=10000' >> ~/.bashrc
echo 'HISTFILESIZE=20000' >> ~/.bashrc
source ~/.bashrc

Это полезно, если сервером пользуются часто и история быстро перезаписывается.

Как не записывать дубли и лишние команды

Иногда в истории много повторов: одна и та же команда идёт подряд несколько раз. Это можно настроить через переменную HISTCONTROL.

Добавьте в ~/.bashrc:

echo 'HISTCONTROL=ignoreboth' >> ~/.bashrc
source ~/.bashrc

Параметр ignoreboth объединяет два поведения:

  • ignorespace — не сохранять команды, которые начинаются с пробела;

  • ignoredups — не сохранять повторяющиеся подряд команды.

Например, если перед командой поставить пробел, она не попадёт в историю:

 secret-command

Важно: не стоит использовать это как способ скрывать опасные действия. История Bash — не полноценный аудит безопасности, а удобный журнал для пользователя.

Как очистить историю команд

Иногда историю нужно очистить: например, если случайно ввели чувствительные данные в командной строке. Сделать это можно так:

history -c

Команда очищает историю текущей сессии. Чтобы перезаписать файл истории пустым состоянием:

history -w

Можно очистить сам файл:

> ~/.bash_history

После этого стоит выйти из сессии и войти снова.

Осторожно: очистка истории может затруднить диагностику. Если сервер рабочий, лучше не удалять историю без причины.

Как посмотреть историю команд другого пользователя

История команд хранится отдельно для каждого пользователя. Например:

/home/admin/.bash_history
/root/.bash_history

Если у вас есть права sudo, можно посмотреть историю root:

sudo tail -30 /root/.bash_history

Историю другого пользователя:

sudo tail -30 /home/username/.bash_history

Но важно помнить: доступ к истории других пользователей — это административное действие. На рабочем сервере такие проверки должны быть оправданы: диагностика, расследование ошибки, восстановление действий после сбоя.

Ограничения истории команд

История Bash полезна, но у неё есть ограничения.

  • Команды могут не попасть в файл, если сессия ещё открыта.

  • Пользователь может очистить свою историю.

  • Команды из разных терминалов могут записываться не сразу и иногда перетирать друг друга.

  • История не всегда показывает результат команды — только сам факт запуска.

  • Если использовался другой shell, например zsh, файл истории будет другим.

Для полноценного аудита действий лучше использовать отдельные механизмы логирования и контроля доступа. Но для обычной диагностики history почти всегда помогает.

Частые ошибки и полезные замечания

  • Файл ~/.bash_history пустой

    Команды текущей сессии могли ещё не сохраниться. Посмотрите history или выйдите из терминала и зайдите снова.

  • В истории нет дат

    По умолчанию даты могут не отображаться. Используйте HISTTIMEFORMAT.

  • Команды с паролями попали в историю

    Не передавайте пароли прямо в командной строке. Если уже попали — удалите конкретные строки или очистите историю.

  • Команды из одной SSH-сессии не видны в другой

    История может записываться в файл только при завершении сессии. Это обычное поведение Bash.

Итоги

  • Научились смотреть историю команд через history.

  • Разобрали файл ~/.bash_history и особенности его обновления.

  • Научились искать нужные команды через grep и Ctrl+R.

  • Включили отображение даты и времени через HISTTIMEFORMAT.

  • Разобрали настройку размера истории, удаление записей и ограничения Bash history.

Вывод: история команд — простой и полезный инструмент для работы с VPS. Она помогает восстановить последовательность действий, найти ошибочную команду и быстрее понять, что менялось на сервере перед проблемой.

Оставить комментарий