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

    Как использовать историю 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

    Вы также можете передать это хвост команда, чтобы просмотреть только небольшое количество последних команд, которые вы выполнили. Например, следующая команда покажет последние 5 записей в вашей истории.

    история | хвост -5

    Запустить команды из вашей истории

    Bash может быстро «развернуть» предыдущие команды или расширить их и модифицировать их. Эта функция известна как «расширение истории» и использует восклицательный знак, известный как «взрыв». Просто введите их в командной строке и нажмите Enter, чтобы запустить их так же, как и любую другую команду.

    Чтобы запустить определенную команду из вашей истории по ее номеру, используйте следующую команду:

    !#

    Например, допустим, вы хотели запустить 12-ю команду из своей истории bash. Это команда с «12» слева от нее, когда вы запускаете история команда. Вы набрали бы следующую команду.

    !12

    Для повторного запуска последней выполненной команды введите следующее. Это имеет тот же эффект, что и нажатие стрелки вверх один раз для просмотра предыдущей команды, а затем нажатие Enter.

    !!

    Вы также можете обратиться к команде на определенное количество строк назад. Например, !-2 будет запускать вторую команду, которую вы запустили. !! означает то же самое, что и !-1 .

    Это расширение работает в любом месте на линии. Вы можете добавить что угодно до или после !! или любое другое выражение в этом разделе. Например, вы можете ввести следующую команду, чтобы повторить последнюю команду, которую вы выполнили Судо, давая ему привилегии root. Это особенно полезно, если вы забыли добавить  Судо перед выполнением команды.

    Судо !!

    Или, например, вы можете повторить предыдущую команду и направить ее вывод в grep для поиска текста.

    !! | текст grep

    Чтобы найти команду в своей истории и запустить ее, введите следующее. Это запустит последнюю команду, которая соответствует указанному вами тексту:

    !текст

    Итак, если вы недавно запустили команду, которая началась с пинг, Вы можете запустить следующую команду, чтобы найти его. Это будет искать в вашей истории, найти самую последнюю команду, которая начинается с «число Пи«И немедленно запустите

    !число Пи

    Вы можете добавить :п к любому из вышеперечисленных расширений, и 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. Вместо того, чтобы печатать все с нуля, вы можете запустить:

    нано! $

    !$ сделает Bash автоматически заполнить последний аргумент из вашей предыдущей команды.

    Это только заполняет последний аргумент. Итак, если вы бежите ping google.com -c 4 а потом беги пинг! $ , это просто расширилось бы до «пинг 4«.

    Чтобы исправить эту ситуацию, вы можете использовать следующий трюк для расширения первого аргумента в строке, а не последнего:

    команда! ^

    Итак, если вы побежали ping google.com -c 4 а потом побежал пинг! , Баш расширил бы это до «ping google.com ".

    Чтобы заполнить все аргументы, использованные в предыдущей команде, вместо одного аргумента, вы должны использовать следующее:

    команда! *

    Итак, если вы побежали пинг !* вместо этого bash автоматически заполнит все аргументы, которые вы использовали в предыдущей команде.

    Вы можете использовать тот же трюк, который вы используете для запуска команд из вашей истории, чтобы получить аргументы из них. Просто используйте следующую форму.

    команда! abc: #

    Например, мы запустили команду sudo hostname ubuntu ранее. Если мы запустим следующую команду, bash будет искать в истории в обратном направлении, чтобы найти последнюю команду, начинающуюся с букв, которые мы вводим, и заполнить указанный аргумент. Итак, если мы бежим echo! su: 2 , bash выполнит поиск, чтобы найти последнюю команду, начинающуюся с «су»И заполните его второй аргумент, который является«убунту«.

    Другие трюки работают, как вы могли ожидать. Например, замена числа звездочкой, известной как подстановочный знак, приводит к тому, что bash заполняет все аргументы команды:

    команда! abc: *

    Повторите предыдущую команду и измените ее

    Bash также позволяет вам повторно выполнить предыдущую команду и указать что-то, что должно быть изменено. Это может быть полезно для исправления опечатки в команде. Например, следующая команда перезапустит предыдущую команду, заменив текст «азбукаВ нем с текстом «хуг«.

    ^ Абв ^ хуг

    Например, если вы случайно побежали ping gogle.com, Вы могли бы тогда бежать ^ Гог ^ GOOG и Bash будет запускать команду пинг google.com вместо.

    Где хранится ваша история и как ее очистить

    Оболочка bash хранит историю команд, которые вы выполняли, в файле истории вашей учетной записи пользователя по умолчанию в ~ / .bash_history. Например, если ваше имя пользователя - bob, вы найдете этот файл в /home/bob/.bash_history.

    Поскольку ваша история хранится в файле, она сохраняется между сеансами. Вы можете выполнить некоторые команды, выйти из системы, вернуться на следующий день, и эти команды все еще будут в вашем файле истории, готовом для просмотра и использования. Каждая учетная запись пользователя имеет свой собственный файл истории с отдельной историей команд.

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