Рассказываем, как работать с историей команд в терминале Linux.
Пользователям Linux и многим разработчикам на других платформах приходится часто работать с командной строкой. Это в общем-то основной инструмент для решения большинства мелких и сложных задач в системе.
Для управления компьютером через терминал используются текстовые команды. Их количество постоянно растет, да и сами команды иногда становятся чересчур сложными и длинными. Запоминать и вводить их каждый раз становится слишком сложно.
При этом задача вернуться к какой-то недавно (или давно) введенной команде и повторить ее (или извлечь какую-то важную информацию) появляется частенько. Отсюда и необходимость в инструментах, с помощью которых можно найти команду из прошлого.
См. также: 100 востребованных команд для Linux
Быстрое возвращение к предыдущей команде
Начать стоит с самого элементарного способа найти и переиспользовать команду, которую вы уже недавно вводили. Находясь в любой командной строке, можно просто нажать на клавишу со стрелкой вверх и перед вами появится команда, которую вы ввели предыдущей.
Если снова нажать на стрелку, то появится команда, которая была еще раньше и так далее. С помощью стрелки вниз можно вернуться. Естественно, появившуюся команду можно тут же активировать заново, нажав на клавишу «Ввод» (Enter).
Команда history
Предыдущее решение хоть и рабочее, но не особо эффективное для ознакомления со всей историей команд, использованных во время текущей сессии. Для более глубокого анализа существует программа history.
Просто вводим в терминал history аргументы путь до файла с историей
Путь до файла указывать не обязательно. По умолчанию вся история хранится в документе ~/.history и считывается оттуда системой автоматически.
Доступные аргументы (опции)
- -a команда — с помощью этого флажка можно добавить в историю новую команду.
- -с — этот флажок заставляет программу вместо отображения истории полностью ее стереть.
- -d номер строки — с помощью этого флажка можно удалить конкретный элемент из истории. Все они помечаются определенным номером в начале строки.
- -n — этот флажок позволяет скопировать элементы из файла с историей в текущий список, отображающийся в командной строке.
- -w путь до файлов — с этим флажком можно переписать историю из одного файлы в другой, заменив все повторяющиеся элементы.
Примеры использования history
Начнем с пустой команды history. Она просто запустит соответствующую программу, которая вытянет историю из файла ~/.history.
В результате ее деятельности получим целый список команд. Все они пронумерованы для более удобного поиска и редактирования.
Кстати, сама программа history сразу же попадет в этот список
Примеры работы с номерами команд
Как вы уже заметили, каждая команда в истории имеет свой номер. Эти номера можно использовать. Но не только их. Например, если в программу history передать аргумент с каким-либо числом, то терминал вернет вам список команд из истории, равный числу, которое вы ввели.
Ладно, проще показать, чем объяснять. Вот, что произойдет, если ввести в терминал history 2. Вернутся только две последние команды, а сотня других останется в истории, но не будет отображена.
Попробуем увеличить число и увидим уже 14 элементов. Думаю, принцип работы более чем ясен. Это самый элементарный фильтр, который пригодится, если нужно отыскать что-то использованное совсем недавно.
Удаление элементов из истории
Собственно, теперь используем цифры, указанные слева от каждой команды. Вообще, их можно использовать для поиска и сортировки, но я покажу на примере удаления, как можно быстро удалить команду, ориентируясь на ее номер в очереди.
Выведем историю с помощью history 14. Теперь попробуем удалить один элемент, воспользовавшись командой history -d 130 (удаляем 130-й по счету пункт).
Снова выведем историю и увидим, что команды fc-cache -f -v, которая ранее была 130 по счету, больше нет. Вместо нее теперь sudo apt search tahoma, которая следовала за ней.
Ну и всю историю, конечно, можно почистить. Введем history -c и готово.
Фильтрация команд
Понятное дело, рыться даже в сотне команд дело муторное, а если их число достигает 1000, то это прямо насилие над собой. Поэтому будет «грепать» нужные команды или искать их с помощью реверсивного поиска. Начнем с первого.
grep — это утилита для поиска. Обычно ее используют для поиска в выводе других команд и программ. Например, вот так. Вводим команду history и тут же дополняем ее «грепом». Получится так: history | grep слова для поиска
Вот конкретный пример. Выводим историю и получаем список команд.
Потом снова выводим историю, но уже с поиском, и увидим, что искомые слова в списке подсвечены, а сам список сократился до тех элементов, где есть искомое значение. Как-то так.
Есть еще более точечный вариант. Одновременно нажимаем на клавиши Ctrl + R и вводим команду, которую нужно найти. Она тут же отобразится в терминале, и ее даже можно будет запустить, нажав на Enter.
Автор материала: Владимир Ковылов
Подписывайтесь на наш канал и ставьте лайки! А еще можете посетить наш официальный сайт.