Если я бегу 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
файл случайно становится владельцем root, все перестает работать. В этом случае проверьте владение и используйтеsudo
для исправления владения, если это необходимо.(Не ответ, но я не могу добавлять комментарии)
Если вы проверяете,
.bash_history
потому что вы просто хотите удалить определенную команду (например, содержащую пароль в открытом виде), вы можете напрямую удалить запись в памяти с помощьюhistory -d <entry_id>
.Например, предположим, что вывод:
и вы хотите очистить
export
линию, вы можете просто достичь этого путем:источник
bash сохраняет его в рабочей памяти, bash можно настроить так, чтобы он сохранялся при закрытии bash или после каждой команды, а также загружался при запуске bash или по запросу.
Если вы сконфигурируете сохранение после каждой команды, то учтите последствия одновременного запуска нескольких команд bash. (командные строки будут чередоваться)
источник
bash
исполняемом файле. Я хотел бы написать «Он хранитсяbash
в памяти, ...»Команды сохраняются в памяти (RAM), пока ваш сеанс активен. Как только вы закрываете оболочку, список команд записывается
.bash_history
перед выключением.Таким образом, вы не увидите историю текущего сеанса в
.bash_history
.источник
bash
завершения, что не подразумевает перезагрузку (особенно в графических средах, где вы можете открывать и закрывать терминалы по своему желанию).Во время работы история сохраняется только в памяти (по умолчанию), если:
H
in inecho "$-"
) установлен.0
и*
(или какой-то другой очень строгий шаблон).Если что-то из вышеперечисленного дает сбой, история не сохраняется в памяти и, следовательно, история не может или не будет записана на диск.
История в памяти записывается на диск, если:
Но только при выходе из оболочки или при выполнении команд
history -a
(добавление) илиhistory -w
(запись).Для запуска немедленной записи на диск вы можете использовать переменную:
которые Воля
append
вnew
истории строки в файл история. Это строки истории, введенные с начала текущей сессии bash, но еще не добавленные в файл истории.Или же:
Для того, чтобы переписать историю в HISTFILE со списком из памяти.
Итак, вы можете удалить команду из истории в памяти:
И запишите его на диск с помощью последней команды:
источник