Команда history может очень помочь в работе тем, кто часто использует командную строку. Эта команда хранит историю ранее введенных команд, которые запускались в сессии терминала, и позволяет их запускать повторно, без необходимости повторного ввода.
Для начала следует заметить, что команда history это никакая не отдельная программа. В этом можно убедиться, если попытаться найти её в системе с помощью which history:
$ which history
which: no history in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin)
Ваш компьютер не смог найти команду history потому что это встроенное в оболочку команд (шелл) ключевое слово. Поскольку эта команда интегрирована в используемый вами шелл, то есть различия, как она ведет себя в зависимости от используемого шелла: Bash, tcsh, Zsh, dash, fish, ksh, и так далее. Эта статья (перевод [1]) основывается на реализации history в Bash, так что некоторые функции могут в других шелл не работать. Однако основные функции будут такие же.
[History в действии]
Чтобы рассмотреть работу history откройте окно терминала вашей инсталляции Linux и введите:
$ history
В ответ можно увидеть примерно следующее:
1 clear
2 ls -al
3 sudo dnf update -y
4 history
Команда history показала историю введенных ранее команд в виде списка. Можно скопировать любую команду из этого списка, вставить скопированный текст в строку терминала, и использовать эту команду повторно, что довольно удобно.
Однако есть и другая интересная возможность, о которой не все знают. В списке слева от текста команды мы видим порядковый номер. Можно запускать команду по её порядковому номеру, если ввести его после символа !. Например, если мы хотим запустить команду номер 3 в списке, т. е. sudo dnf update -y, то достаточно выполнить следующую команду:
$ !3
В результате будет выполнена третья команда из списка в истории. Также на некоторых системах можно запустить ту же команду вводом:
$ !sudo dnf
Этот ввод заставляет history выполнить поиск по истории для команды, которая будет совпадать с введенным шаблоном (в этом примере шаблон это dnf), и запустить её.
Примечание переводчика: у меня на Debian 11 в bash это не сработало.
Также вы можете использовать history для запуска последней введенной команды, путем ввода !!, хотя этим пользуются не часто, потому что есть удобный вариант прокрутки предыдущих ближайших введенных команд клавишами "вверх" и "вниз".
[Поиск по истории команд]
С помощью команды grep вы можете отфильтровать вывод history, чтобы найти нужную команду. Также можно использовать команду tail, чтобы вывести определенные строки из списка. Например:
$ history | grep dnf
3 sudo dnf update -y
5 history | grep dnf
$ history | tail -n 3
4 history
5 history | grep dnf
6 history | tail -n 3
Еще одна возможность - нажать комбинацию клавиш Ctrl-R, чтобы запустить рекурсивный поиск по истории. После этого приглашение командной строки поменяется на такое:
(reverse-i-search)`':
Теперь вы можете начать вводить команду, и совпавшая команда из списка автоматически будет отображена в приглашении. После этого можно нажать на Return или Enter, и команда будет выполнена.
[Изменение выполняемой команды]
Вы также можете использовать history для запуска с другим синтаксисом. Историю команд можно пересмотреть с помощью команды history. Например, если нужно поменять ранее введенную команду history | grep dnf на команду history | grep ssh, то достаточно выполнить следующее:
$ ^dnf^ssh^
Команда запустится заново, но в ней dnf будет заменено на ssh. Другими словами, будет запущена команда:
$ history | grep ssh
[Удаление команд из истории]
Может произойти ситуация, когда вы захотите удалить из истории некоторые отдельные команды, или захотите полностью очистить файл истории. Если нужно удалить только отдельную запись в истории, то введите history -d номер_строки. Чтобы полностью очистить историю, выполните history -c.
Список команд history сохранен в файле .bash_history, находящемся в домашнем каталоге пользователя, и вы его можете просмотреть или отредактировать как обычный файл.
[Дополнительные возможности]
Есть еще и другие интересные вещи, которые можно делать для history:
• Установка размер буфера history для указанного количества команд. • Можно записывать дату и время в каждой строке history. • Можно предотвращать запись определенных команд в файл history.
Для дополнительной информации по команде history и про другие полезные возможности см. статьи Seth Kenlon, посвященные обработке истории команд [2], модификаторам поиска history [3], а также руководство пользователя GNU Bash [4].
[Ссылки]
1. How to use the history command in Linux site:opensource.com. 2. Parsing Bash history in Linux site:redhat.com. 3. Using word modifiers with Bash history in Linux site:redhat.com. 4. GNU Bash manual site:gnu.org. |