History linux где хранятся

Where is bash’s history stored?

If I run history , I can see my latest executed commands. But if I do tail -f $HISTFILE or tail -f ~/.bash_history , they do not get listed. Does the file get locked, is there a temporary location or something similar?

6 Answers 6

Bash maintains the list of commands internally in memory while it’s running. They are written into .bash_history on exit:

When an interactive shell exits, the last $HISTSIZE lines are copied from the history list to the file named by $HISTFILE

If you want to force the command history to be written out, you can use the history -a command, which will:

Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file.

Write out the current history to the history file.

which may suit you more depending on exactly how you use your history.

If you want to make sure that they’re always written immediately, you can put that command into your PROMPT_COMMAND variable:

export PROMPT_COMMAND='history -a' 

Side note: if your .bash_history file accidentally becomes owned by root, things stop working. In that case, check the ownership and use sudo to fix the ownership if needed.

@young_souvlaki I expect your man history is for a library; at least, that’s what the only such man page I have available says at the top. It would be unusual for a library to document command-line options of other software, but help history (in Bash) will show applicable Bash documentation.

Thank you! You are correct! Oddly man history defaults to «history(n)» under «Tcl Built-In Commands». man 3 history gives the «Library Functions Manual». help history gives the options described.

(Not an answer but I cannot add comments)

If you are checking .bash_history because you just want delete a specific command (e.g. containing a password in clear), you can directly delete the entry in memory by history -d .

Читайте также:  Manjaro linux установка загрузчика

For example, supposing an output like:

$ history 926 ll 927 cd .. 928 export --password=super_secret 929 ll 

and you want purge the export line, you can simply achieve it by:

bash keeps it in working memory, bash can be configured to save it when bash closes or after each command, and to be loaded when bash starts or on request.

If you configure to save after each command, then consider the implications of having multiple bash running at same time. (command lines will be interleaved)

The start of you answer makes it sound as if the history is stored in a file called bash, or even in the bash exetable. I would write «It is stored by bash in memory, . «

While running, the history is kept only in memory (by default) if:

  • set -o history (an H in echo «$-» ) is set.
  • HISTSIZE is not 0 and
  • HISTIGNORE is not * (or some other very restrictive pattern).

If any of the above fail, no history is stored in memory and consequently no history could or will be written to disk.

History in memory is written to disk if:

But only when the shell exits or if the commands history -a (append) or history -w (write) are executed.

To trigger an immediate write to disk you can use the variable:

which will append the new history lines to the history file. These are history lines entered since the beginning of the current bash session, but not already appended to the history file.

To overwrite the history in the HISTFILE with the list from memory.

So, you can remove a command from the history in memory:

 $ history 5 6359 ls 6360 cd .. 6361 comand --private-password='^%^&$@#)!@*' 6362 top 6363 set +o | less $ history -d 6361 $ history 5 6359 ls 6360 cd .. 6361 top 6362 set +o | less $ history -w 

And write it to disk with the last command:

 history -w # with `shopt -u histappend` unset 

Источник

Читайте также:  Switch to gui linux

6 Авг 2018 06:08:00 | 0 comments

Настраиваем ведение истории команд в Linux

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

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

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

Как известно, история команд в Linux хранится в файле ~/.bash_history

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

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

export HISTSIZE=10000 export HISTFILESIZE=10000

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

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

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

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

export HISTCONTROL=ignoreboth:erasedups

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

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

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

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

export HISTIGNORE='ls:ps:history*'

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

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

Читайте также:  Update nvidia linux mint

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

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

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

И в конце, все вышеописанные опции можно добавить в ~/.bashrc с помощью одной команды:

cat > ~/.bashrc export HISTSIZE=10000 export HISTFILESIZE=10000 export HISTCONTROL=ignoreboth:erasedups PROMPT_COMMAND='history -a' export HISTIGNORE='ls:ps:history*' export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: ' EOT source ~/.bashrc

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

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

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

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

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

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

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

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

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

Источник

Оцените статью
Adblock
detector