Как работать с bash-историей в Linux
Знание основных приёмов работы с историей позволяет быстро искать, повторять и редактировать ранее введённые команды в Linux, экономя время и снижая риск опечаток. Кроме того, возможности настройки и очистки истории помогают обеспечить безопасность, скрывая конфиденциальные данные.В этой статье:
- Как просматривать историю команд.
- Как искать нужные команды.
- Как повторять и изменять предыдущие команды.
- Как пользоваться интерактивным редактированием команд через fc.
- Настройки и файлы конфигурации Bash.
- Практические примеры и сценарии.
Основные команды для работы с историей
Команда history - показывает список последних введённых команд в оболочке bash с нумерацией.root@EuroHoster:~# history
1 ls /
2 pwd
3 du -sh /
4 ping 8.8.8.8
5 history
6 date
7 apt-get install sl
8 apt update
9 du -sh /
Команда history N — выводит последние N команд.
root@EuroHoster:~# history 5
5 history
6 date
7 apt-get install sl
8 apt update
9 du -sh /
Другие полезные команды при работе с историей в Linux
Помимо стандартных приёмов существуют дополнительные инструменты, позволяющие глубже контролировать и анализировать журналы команд, рассмотрим и их.Повторение команд по номеру
!<номер> — повторить команду с определённым номером из списка history.root@EuroHoster:~# !2
pwd
/root
root@EuroHoster:~#
Повторение предыдущей команды
!! — повторяет последнюю команду. Крайне полезно, если вы забыли что-то дописать.root@EuroHoster:~# ping
ping: usage error: Destination address required
root@EuroHoster:~# !! 8.8.8.8
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=120 time=0.560 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=120 time=0.534 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=120 time=0.591 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=120 time=0.526 ms
--- 8.8.8.8 ping statistics ---
Повторение команды по совпадению
!<часть_команды> — повторяет последнюю команду, начинающуюся на указанную подстроку.root@EuroHoster:~# !du
du -sh /
5.7G /
Непосредственный поиск (Ctrl + R)
При активном использовании терминала важным навыком становится быстрая навигация по истории.Ниже рассмотрим несколько способов отыскать нужную команду среди уже введённых.
Нажмите Ctrl + R и начните вводить подстроку; оболочка покажет последнюю команду, в которой есть это совпадение. Повторное нажатие Ctrl + R прокрутит другие варианты.

Поиск через grep
Можно отфильтровать историю:root@EuroHoster:~# history | grep figlet
23 28 Mar 2025 10:46:53 apt-get install figlet
24 28 Mar 2025 10:46:58 figlet Hello
26 28 Mar 2025 10:47:24 figlet "Hello" | lolcat
42 28 Mar 2025 11:06:03 history | grep figlet
Редактирование и корректировка команд
Порой нужно быстро исправить опечатку или изменить один из аргументов в недавно выполненной команде.Сделать это можно несколькими способами, рассмотрим их подробнее.
Быстрое редактирование предыдущей команды
Нажмите стрелку вверх, внесите изменения, нажмите Enter.
Интерактивное редактирование команд с помощью fc
Команда fc (fix commands) открывает последние команды в выбранном текстовом редакторе для правки перед повторным выполнением.По умолчанию Bash использует редактор, указанный в переменной окружения EDITOR или VISUAL (например, vim или nano).
fc без параметров откроет последнюю команду; с параметрами можно указать диапазон.
Пример:
fc -1 -5
Откроет последние 5 команд (с -5 по -1 включительно) в редакторе. После сохранения и выхода из редактора все эти команды выполнятся заново (уже с учётом ваших исправлений).Обращение к аргументам предыдущей команды
!$ — последний аргумент предыдущей команды.!^ — первый аргумент предыдущей команды.
!:n — n-й аргумент предыдущей команды.
!:- — все аргументы предыдущей команды (без названия самой команды).
Настройка истории
Переменные окружения
HISTSIZE — количество команд для текущей сессии.HISTFILESIZE — общее количество строк, хранящихся в ~/.bash_history
Пример настройки в ~/.bashrc
export HISTSIZE=1000
export HISTFILESIZE=2000
Игнорирование дублирующих команд
export HISTCONTROL=ignoredups — не записывает подряд идущие дубли.Существует также опция ignorespace — при её включении команды, начинающиеся с пробела, не попадают в историю.
Конфигурационные файлы Bash
В разных дистрибутивах могут использоваться разные конфигурационные файлы:~/.bashrc — обычно для интерактивных shell-сессий.
~/.bash_profile или ~/.profile — для сессий при входе в систему.
Именно в эти файлы вы вносите изменения переменных окружения (HISTSIZE, HISTIGNORE и пр.). Также можно включить:
shopt -s histappend
Чтобы новые команды не перезаписывали историю, а дописывались в конец файла ~/.bash_history, что особенно полезно при работе в нескольких терминалах.Безопасность и секретные данные
Ваша история может включать пароли, токены или ключи. Чтобы избежать записи таких строк в историю, можно:- Вводить команду, начиная с пробела (если включён ignorespace).
- Прописать шаблоны в HISTIGNORE (например, 'passwd*').
- Использовать переменные окружения для хранения конфиденциальной информации.
Дополнительные настройки безопасности:
HISTIGNORE позволяет игнорировать конкретные команды и шаблоны. Пример:export HISTIGNORE="ls:cd:exit:clear"
Имеется также возможность периодически очищать историю (history -c), но делать это следует осторожно, чтобы не потерять полезные данные.Практические примеры и сценарии
Ниже несколько типичных ситуаций, где работа с историей Bash экономит массу времени.Быстрый запуск команды установки пакета:
history | grep apt
Выведите все команды с apt, найдите нужную (например, apt-get install <пакет>), и запустите по номеру: !<номер>Также можно использовать (Ctrl + R) для поиска по истории
Исправление опечатки:
nano /ect/hosts
Поняли, что опечатка в "ect" вместо "etc". Выполните: fc и отредактируйте.Если команда была выполнена с ошибкой, например опечаткой в имени директории…
rsync -avz root@IP:/home_dir1 /home_dir1
Допустим опечатка в home_dir1 в таком случае выполним:fc -s home_dir1=home_dir2
Будет выполнено изменение двух директорий home_dir1 на новую home_dir2 и команда rsync будет запущена.Копирование файла и дальнейшая работа с ним:
cp /path/to/myfile.txt /tmp
Затем сразу смотреть файл:less !$
Здесь !$ подставляет /tmp — последний аргумент предыдущей команды.Заключение
История Bash и экспансии позволяют сэкономить массу времени, когда вы часто повторяете одни и те же команды или ищете что-то, что делали ранее. Достаточно знать команду history, комбинацию Ctrl + R, а также !!, !<часть_команды> и некоторые дополнения (например, !$ и !^).Для дополнительного удобства и безопасности:
- Используйте fc для интерактивного редактирования.
- Настройте histappend и HISTCONTROL.
- Будьте осторожны с конфиденциальными данными.
- Изучайте дополнительные переменные (например, HISTIGNORE) и горячие клавиши Bash.
С опытом все эти приёмы помогут вам работать в терминале быстрее, безопаснее и эффективнее.
28 Mar 2025, 12:10:45