Команда history в Linux: как посмотреть и повторить прошлые команды
Bash запоминает команды, которые вы набирали. Их можно посмотреть, найти и выполнить снова, не печатая заново. Ниже — как пользоваться историей и как убрать из неё то, что хранить не нужно.
Содержание 10
Что сделать прямо сейчас
- Подключитесь к серверу — инструкция.
- Нажмите на клавиатуре стрелку вверх: в строке появится прошлая команда. Ещё раз — команда перед ней. Enter выполнит её снова.
- Наберите
history— увидите список прошлых команд с номерами слева. - Чтобы увидеть только последние 20, наберите
history 20.
Как найти команду
| Способ | Как делать |
|---|---|
| поиск Ctrl+R | нажмите Ctrl+R и начните печатать часть команды, например nginx. Bash покажет последнюю подходящую команду |
| ещё раньше | нажмите Ctrl+R ещё раз — покажется более старая подходящая команда |
| выполнить найденное | Enter |
| исправить перед запуском | Esc: команда останется в строке, её можно поправить и нажать Enter |
| отменить поиск | Ctrl+G — строка вернётся, как была |
Все команды, где есть слово nginx, покажет history | grep nginx. О поиске по тексту подробно — Команда grep.
Как повторить команду
| Запись | Что выполнит bash |
|---|---|
!! | прошлую команду |
sudo !! | прошлую команду, но через sudo — когда забыли его написать |
!125 | команду номер 125 из списка history |
!-2 | команду, набранную две команды назад |
!systemctl | последнюю команду, которая начиналась с systemctl |
!$ | последнее слово прошлой команды, например имя файла |
^nignx^nginx | прошлую команду, заменив в ней nignx на nginx |
Будьте осторожны с !-подстановками для команд, которые удаляют файлы или перезагружают сервер: проверьте номер в history, прежде чем запускать.
Последнее слово прошлой команды можно вставить и клавишами: Alt+. (точка) или Esc, а затем точка. Тогда его видно до нажатия Enter.
Где хранится история
| Что | Как устроено |
|---|---|
| файл истории | ~/.bash_history в домашней папке, у каждого пользователя свой |
| когда пишется в файл | когда вы выходите из сеанса; до выхода команды хранятся в памяти |
| сколько команд помнит | столько, сколько в переменной HISTSIZE; если её не задали в файлах настройки, bash ставит 500 |
| сколько строк в файле | по переменной HISTFILESIZE |
Текущие значения покажут команды echo $HISTSIZE и echo $HISTFILESIZE.
Если открыто два окна с сервером, файл при выходе может перезаписать то окно, которое закрыли последним, и команды из первого пропадут. Чтобы bash дописывал историю в конец файла, а не перезаписывал его, нужна настройка shopt -s histappend. Проверить её — shopt histappend: ответ покажет on или off. Сохранить историю прямо сейчас, не выходя, — history -a.
Время у команд
Чтобы видеть, когда команда была набрана, задайте формат времени:
export HISTTIMEFORMAT='%F %T 'Теперь history покажет дату и время перед каждой командой, например 2026-10-11 14:05:31. Чтобы настройка действовала и после переподключения, допишите эту строку в конец файла ~/.profile — как править файл, в инструкции Редактор nano. У команд, набранных до этой настройки, точного времени нет.
Как удалить команду из истории
Если вы набрали команду с паролем, удалите её из истории:
- Найдите её номер:
history | tail -n 20. - Удалите строку по номеру, например 312:
history -d 312. - Запишите исправленную историю в файл:
history -w.
| Команда | Что делает |
|---|---|
history -d 312 | удалить команду номер 312 |
history -d 300-310 | удалить команды с 300 по 310 |
history -c | очистить всю историю в памяти |
history -w | записать историю из памяти в файл, заменив его |
history -c && history -w | очистить и историю, и файл |
Без history -w команда пропадёт только из памяти, а в файле может остаться.
Как не сохранять команду
Bash не сохраняет команды, которые начинаются с пробела, если в переменной HISTCONTROL есть ignorespace или ignoreboth. Проверьте: echo $HISTCONTROL.
| Значение HISTCONTROL | Что не попадает в историю |
|---|---|
| ignorespace | команды, начатые с пробела |
| ignoredups | повтор той же команды подряд |
| ignoreboth | и то, и другое |
| erasedups | прежние копии команды удаляются, остаётся последняя |
Если ответ пустой, сохраняется всё. Чтобы включить, допишите в ~/.profile строку export HISTCONTROL=ignoreboth.
Надёжнее не набирать пароли в командах совсем: программы, которые их просят, умеют спрашивать пароль отдельно, и тогда он не попадает в историю.
Ошибки и как их исправить
| Что видно | Что значит | Что сделать |
|---|---|---|
| команд прошлого сеанса нет в истории | они не записались в файл или его перезаписало другое окно | сохраняйте вручную history -a; о двух окнах |
команда с ! в тексте ведёт себя странно | bash понял ! как подстановку из истории | берите текст в одинарные кавычки: echo 'Готово!' |
!125 выполнил не ту команду | номера сдвинулись после удаления или очистки | сначала посмотрите history, затем запускайте |
| удалённая команда снова в истории | не записали файл | после history -d выполните history -w |
| команда с пробелом в начале сохранилась | в HISTCONTROL нет ignorespace | как включить |
Источники
- Справка bash для Ubuntu 24.04 — команда history и её ключи -c, -d, -a, -w, переменные HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL и HISTTIMEFORMAT, раздел HISTORY EXPANSION, поиск Ctrl+R.
Сверено 11 октября 2026 года.
Что почитать дальше
- Команда grepпоиск по выводу и файлам.
- Команда aliasкороткие имена для длинных команд.
- Редактор nanoкак править файлы настроек.
- Команды Linux для новичкашпаргалка по командам.
Проверено и обновлено: 11.10.2026