Найти тему
Tehnichka.pro

История команд в Linux

Оглавление

Рассказываем, как работать с историей команд в терминале 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 слова для поиска

Вот конкретный пример. Выводим историю и получаем список команд.

Ищем в истории запуск программы apt-get
Ищем в истории запуск программы apt-get

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

В некоторых версиях терминала подсветки может не быть
В некоторых версиях терминала подсветки может не быть

Есть еще более точечный вариант. Одновременно нажимаем на клавиши Ctrl + R и вводим команду, которую нужно найти. Она тут же отобразится в терминале, и ее даже можно будет запустить, нажав на Enter.

Команда появляется уже готовая к повторному запуску
Команда появляется уже готовая к повторному запуску

Автор материала: Владимир Ковылов

Подписывайтесь на наш канал и ставьте лайки! А еще можете посетить наш официальный сайт.