- Реверсивный поиск в терминале Linux или быстрая навигация по истории введенных команд
- Команда history и место хранения истории
- Реверсивный поиск
- Трюк в командной строке — Быстрый поиск по истории команд
- Ctrl+R — быстрый поиск по истории команд
- Перейти к следующей найденной команде
- Изменить найденную команду
- Пример
- Запускаем и ищем предыдущие команды в Linux
- Повторный запуск команды без указания аргументов. Используем «!»
- Выполнение предыдущей команды. Используем «!!»
- Поиск по истории команд. Команда history
- Поиск по истории. Сочетание клавиш Ctrl+R
- How to Use the Linux history Command
- How to Use Linux history Command
- Use Date and Timestamps
- View the Size of the History Buffer
- Repeat a Command
- Search a Command by String
- List the Matching Commands
- Change the Executed Command
- Prevent Recording Commands in History
- Delete History
- Update the History File
Реверсивный поиск в терминале Linux или быстрая навигация по истории введенных команд
Часто при работе в терминале приходится обращаться к истории того, что вводилось раньше. Это полезно, например, для того, чтобы не писать команду с нуля, а посмотреть как ее вводил кто-то до вас. Ну или вы когда-то вводили команду, нигде ее не записали, после забыли и теперь надо найти искомое. В таких случаях помогает работа с командой history, про которую сегодня и пойдет речь.
Команда history и место хранения истории
Начнем знакомство с команды history, которая судя по названию, позволяет выводить в терминал историю того, что вы вводили ранее. Использовать ее очень просто:
«Выхлоп» красивый и состоит из номера и самой команды. При желании можно вывести определенное количество последних команд, указав нужную цифру после history:
К слову, если вы знаете номер команды, то можно не вводить ее заново, достаточно указать этот номер вместе с символом восклицательного знака в начале:
!4 (повторно выполнится команда под номером 4)
Выводимые данные берутся не из воздуха. Если в домашней директории пользователя ввести команду ls -a , которая покажет скрытые файлы и папки,то можно увидеть файл, содержащий в названии слово history (например, .bash_history).
Отображение файла, содержащего историю введенных команд в домашней директории пользователя Linux Mint
Как понимаете, первая часть имени файла зависит от той оболочки, которая установлена у вас по-умолчанию. Если это ZSH, про которую ранее говорили на канале, то файл будет называться .zsh_history. Используя команду cat можно просмотреть содержимое этого файла.
«Выхлоп» соответствует тому, что мы видели при использовании команды history . Делаем простой вывод о том, что данные истории берутся из этого файла.
Реверсивный поиск
Переходим к самому интересному. Если в терминале нажать сочетание клавиш Ctrl + R, то запустится специальный поиск по истории. Он ждет пока пользователь начнет вводить символы и будет отображать найденные соответствия, то есть те команды, где данные символы встречаются. Если на вывод поступает не то, что нужно, то можно повторно нажать Ctrl + R, чтобы поиск показал следующий доступный вариант. Чтобы выйти из реверсивного поиска нужно использовать классическое сочетание Ctrl + C.
Трюк в командной строке — Быстрый поиск по истории команд
Если это относительно недавняя команда, то можно просто нажимать клавишу Вверх пока не появится нужная команда. Но если команда использовалась давно, то это не всегда удобно.
Ctrl+R — быстрый поиск по истории команд
Есть еще один очень простой и удобный способ для поиска по истории команд — это использование сочетания клавиш:
Ctrl+R
Работая в командной строке, нажмите сочетание клавиш Ctrl+R .
Вы попадете в режим поиска по истории команд. Приглашение в командной строке изменится на строку:
(reverse-i-search)`’:
Теперь можно начать вводить название команды, которую вы ищете или любую часть команды. То есть любую последовательность символов из команды, которую вы хотите найти.
По мере ввода символов будет осуществляться автоматический поиск по истории команд в соответствии с вводимыми вами символами, и если соответствующая команда найдена, то она отобразится в командной строке.
Перейти к следующей найденной команде
Нажмите повторно Ctrl+R , чтобы перейти к следующей найденной команде. Это похоже на перемещение по результатам поиска в текстовом редакторе, когда используется сочетание клавиш Ctrl+F.
Изменить найденную команду
Найденную команду можно изменить. Для этого нужно нажать клавишу Влево или Вправо , чтобы выйти из режима поиска. Команда при этом появится в командной строке и будет доступна для редактирования.
Чтобы выполнить команду, нажмите Enter .
Пример
Например, вы когда-то выполняли команду для копирования файла из одного каталога в другой:
cp pingvinus.ru/myfile.txt ~/Downloads/myfile2.txt
Вы хотите повторить эту команду и, возможно, немного ее изменить.
Нажимаем Ctrl+R и попадаем в режим поиска по истории команд.
Начинаем вводить какую-либо часть команды, которую мы ищем. Например, введем символы: myfi . Команда отобразится в терминале.
(reverse-i-search)`myfi': cp pingvinus.ru/myfile.txt ~/Downloads/myfile2.txt
Теперь можно нажать Enter, что ее сразу выполнить, или нажать клавишу Влево или Вправо , чтобы выйти из режима поиска и изменить команду.
Запускаем и ищем предыдущие команды в Linux
Работу в командной строке можно сделать немного эффективнее и быстрее, если знать несколько простых хитростей. Рассмотрим, как быстро запускать предыдущие команды, как выполнять поиск по истории команд.
Повторный запуск команды без указания аргументов. Используем «!»
!команда — используется для выполнения команды с аргументами, которые использовались при последнем запуске.
Предположим, мы выполняем какие-нибудь команды и дополняем их аргументами. Например, мы решили отредактировать файл myfile.txt в текстовом редакторе nano. Для этого мы выполняем:
nano /home/pingvinus/path/to/file/myfile.txt
Далее мы можем выполнять еще какие-нибудь команды, затем снова хотим выполнить nano, чтобы открыть в нем файл myfile.txt. Мы можем воспользоваться волшебным «!». Для этого достаточно написать восклицательный знак и без пробела название команды:
В результате будет вызвана команда nano с теми аргументами, с которыми она вызвалась последний раз, то есть в нашем случае !nano будет аналогично вызову nano /home/pingvinus/path/to/file/myfile.txt.
Выполнение предыдущей команды. Используем «!!»
!! — используется, чтобы выполнить предыдущую команду. Можно использовать в тексте другой команды.
Про два восклицательных знака я уже рассказывал. Например, вы вызвали команду:
И забыли написать в начале sudo. Чтобы не перепечатывать всю команду, можно выполнить:
Отмечу, что !! можно использовать прямо внутри текста команды. Например, мы перейдем в домашнюю директорию пользователя pingvinus:
А теперь войдем в папку /home/pingvinus/Downloads вот таким образом:
Поиск по истории команд. Команда history
history — поиск по истории команд — предназначена для вывода истории команд, поиска по ним и быстрого запуска предыдущих команд.
Если мы выполним history, то на экран будет выведен список последних введенных вами команд:
$ history . 139 leafpad pigvinus.txt 140 sudo apt-get install gedit 141 pwd 142 cd /home/pingvinus
Каждая команда пронумерована. Чтобы вызвать какую-нибудь команду из списка достаточно выполнить в командной строке: !номер. Например выполним команду под номером 139:
Можно указать номер с минусом. Например, выполнив !-2 мы выполним пред-предыдущую команду. Выполнив, !-1 мы выполним предыдущую команду, это эквивалентно команде !!, описанной выше.
Для поиска по истории можно воспользоваться утилитой grep:
У команды history есть еще несколько дополнительных возможностей. Почитать руководство по history можно, выполнив man history.
Поиск по истории. Сочетание клавиш Ctrl+R
Ctrl+R — сочетание клавиш, которое используется для вызова «интерактивного» поиска по истории команд.
Нажмите Ctrl+R, находясь в командной строке. В результате на экране отобразится приглашение к поиску команды:
Начинайте вводить начальную часть или середину команды, которую вы ищете. То, что вы вводите будет заключено в кавычки, а после значка двоеточия вам будет предложена команда, найденная в истории команд, которая максимально удовлетворяет поиску. Например, я нажал Ctrl+R и начал вводить id-, и нашлась команда, содержащая символы id-:
(reverse-i-search)`id-': git clone https://github.com/id-Software/DOOM-3.git
How to Use the Linux history Command
The history command in Linux is a built-in shell tool that displays a list of commands used in the terminal session. history allows users to reuse any listed command without retyping it.
In this tutorial, we will show you how the history command works and different ways to use it.
How to Use Linux history Command
Using the history command without options displays the list of commands used since the start of the terminal session:
To display the command history list with a limited number of entries, append that number to the history command. For instance, to show only the latest five entries, use:
Once you close the terminal, the Bash shell saves new command history entries in the .bash_history file.
Use Date and Timestamps
The .bashrc file stores the Bash shell settings. Modifying this file allows you to change the output format of the history command.
Open the .bashrc file using a text editor such as Nano:
To change the output format to include date and timestamps, add the following line to the .bashrc file:
Note: The blank space before the closed quotation marks prevents the timestamp from connecting to the command name, making the history list easier to read.
Using different arguments after HISTTIMEFORMAT allows you to customize the level of detail in the timestamp:
Save the changes to the .bashrc file, relaunch the terminal, and run the history command to confirm the new output format:
View the Size of the History Buffer
The .bashrc file contains two entries that control the size of the history buffer:
- HISTSIZE : The maximum number of entries for the history list.
- HISTFILESIZE : The maximum number of entries in the .bash_history file.
Editing the HISTSIZE and HISTFILESIZE values changes how the Bash shell displays and saves the command history.
For instance, changing the HISTSIZE value to 10 makes the history command list show a maximum of 10 latest entries.
Saving the changes to the .bashrc file, relaunching the terminal, and running the history command confirms the new output format:
Repeat a Command
Running the history command allows you to reuse any of the commands on the list. For instance, to run the first command ( sudo apt update ) again, use:
Adding a dash (—) before the command number starts the count from the end of the list. For instance, to reuse the tenth last command ( history 5 ), use:
Use double exclamation points to repeat the last command:
Search a Command by String
Adding a string after the exclamation point runs the latest command that starts with that string. For example, to reuse the latest command that begins with sudo , use:
Using this method can cause problems if the shell runs an unexpected command, especially when searching for a command that starts with sudo . As a precaution, adding the :p argument displays the command without running it, allowing you to review the command and decide if you want to execute it.
To search for a command that contains a string, but may not start with it, add a question mark next to the exclamation point. For instance, to reuse the last command that contains echo :
In the example above, the shell reuses the last command that contains the echo string even though the command starts with sudo .
Check out our article on sudo command to learn how to use the sudo command with examples.
List the Matching Commands
Combining history and grep allows you to display a list of commands that contain a string. For example, to list all commands that contain ufw , use:
Note: Learn more about using the grep command in Linux.
Change the Executed Command
Use the following syntax to change the last executed command:
For instance, the ufw command to enable port 20 shows that the port is already enabled:
Use the syntax above to change the port number from 20 to 22:
Prevent Recording Commands in History
To prevent recording commands in the history list, temporarily disable recording by using:
To re-enable recording, use:
Delete History
Use the -d option with the history command to delete a command from the history list. For instance, delete command number 87 with:
Use the -c option to clear the whole history list:
Update the History File
The Bash shell saves any updates to the command history list when you exit the terminal session. The history command also allows you to save changes while in the terminal session.
Using the -a option lets you append the command history entries from this session to the .bash_history file:
Another method is to use the -w option to save the entire history list to the .bash_history file:
After reading this tutorial, you should be able to use the history command in Linux to view, edit, and delete the command history list and reuse commands from it.
If you are interested in learning more about Linux commands, have a look at our Linux commands cheat sheet.