# history

```
history                      - паказати історію команд
history 5                    - показати 5 останніх команд
history | grep anystring     - показати команди, що мають підрядок anystring
!!                           - запустити останню команду
```

Див. більше:

{% embed url="https://www.geeksforgeeks.org/history-command-in-linux-with-examples/" %}

## Налаштування ведення історії

Bash ведет историю всех команд, введенных в консоли, но по умолчанию некоторые настройки хранения этой истории заданы не сильно рациональными.

Давайте сделаем ведение и чтение истории более удобным, а так же рассмотрим вопрос очистки истории команд.

**Исходные данные:** Debian 9

История команд в Linux хранится в файле \~/.bash\_history

Размер файла ограничен списком из 500 последних выполненных команд, которые затираются по мере заполнения этого файла.\
500 команд — это довольно мало, Вы легко можете потерять полезную команду которую выполнили скажем неделю назад.

Чтобы увеличить размер хранимой истории необходимо в файл \~/.bashrc добавить строки:

```bash
export HISTSIZE=5000
export HISTFILESIZE=5000
```

* HISTSIZE — количество команд, которые необходимо запоминать в списке истории (по умолчанию — 500);
* HISTFILESIZE — максимальное количество строк, содержащееся в файле истории \~/.bash\_history (по умолчанию — 500);

Теперь у нас будет храниться история последних 5 тыс. команд.

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

```bash
source ~/.bashrc
```

или перезайти в терминал.

Идем дальше, если Вы выполните команду history, то заметите, что выполненные подряд одни и те же команды повторяются в истории. Это жутко неудобно, давайте отключим такое поведение. Для этого в файл \~/.bashrc добавим строку:

```bash
export HISTCONTROL=ignoreboth:erasedups
```

Опция HISTCONTROL контролирует каким образом список команд сохраняется в истории.

* ignorespace — не сохранять строки начинающиеся с символа <пробел>
* ignoredups — не сохранять строки, совпадающие с последней выполненной командой
* ignoreboth — использовать обе опции ‘ignorespace’ и ‘ignoredups’
* erasedups — удалять ВСЕ дубликаты команд с истории

Не забываем выполнить source \~/.bashrc для применения настроек на лету.

Следующая полезная настройка отвечает за игнорирование определенных команд при добавлении в историю, это HISTIGNORE.

Давайте не будем сохранять в истории команды ls, ps и history с доп. опциями. Для этого в файл \~/.bashrc добавим строку:

```bash
export HISTIGNORE='ls:ps:history*'
```

Не забываем выполнить source \~/.bashrc для применения настроек на лету.

По умолчанию, Bash записывает историю команд в \~/.bash\_history только при завершении сессии. Если Ваша сессия будет отключена некорректно, то как правило история команд в текущем сеансе не сохраниться — это неудобно. Чтобы это исправить нужно добавить в \~/.bashrc следующую строку:

```bash
PROMPT_COMMAND='history -a'
```

Как Вы уже заметили, вывод истории команд не учитывает дату и время выполнения этой команды, а иногда бывает очень нужно понимать, когда же Вы выполнили эту команду. Но все можно поправить, чтобы добавить дату к списку команд нужно изменить формат вывода истории, для этого в \~/.bashrc нужно добавить строку:

```bash
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: '
```

Не забываем выполнить source \~/.bashrc для применения настроек на лету.

:exclamation:UPD: Опція `HISTTIMEFORMAT` буде додавати після кожної команди часову мітку!&#x20;

```
eval "$(ssh-agent -s)"
#1714463897
ssh-add ~/.ssh/username
#1714463905
cd /home/met/web/
#1714463924
git status
#1714464035
git commit -a -m "switch for hotfix"
#1714464046
git push origin feature
#1714464078
```

Все вышеописанные опции можно добавить в \~/.bashrc:

```ini
HISTSIZE=5000
HISTFILESIZE=10000
HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -a'
HISTIGNORE='ls*:pwd:history*'
# export HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S: '
```

```
source ~/.bashrc
```

:exclamation:UPD: Краще додати на початку файлу, а не в кінець, бо, наприклад, в LinuxLite пропала красива строка вводу (powerline), де вказувалася активна гілка git (на що я не одразу звернув увагу і ледь не сплутав її зі строкою вводу сервера!)

## Очищення історії&#x20;

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

Если нужно удалить конкретную строку в истории, то выполните:

```
history -wd 231
```

Для удаления всей истории команд выполните:

```
history -c
```

Если нужно очистить историю команд только для текущей сессии, то выполните:

```
history -r
```

:exclamation:Следует обратить внимание, что если Вы сохраняете историю сразу по факту выполнения команды (настройка PROMPT\_COMMAND=’history -a’), а не по выходу из сессии как это предусмотрено по умолчанию, то полную очистку истории указанными выше способами (опции -c и -r) вы не сделаете, история в файле \~/.bash\_history сохраниться. Тогда для полной очистки истории команд нужно очистить файл \~/.bash\_history, для этого выполните:

```bash
echo>~/.bash_history
```

и закройте текущую сессию, тогда история будет очищена полностью.

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

```
set +o history
```

Для включения ведения истории команд в текущей сессии выполните:

```
set -o history
```

[https://blog.programs74.ru/configure-history-in-linux/](https://blog.programs74.ru/configure-history-in-linux/)



Див. також:

{% embed url="https://www.geeksforgeeks.org/histcontrol-command-in-linux-with-examples/" %}

