Обновить настройки cookies

Как работать с 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 прокрутит другие варианты.

20250328_rSIK6FMv

Поиск через 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.

20250328_mCu9EClB

Интерактивное редактирование команд с помощью 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

Премиум выделенные серверы

Смотреть конфигурации