Eсли вы проводите много времени в командной строке, просмотр истории команд, которые вы ранее запускали, может быть полезной функцией, которая может упростить вашу повседневную работу и повысить вашу производительность.
В этой статье мы поговорим о команде history
, которая позволяет просматривать список ранее выполненных команд, выполнять поиск по списку и управлять файлом истории.
Использование команды history
и расширений истории
history
— это встроенная оболочка, и ее поведение может немного отличаться от оболочки к оболочке. Мы рассмотрим встроенную в Bash версию history
.
В простейшей форме при вызове без какой-либо опции или аргумента команда history
отображает весь список истории с номерами строк.
history
...
467 git push
468 tail -f var/logs/error
469 nano +22,5 functions.sh
470 source project-env/bin/activate
471 history
При вводе !n
выполняется n-я команда из списка истории, а !-n
команда возвращается на n строк. В следующем примере мы выполняем команду в строке 467
:
!467
Другой способ выполнить команду — использовать расширение !word
. word
относится к самой последней команде, начинающейся с слова.
Обычно в history
отображается много строк вывода, которые не помещаются на экране. Чтобы просмотреть вывод по одной странице за раз, направьте его в программу пейджера, например, команду more
или less
:
history | less
Чтобы отобразить последние n
строк, передайте число в качестве аргумента команды. Например, чтобы просмотреть только последние пять строк из списка истории, введите:
history -5
Используйте клавиши со стрелками up
и down
для перемещения по записям в списке. Когда отобразится искомая команда, нажмите Enter
чтобы выполнить ее.
Типа !!
для выполнения предыдущей команды:
!!
Это особенно полезно, когда вы забываете привязать команду к sudo
и вместо повторного ввода команды можете ввести:
sudo !!
!-1
совпадает с !!
и выполняет последнюю команду из списка истории !-2
секунды до последней и так далее.
^word1^word2^
позволяет повторно запустить последнюю команду, заменив «word1» на «word2». Если вы случайно набрали sduo command
вместо команды sudo command
вы можете повторить команду, используя правильное слово:
^sduo^sudo^
Используйте команду grep
для фильтрации вывода. Например, чтобы просмотреть все команды, включая «nano», вы должны выполнить:
history | grep nano
302 sudo nano /etc/resolv.conf
356 nano setup.py
413 sudo nano /etc/hosts
469 nano +22,5 functions.sh
Теперь, если вы хотите повторно запустить команду nano setup.py
просто введите:
!356
Другой способ поиска в истории команд — нажать Ctrl-R
. Приглашение изменится на следующее, и вы сможете начать поиск ранее выполненной команды.
(reverse-i-search)`':
Оболочка отобразит соответствующую строку. Чтобы перейти к следующему подходящему предложению, снова нажмите Ctrl-R
.
Обратитесь к руководству Bash для получения дополнительной информации о расширении истории , модификаторах и позиционных обозначениях.
Сохранение списка истории
По умолчанию при запуске нового сеанса Bash читает список истории из файла .bash_history
. Список команд, которые выполняются в текущем сеансе, хранятся в памяти и сохраняются в файле при закрытии сеанса.
Если вы открыли несколько сеансов оболочки, сохраняется только история сеанса, который был закрыт последним.
Параметр -a
позволяет сохранить список истории текущего сеанса в файл .bash_history
:
history -a
Параметр -w
записывает полный список истории в файл истории.
history -w
История очистки
Команда history
позволяет очистить полный список истории или удалить определенные части.
Чтобы очистить список истории, используйте параметр -c
:
history -c
Чтобы удалить определенную строку или строки между начальной и конечной позициями из списка истории, используйте параметр -d
.
Например, чтобы удалить строки между 365 и 375 (включая эти строки), вы должны ввести:
history -d 365 375
Если вы укажете только одно число для опции -d
, команда удалит данную строку.
Когда используется отрицательное целое число, строки отсчитываются от конца списка истории.
Приведенные выше команды очищают список истории, который хранится в памяти, но не удаляют записи из файла .bash_history
на диске. Чтобы очистить файл, вам нужно записать в файл список истории:
history -c
history -w
Изменение поведения в истории
Поведение истории Bash можно определить с помощью нескольких различных переменных среды . При изменении поведения истории установите переменные в ~/.bashrc
или любом другом файле конфигурации, который загружается при входе пользователя в систему.
По умолчанию Bash сохраняет 500 строк в списке истории команд. Переменная HISTSIZE
позволяет вам изменять это значение. Чтобы установить значение 10000, добавьте в файл .bashrc
следующую строку:
HISTSIZE=10000
Переменная HISTCONTROL
принимает список значений, разделенных двоеточиями, которые определяют способ сохранения команд в списке истории:
ignorespace
— команды, начинающиеся с пробела, не сохраняются в списке истории.ignoredups
— повторяющиеся команды не сохраняются.ignoreboth
— это сокращение, включая какignorespace
иignoredups
.
HISTCONTROL=ignoreboth
Когда HISTTIMEFORMAT
переменная HISTTIMEFORMAT
, Bash HISTTIMEFORMAT
времени выполнения команды в каждой строке.
Например, если вы установите:
HISTTIMEFORMAT="%F %T: "
История будет отображаться в следующем формате:
413 2019-10-27 21:13:07: sudo nano /etc/hosts
Выводы
Команда history
отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали раньше, но не можете вспомнить.
Добавить комментарий