Если я бегу history, я вижу свои последние выполненные команды.
Но если я делаю tail -f $HISTFILEили tail -f ~/.bash_history, они не попадают в список.
Файл заблокирован, есть временное местоположение или что-то подобное?
Если я бегу history, я вижу свои последние выполненные команды.
Но если я делаю tail -f $HISTFILEили tail -f ~/.bash_history, они не попадают в список.
Файл заблокирован, есть временное местоположение или что-то подобное?
Ответы:
Bash поддерживает список команд внутри памяти, пока он работает. Они записаны .bash_historyна выходе :
При выходе из интерактивной оболочки последние строки $ HISTSIZE копируются из списка истории в файл с именем $ HISTFILE.
Если вы хотите принудительно записать историю команд, вы можете использовать history -aкоманду, которая будет:
Добавьте новые строки истории (строки истории, введенные с начала текущего сеанса Bash) в файл истории.
Также есть -wопция:
Запишите текущую историю в файл истории.
который может подойти вам больше в зависимости от того, как именно вы используете свою историю.
Если вы хотите убедиться, что они всегда пишутся немедленно, вы можете поместить эту команду в вашу PROMPT_COMMANDпеременную:
export PROMPT_COMMAND='history -a'
(Не ответ, но я не могу добавлять комментарии)
Если вы проверяете, .bash_historyпотому что вы просто хотите удалить определенную команду (например, содержащую пароль в открытом виде), вы можете напрямую удалить запись в памяти с помощью history -d <entry_id>.
Например, предположим, что вывод:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
и вы хотите очистить exportлинию, вы можете просто достичь этого путем:
history -d 928
bash сохраняет его в рабочей памяти, bash можно настроить так, чтобы он сохранялся при закрытии bash или после каждой команды, а также загружался при запуске bash или по запросу.
Если вы сконфигурируете сохранение после каждой команды, то учтите последствия одновременного запуска нескольких команд bash. (командные строки будут чередоваться)
bashисполняемом файле. Я хотел бы написать «Он хранится bashв памяти, ...»
Команды сохраняются в памяти (RAM), пока ваш сеанс активен. Как только вы закрываете оболочку, список команд записывается .bash_historyперед выключением.
Таким образом, вы не увидите историю текущего сеанса в .bash_history.
bashзавершения, что не подразумевает перезагрузку (особенно в графических средах, где вы можете открывать и закрывать терминалы по своему желанию).
Во время работы история сохраняется только в памяти (по умолчанию), если:
Hin in echo "$-") установлен.0 и*(или какой-то другой очень строгий шаблон).Если что-то из вышеперечисленного дает сбой, история не сохраняется в памяти и, следовательно, история не может или не будет записана на диск.
История в памяти записывается на диск, если:
Но только при выходе из оболочки или при выполнении команд history -a(добавление) или history -w(запись).
Для запуска немедленной записи на диск вы можете использовать переменную:
PROMPT_COMMAND='history -a'
которые Воля appendв newистории строки в файл история. Это строки истории, введенные с начала текущей сессии bash, но еще не добавленные в файл истории.
Или же:
PROMPT_COMMAND='history -w'
Для того, чтобы переписать историю в HISTFILE со списком из памяти.
Итак, вы можете удалить команду из истории в памяти:
$ 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
И запишите его на диск с помощью последней команды:
history -w # with `shopt -u histappend` unset
.bash_historyфайл случайно становится владельцем root, все перестает работать. В этом случае проверьте владение и используйтеsudoдля исправления владения, если это необходимо.