Оболочка bash – это стандартная терминальная среда, включенная в большинство дистрибутивов Linux, включенная в macOS и доступная для установки в Windows 10. Она запоминает введенные вами команды и сохраняет их в файле истории. Вы, вероятно, знаете некоторые основы истории bash, но она намного мощнее, чем вы думаете.
Горячие клавиши
Для прокрутки истории bash вы можете использовать несколько полезных сочетаний клавиш в bash. Нажмите эти ярлыки и команды, которые вы использовали ранее, появятся в приглашении.
- Стрелка вверх или Ctrl + P . Переход к предыдущей команде в истории. Нажмите клавишу несколько раз, чтобы перейти назад к командам, которые вы использовали.
- Стрелка вниз или Ctrl + N : переход к следующей команде в вашей истории. Нажмите клавишу несколько раз, чтобы перейти к командам, которые вы использовали.
- Alt + R : отменить любые изменения в команде, которую вы извлекли из своей истории, если вы отредактировали ее в текущей строке.
Bash также имеет специальный режим «отзыва», который вы можете использовать для поиска команд, которые вы ранее выполняли, вместо того, чтобы прокручивать их одну за другой.
- Ctrl + R : вызвать последнюю команду, соответствующую указанным символам. Нажмите этот ярлык и начните вводить команду для поиска в истории Bash.
- Ctrl + O . Запустите найденную команду с помощью Ctrl + R.
- Ctrl + G . Выйдите из режима поиска в истории без выполнения команды.
Просмотр вашей истории Bash
Вы можете распечатать всю историю bash на экране, выполнив одну команду:
История
Вы увидите список всех команд в истории Bash, а также номер слева от каждой из них. Команда с «1» рядом с ней является самой старой командой в вашей истории bash, в то время как команда с наибольшим номером является самой последней.
С выходом вы можете делать все что угодно. Например, вы можете передать его в команду grep
для поиска в истории команд.
история | grep your_search
Вы также можете передать его в команду tail
, чтобы просмотреть только небольшое количество последних команд, которые вы выполняли. Например, следующая команда покажет последние 5 записей в вашей истории.
история | хвост -5
Запустить команды из вашей истории
Bash может быстро «развернуть» предыдущие команды или развернуть их и модифицировать их. Эта функция известна как «расширение истории» и использует восклицательный знак, известный как «взрыв». Просто введите их в командной строке и нажмите Enter, чтобы запустить их так же, как и любую другую команду.
Чтобы запустить конкретную команду из вашей истории по ее номеру, используйте следующую команду:
#!
Например, допустим, вы хотели запустить 12-ю команду из своей истории bash. Это команда с «12» слева от нее, когда вы запускаете команду history
. Вы вводите следующую команду.
! 12
Для повторного запуска последней выполненной команды введите следующее. Это имеет тот же эффект, что и нажатие стрелки вверх один раз для просмотра предыдущей команды, а затем нажатие клавиши Enter.
!!
Вы также можете обратиться к команде на определенное количество строк назад. Например, ! - 2
будет запускать вторую команду, которую вы выполнили последней. !!
означает то же самое, что и ! - 1
.
Это расширение работает в любом месте на линии. Вы можете добавить все что угодно до или после !!
или любое другое выражение в этом разделе. Например, вы можете ввести следующую команду, чтобы повторно запустить последнюю команду, которую вы выполнили через sudo
, предоставив ей привилегии root. Это особенно полезно, если вы забыли добавить sudo
перед выполнением команды.
sudo !!
Или, например, вы можете повторно запустить предыдущую команду и направить ее вывод в grep для поиска некоторого текста.
!! | текст grep
Чтобы найти команду в своей истории и запустить ее, введите следующее. Это запустит последнюю команду, которая соответствует указанному вами тексту:
! Текст
Итак, если вы недавно запускали команду, которая начиналась с ping
, вы можете запустить следующую команду для ее поиска. Это выполнит поиск в истории, найдет самую последнюю команду, которая начинается с « pi
», и сразу же запустит ее:
<До>! Пи
Вы можете добавить : p
к любому из приведенных выше расширений, и bash выведет команду на терминал, не выполняя ее. Это полезно, если вы хотите подтвердить, что выбрали правильную команду перед ее запуском.
<До> 12: р
<До> !!: р
<До> текст: р
Повторное использование аргументов из вашей истории
Bash также позволяет вам запускать новую команду, но использовать аргументы из предыдущих команд в вашей истории. Это может помочь вам быстро повторно использовать длинные или сложные аргументы без необходимости их повторного ввода.
команда! $
Например, допустим, вы запустили команду touch/home/chris/some_long_file_name_you_dont_want_to_type_again
. Теперь вы хотите запустить команду nano/home/chris/some_long_file_name_you_dont_want_to_type_again
. Вместо того, чтобы печатать все это с нуля, вы можете запустить:
nano! $
! $
заставит bash автоматически заполнить последний аргумент из вашей предыдущей команды.
Это только заполняет последний аргумент. Итак, если вы запустите ping google.com -c 4
, а затем запустите ping! $
, это просто расширится до « ping 4
».
Чтобы исправить эту ситуацию, вы можете использовать следующий трюк для расширения первого аргумента в строке, а не последнего:
команда! ^
Поэтому, если вы запустили ping google.com -c 4
, а затем ping! ^
, bash расширит это до « ping google.com»
.
Чтобы заполнить все аргументы, использованные в предыдущей команде, вместо одного аргумента, вы должны использовать следующее:
команда! *
Таким образом, если вы запустите ping! *
, bash автоматически заполнит все аргументы, которые вы использовали в предыдущей команде.
Вы можете использовать тот же прием, который вы используете для запуска команд из вашей истории, чтобы получить аргументы из них. Просто используйте следующую форму.
команда! abc: #
Например, мы запускали команду sudo hostname ubuntu
ранее. Если мы запустим следующую команду, bash будет искать в истории в обратном направлении, чтобы найти последнюю команду, начинающуюся с букв, которые мы вводим, и заполнить указанный аргумент. Итак, если мы запустим echo! Su: 2
, bash выполнит поиск, чтобы найти последнюю команду, начинающуюся с « su
», и заполнит свой второй аргумент, который является « убунту
«.
Другие трюки работают, как вы могли ожидать. Например, замена числа звездочкой, известной как подстановочный знак, заставляет bash заполнить все аргументы команды:
команда! abc: *
Повторите предыдущую команду и измените ее
Bash также позволяет вам повторно выполнить предыдущую команду и указать что-то, что должно быть изменено. Это может быть полезно для исправления опечатки в команде. Например, следующая команда перезапустит предыдущую команду, заменив в ней текст « abc
» текстом « xyz
«.
^ абв ^ хуг
Например, если вы случайно запустили ping gogle.com
, вы можете запустить ^ gog ^ goog
и bash запустит команду ping google.com
Вместо.
Где хранится ваша история и как ее очистить
Оболочка bash хранит историю команд, которые вы выполняли, в файле истории вашей учетной записи по умолчанию в ~/.bash_history. Например, если ваше имя пользователя – bob, вы найдете этот файл в /home/bob/.bash_history.
Поскольку ваша история хранится в файле, она сохраняется между сеансами. Вы можете выполнить некоторые команды, выйти из системы, вернуться на следующий день, и эти команды все еще будут в вашем файле истории, готовые для просмотра и использования. Каждая учетная запись пользователя имеет свой собственный файл истории с отдельной историей команд.
Чтобы очистить историю bash, вы можете запустить следующую команду. Это удаляет содержимое файла .bash_history вашей учетной записи:
history -c
По умолчанию Bash запоминает только ограниченное количество команд, предотвращая слишком большой рост файла истории. Количество записей истории, запоминаемых bash, контролируется переменной HISTSIZE
. По умолчанию обычно 500 или 1000 записей. Вы можете запустить следующую команду, чтобы просмотреть размер истории bash в вашей системе.
echo $ HISTSIZE
Чтобы установить историю в ноль, выполните следующую команду.
HISTSIZE = 0
В текущем сеансе bash не будет хранить записи истории, если вы не запустите команду, подобную HISTSIZE = 1000
, чтобы вернуть ей определенное количество записей.
Как игнорировать пробелы и дубликаты
Bash позволяет игнорировать записи истории, начинающиеся с пробела, если для переменной HISTCONTROL
установлено значение ignorespace.
HISTCONTROL = ignorespace пре>Введите пробел перед командой перед ее запуском в оболочке bash, и команда будет работать нормально, но она не появится в вашей истории, если у вас включена эта переменная. Это позволяет вам сохранять свою историю немного чище, выбирая запуск команд без их появления в вашей истории.
![]()
Bash также позволяет игнорировать дубликаты команд, которые могут загромождать вашу историю. Для этого установите для
HISTCONTROL
значениеignoredups.
HISTCONTROL = ignoredups пре>
![]()
Чтобы использовать функцию
ignorespace
иignoredups
, установите для переменнойHISTCONTROL
значениеignoreboth.
HISTCONTROL = ignoreboth пре>Обратите внимание, что установленные вами переменные bash будут сохраняться только в текущем сеансе. Вам нужно будет добавить их в файл .bashrc вашей учетной записи, чтобы эти значения автоматически устанавливались при каждом запуске bash-сессии, если вы предпочитаете это.
![]()
Оболочка Bash представляет собой сложный инструмент с гораздо большим количеством опций. Обратитесь к разделам Bash History Builtins и History Expansion в официальном руководстве по bash, чтобы получить более подробную информацию и другие дополнительные приемы, которые вы можете использовать.