Мы решили проблему! Делая квази двоичный поиск на различиях в опциях конфигурации между "хорошими" и "плохими" ядрами, мы узнали, что проблема происходит из-за включения SLES11 ext3
запишите барьеры по умолчанию. Ядро, созданное с, списывает барьеры, по умолчанию не имел проблемы. И когда мы использовали ядро с проблемой, но помещали barrier=0
в опциях монтирования в /etc/fstab
, проблема ушла.
Bash поддерживает список команд внутри памяти во время работы. Они записываются в .bash_history
при выходе :
При выходе из интерактивной оболочки последние строки $ HISTSIZE копируются из списка истории в файл с именем $ HISTFILE
. хотите принудительно записать историю команд, вы можете использовать команду history -a
, которая:
Добавляет новые строки истории (строки истории, введенные с начала текущего сеанса Bash) в файл истории.
Также существует опция -w
:
Записать текущую историю в файл истории.
, который может вам больше подойти в зависимости от того, как именно вы используете свою историю.
Если вы хотите, чтобы они всегда записывались немедленно, вы можете поместить эту команду в свою PROMPT_COMMAND
переменную:
export PROMPT_COMMAND='history -a'
(Не ответ, но я не могу добавлять комментарии)
Если вы проверяете .bash_history
, потому что вы просто хотите удалить определенную команду (например, содержащую пароль в открытом виде), вы можете напрямую удалить запись в памяти с помощью history -d
.
Например, предположим, что вывод такой:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
и вы хотите очистить строку export
, вы можете просто добиться этого с помощью:
history -d 928
]Команды сохраняются в памяти (RAM), пока активна сессия. Как только Вы закрываете оболочку, список команд перед выключением записывается в [].bash_history[
].[
] Таким образом, Вы не увидите историю текущего сеанса в [].bash_history[
]. [
bash сохраняет его в В рабочей памяти bash можно настроить так, чтобы она сохранялась при закрытии bash или после каждой команды и загружалась при запуске bash или по запросу.
Если вы настраиваете сохранение после каждой команды, то учитывайте последствия одновременного запуска нескольких bash. (командные строки будут чередоваться)
Во время работы история хранится только в памяти (по умолчанию )если:
H
в echo "$-"
). 0
и*
(или каким-либо другим очень ограничительным шаблоном ). Если что-либо из вышеперечисленного не удается, история не сохраняется в памяти и, следовательно, никакая история не может быть записана на диск.
История в памяти записывается на диск, если:
Но только при выходе из оболочки или при выполнении командhistory -a
(append )илиhistory -w
(write ).
Чтобы вызвать немедленную запись на диск, вы можете использовать переменную:
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