Главная >> Команды >> История команд Linux

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

В терминале Linux, кроме всего прочего, есть одна замечательная вещь. Это история команд Linux. Все команды, которые вы вводите во время работы сохраняются и вы можете найти и посмотреть их в любой момент. Также можете вернуться на несколько команд чтобы не набирать недавно выполненную команду заново.

В этой небольшой статье мы рассмотрим как пользоваться историей команд Linux, как ее настроить, а также рассмотрим полезные приемы, которые могут помочь вам в работе.


Содержание статьи

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

Большинство задач, связанных с историей команд, мы будем выполнять либо с помощью команды history, либо с помощью оболочки. В истории хранится последняя 1000 команд, которые вы выполняли. Чтобы посмотреть всю историю для этого терминала просто запустите команду history без параметров:

history

Для дополнительных действий с историей вам могут понадобиться опции. Команда history linux имеет очень простой синтаксис:

$ history опции файл

В качестве файла можно указать файл истории. По умолчанию история для текущего пользователя хранится в файле ~/.history, но вы можете задать, например, файл другого пользователя. А теперь рассмотрим опции:

  • -c - очистить историю;
  • -d - удалить определенную строку из истории;
  • -a - добавить новую команду в историю;
  • -n - скопировать команды из файла истории в текущий список;
  • -w - перезаписать содержимое одного файла истории в другой, заменяя повторяющиеся вхождения.

Наиболее полезной для нас из всего этого будет опция -c, которая позволяет очистить историю команд linux:

history -c

Так вы можете посмотреть только последние 10 команд:

history 10

 

 

А с помощью опции -d удалить ненужное, например, удалить команду под номером 1007:

history -d 1007

Если вы хотите выполнить поиск по истории bash, можно использовать фильтр grep. Например, найдем все команды zypper:

history | grep zypper

На самом деле работать с историей еще более просто с помощью оболочки, возможно, вы уже используете многие ее функции, но о некоторых точно не знаете. Рассмотрим их:

Чтобы показать предыдущую команду просто нажмите стрелку вверх, так можно просмотреть список раньше выполненных команд.

Вы можете выполнить последнюю команду просто набрав "!!". Также можно выполнить одну из предыдущих команд указав ее номер "!-2"

Чтобы выполнить поиск по истории прямо во время ввода нажмите Ctrl+R и начните вводить начало команды.

Если вы знаете, что нужная команда была последней, которая начиналась на определенные символы, например, l, то вы можете ее выполнить, дописав "!l":

Если нужная команда последняя содержала определенное слово, например, tmp, то вы можете ее найти, использовав "!?tmp":

 

Если вы не хотите, чтобы выполняемая команда сохранилась в истории просто поставьте перед ней пробел.

Таким образом, вы можете очень быстро отыскать нужную команду, если помните как она была написана. История команд bash хранит очень много команд и этого вполне достаточно для комфортной работы.

Настройка истории Linux

Linux - очень настраиваемая и гибкая система, поэтому настроить здесь можно все, в том числе и историю. По умолчанию выводится только номер команды, но вы можете выводить и ее дату. Для этого нужно экспортировать переменную HISTORYFORMAT вместе нужным форматом:

export HISTTIMEFORMAT='%F %T '
$ history

Для форматирования можно использовать такие модификаторы:

  • %d – день;
  • %m – месяц;
  • %y – год;
  • %T – штамп времени;
  • %F - штамп даты.

Вы можете указать какие команды не стоит отображать, например, не будем выводить ls -l, pwd и date:

export HISTIGNORE='ls -l:pwd:date:'

Также можно отключить вывод одинаковых команд:

export HISTCONTROL=ignoredups

Существует два флага, ignoredups и ignorespace. Второй указывает, что нужно игнорировать команды, начинающиеся с пробела. Если вы хотите установить оба значения, используйте флаг ignoreboth. Используйте переменную HISTSIZE, чтобы установить размер истории:

export HISTSIZE=2000

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

export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r;"

Для тестирования работы вы можете набирать эти команды прямо в терминале и сразу видеть результат, но для сохранения добавьте нужные строки в ваш ~/.bashrc. Например:

vi ~/.bashrc

export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r;"
$ export HISTCONTROL=ignoredups
$ export HISTTIMEFORMAT='%F %T '

Готово, теперь осталось сохранить изменения и перезапустить ваши терминалы. Теперь ваша история будет выводить дату, игнорировать дубли и синхронизироваться между терминалами.

Выводы

В этой статье мы рассмотрели что такое история команд linux, как с ней работать, как применяется команда history linux и какие настройки можно использовать для более комфортной работы. Если у вас остались вопросы, спрашивайте в комментариях!

14 комментариев к “История команд Linux”

  1. подскажите пожалуйста как настроить посимвольный ввод команды как например это реализовано в бсд. например начинаю вбивать shutd далее жму таб, консоль предлагает варианты либо дописывает автоматом

    Ответить
  2. Когда работал через ssl то не было нумерации команд, к чему очень привык.. есть ли возможность задать формат так, чтобы убрать нумерацию?

    Ответить
  3. Команды history -c или history -d x-y это хорошо, но после перезапуска терминала всё возвращается назад, как быть если я хочу удалить всю историю команд НАВСЕГДА?

    Ответить
  4. Зайди в папку домашняя, отобрази скрытые файлы, найди текстовый документ, где она хранится и удали строчки они удалятся совсем НАВСЕГДА))

    Ответить
  5. Уже в который раз сталкиваюсь с таким. в AltLinux история команд терминала для простого пользователя и суперпользователя свалена в одну кучу и помещена в файл истории команд пользователя, файла истории команд суперпользователя в каталоге /root просто не существует. Как это можно исправить?
    Просто создать файл в каталоге /root?

    Ответить

Оставьте комментарий