Командная строка Linux - терминал - хранит историю команд, выполненных пользователем в прошлом. Эта история постоянна и остается в памяти даже при перезагрузке системы. Мы можем извлекать и повторно использовать эти сохраненные команды, чтобы максимально использовать функцию хранения истории в оболочке bash.
В Linux bash есть очень мощная команда под названием "history". Эта команда является встроенной командой bash, которая используется для извлечения исторической информации о командах, которые были выполнены пользователями Linux во всех предыдущих сессиях. В этом учебнике мы дадим вам возможность извлечь максимум из истории командного интерпретатора, научившись правильно использовать команду history. Linux по умолчанию хранит историю команд для конкретного пользователя в файле ~/.bash_history.
Для выполнения команд, упомянутых в этом уроке, мы будем использовать терминальное приложение Linux.
Просмотр всей истории Bash
Пользователь может просмотреть всю историю своих команд оболочки из файла истории, сохраненного только для этого пользователя, с помощью следующей простой команды:
1 | history |
История будет выведена на экран в следующем формате по умолчанию:
На изображении выше вы можете увидеть список всех команд с номером, присвоенным каждой из них. Команда с номером 1 соответствует первой команде, которую вы выполнили, а команда с последним номером представляет собой последнюю выполненную команду.
Если вы выполняли много команд после использования bash, вы заметите, что здесь отображаются сотни и даже тысячи таких команд. Чтобы получить доступ к нескольким нужным командам, вы можете отфильтровать результаты, отображаемые функцией истории. Вы также можете настроить команду history так, чтобы она показывала определенное количество команд.
Фильтрация вывода истории Bash
Если вы хотите отфильтровать вывод истории на основе определенного ключевого слова, которое вы могли использовать в предыдущих командах, вы можете использовать команду history следующим образом:
1 | history | grep [keyword] |
Пример: В этом примере я хочу просмотреть только команды ping, которые я когда-либо выполнял в оболочке. Поэтому я использую следующую команду:
1 | history | grep ping |
Вы можете видеть, что теперь в моем выводе отображаются только команды, включающие мое поисковое ключевое слово "ping".
Просмотр количества недавно выполненных команд командного интерпретатора
Вы также можете просмотреть определенное количество команд, например:
N количество последних команд
ИЛИ
N количество самых старых команд
N Количество последних команд Bash
Вы можете просмотреть определенное количество недавно запущенных команд с помощью следующей команды:
1 | history | tail -n |
Пример:
В этом примере я хочу просмотреть последние 3 команды, которые я выполнил, с ключевым словом 'ping':
1 | history | grep ping |tail -3 |
Вывод показывает только 3 последние команды ping, а не всю историю.
N Количество самых старых команд Bash
Вы можете просмотреть определенное количество самых старых запущенных команд с помощью следующей команды:
1 | history | head -n |
Пример:
В этом примере я хочу просмотреть самые старые 3 команды, которые я выполнил, с ключевым словом 'ping':
1 | history | grep ping | head -3 |
Вывод показывает только 3 самые старые команды ping вместо всей истории.
Список всех команд Bash с указанием даты и метки времени
Если вы хотите просмотреть историю команд с указанием даты и метки времени, используйте следующую команду экспорта:
1 | export HISTTIMEFORMAT='%F, %T ' |
Теперь, когда вы захотите просмотреть историю, просто выполните команду history, чтобы увидеть результат в следующем формате:
Обратите внимание, что это изменение формата является временным, и он будет восстановлен к предыдущему стандарту, когда вы закроете сессию.
Навигация по командам из истории
Находясь в командной строке, вы можете перемещаться по ранее запущенным командам, а также вызывать некоторые недавно использованные команды, задав ключевое слово.
Прокрутка команд
Для навигации по командам истории можно использовать следующие элементы управления клавиатурой
- Стрелка вверх/Ctrl+P С помощью этих элементов управления вы можете отобразить предыдущую использованную команду. Вы можете нажимать эти кнопки несколько раз, чтобы вернуться к определенной команде в истории.
- Стрелка вниз/Ctrl+N С помощью этих элементов управления можно отобразить следующую команду, которую вы использовали. Вы можете нажать эти элементы управления несколько раз, чтобы перейти вперед к определенной команде в истории.
- Alt+R Если вы редактируете команду, взятую из истории, в текущей строке, вы можете использовать этот элемент управления для возврата к исходной команде.
Вызов команд
Вы можете вызвать, выполнить или не выполнять определенную команду из истории, используя следующие элементы управления:
- Ctrl+R С помощью этого элемента управления можно вызвать команду из истории, указав строку поиска.
- Ctrl+O С помощью этого элемента управления можно запустить команду, которую вы вызвали с помощью Ctrl+R.
- Ctrl+G С помощью этого элемента управления можно выйти из истории, не выполняя команду, которую вы вызвали с помощью Ctrl+R.
Использование истории Bash
Настоящее волшебство истории bash заключается в использовании различных команд и настройке самой команды history для наилучшего использования функции истории:
Выполнение команд из истории
Как мы уже видели, команда history отображает команды, связывая с каждой из них номер. Используя следующую команду, вы можете запустить определенную команду из истории, основываясь на ее номере:
1 | !# |
Пример:
Здесь я запускаю команду с номером 95 из моей истории:
1 | !95 |
Вывод показывает результат команды 'lscpu', которая была указана как команда номер 95 в моей истории bash. Эта команда отображает характеристики моего процессора и операционной системы.
Вы можете повторно выполнить предыдущую команду, используя следующую команду:
1 | !! |
Для того чтобы найти команду в истории и затем выполнить ее, используйте следующую команду:
1 | ![ключевое слово] |
Пример:
Я использую следующую команду для повторного выполнения последней команды с ключевым словом 'dconf':
1 | !dconf |
На следующем изображении вы можете убедиться, что это была последняя команда dconf, которую я выполнил.
Использование аргументов из предыдущих команд
Linux bash позволяет выполнять новую команду, используя аргументы предыдущей команды. Это особенно полезно, когда вы хотите избежать повторного ввода длинных или сложных аргументов. Для этого вы можете использовать следующую команду:
Используя последний аргумент предыдущей команды
1 | $ [Команда] !$ |
В переменной !$ хранится последний аргумент предыдущей команды.
Пример:
В этом примере я создам файл с длинным именем.
1 | nano longnameOfaFile |
Затем я скопирую его в другое место, избегая повторного ввода длинного имени, следующим образом:
1 | cp !$ destinationfolder |
Использование первого аргумента предыдущей команды
Иногда в текущей команде полезен только первый аргумент из предыдущей команды.
В этом случае вы можете использовать следующую команду:
1 | $ [команда] !^ |
Пример:
В следующем примере я выполнил команду ping, указав в качестве аргументов имя хоста и счетчик. Теперь я хочу использовать имя хоста (первый аргумент), а не 2 (последний аргумент) в моей новой команде. Для этого я буду использовать следующую команду:
1 | $ ping !^ |
Использование всех аргументов из предыдущей команды
Вы также можете использовать все аргументы из предыдущей команды, используя следующую команду:
1 | !* |
Использование одного аргумента из команды истории
Вы также можете использовать команды из вашей истории, повторно используя их аргументы. Для этого используйте следующую команду:
1 | [команда] ![ключевое слово]:#. |
Пример:
1 | echo !cp:2 |
Эта команда примет следующие параметры:
команда: echo
Ключевое слово:cp
#:2 (второй аргумент команды)
Использование всех аргументов из команды истории
Следующая команда сохранит все аргументы из искомой команды истории и использует их в текущей команде:
1 | команда ![keyword]:* |
Пример:
В следующей команде я выведу все аргументы последней команды cp с помощью команды echo следующим образом:
1 | echo ![cp]:* |
Изменение и выполнение предыдущих команд
Если вы ошиблись в команде или хотите повторно запустить команду, изменив в ней текст, то сделать это можно следующим образом:
1 | ^[предыдущий текст]^[новый текст]. |
Пример:
Я ошибочно ввел команду 'grep' как 'gep' и теперь хочу запустить команду, исправив текст:
1 | ^gep^grep |
Очистка истории
Для того чтобы стереть историю вашего bash, используйте следующую команду:
1 | history -c |
Эта команда очистит вашу историю и удалит все содержимое из файла ~/.bash_history.
В этом учебнике мы узнали, что распечатка всего содержимого истории не так уж полезна, но оптимизация вывода с помощью изученных команд - это настоящий геймчейнджер. Попрактиковавшись с этой статьей, вы сможете выводить именно те команды, которые вам нужны, повторно выполнять и повторно использовать эти команды, а также использовать аргументы из ранее выполненных команд для оптимизации новых команд.