Как использовать историю Bash в терминале Linux или MacOS

Оболочка 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, чтобы получить более подробную информацию и другие дополнительные приемы, которые вы можете использовать.

Оцените статью
TutoryBird.Ru
Добавить комментарий