В этой статье разберём:
- как посмотреть историю команд через
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
Так можно быстро вспомнить, что запускалось перед ошибкой или изменением состояния сервера.
Где хранится история команд
В Bash история обычно хранится в файле:
~/.bash_history
Символ ~ означает домашний каталог текущего пользователя. Например, для пользователя admin это может быть:
/home/admin/.bash_history
Посмотреть путь к файлу истории можно так:
echo $HISTFILE
А вывести последние строки из файла истории:
tail -30 ~/.bash_history
Важно: файл .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"
Это удобно, когда вы помните не всю команду, а только её часть: название пакета, службы, файла или утилиты.
Поиск по истории через 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. Она помогает восстановить последовательность действий, найти ошибочную команду и быстрее понять, что менялось на сервере перед проблемой.