定期保存 bash 历史记录

定期保存 bash 历史记录

我已将 bash 设置为将历史记录保存到文件中。每当 bash [正常] 退出时,它都会执行此操作。有时 bash 无法正常退出,历史记录就会丢失。

所以问题是我可以设置 bash 来更定期地保存历史记录吗?


我正在运行带有 Linux 内核的 D​​ebian Gnu(版本 6,Squeeze)。

bash 版本:GNU bash,版本 4.1.5(1)-release(i486-pc-linux-gnu)

答案1

将其保存到您的 bash_profile 或 bashrc

shopt -s histappend

PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

答案2

我决定在我的 .bash_aliases 中使用export PROMPT_COMMAND='history -a',它在每个提示符下将内存中的历史列表写入历史文件。我在重复数据删除方面遇到了一些问题,但都解决了。我确实求助于使用 cron.daily 和 monthly 来备份文件。如果终端在没有退出的情况下中断,它将不会被保存。即使捕获退出也不起作用。不幸的是,cron 作业也不能保存存储在内存中的历史列表。我找不到一种方法来向当前正在运行的 shell 发送命令以history -w从列表写入文件。可以使用它,但如果想要将工作分开,则必须为在选项卡中打开的每个 shell 单独创建一个。如果没有,还有另一个链接讨论如何在每个提示符下写入同时进行重复数据删除。

https://unix.stackexchange.com/questions/697314/any-way-to-resolve-export-prompt-command-history-a-and-histcontrol-ignored/720637#720637

答案3

您的 $HISTFILE 可能归 root 所有。假设您使用 bash 作为登录 shell。检查方法如下:

$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history

HISTFILE 的默认值应该是 ~/.bash_history,如果您看到错误“需要设置 HISTFILE”或者 $HISTFILE 不是 ~/.bash_history,那么您应该检查 ~/.profile 或 ~/.bash_profile 或 ~/.bashrc 以确保它没有被错误地设置或重置。

通常,它只归 root 所有,因此只需重置它:

$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history

注销然后登录。

$ history

应该显示在文件归 root 所有之前输入的最后一组命令,然后是文件所有权更改之后输入的命令。

相关内容