如何在linux中的两个文件中有历史记录

时间:2011-10-20 17:13:06

标签: linux

是否可以将特定用户的历史记录放在除了提到的HISTFILE的默认文件之外的另一个文件中? 如果删除了主文件,我希望将其作为备份文件,并将其作为该文件的备份。

此致 Sriharsha Kalluru。

4 个答案:

答案 0 :(得分:2)

您可以创建文件的硬链接

cp --link --verbose /home/$USER/.bash_history /somewhere/else/users_history

当删除其家中的原始文件时,该文件仍然存在,并保留内容不会丢失。

答案 1 :(得分:1)

很多时候我发现自己在Bash中使用Ctrl-R来获取一个旧命令,这是终端宽度的四倍,只是为了发现已经过了太多天而且它已经不在.bash_history文件中了。这两行将跟踪您在bash提示符下键入的每个命令行,并且根本不使用任何外部进程,只需简单的bash。

我解决这个问题的第一个方法是将历史记录中的最大行数增加到非常大的数量。但不管它有多大,总有一个时刻我需要一个很长时间的命令,我在几个月前输入它已经离开了历史。当我了解PROMPT_COMMAND变量时,我想到了当前的解决方案,这是一个在显示每个提示之前执行bash的命令。以下是两行:

export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
           "$(history 1)" >> ~/.bash_eternal_history'

我为自己设定的一个目标是在不使用任何外部进程的情况下实现它,因此bash不必在每次按下提示符后按下一个新进程。第一行设置历史记录行的格式以将日期包括为Unix时间戳,因此您现在可以在键入每个命令时使用。第二行是解决方案的核心,首先确保,如果设置了先前的PROMPT_COMMAND,它将在我们的东西之前执行,然后附加一行格式:

PID USER INDEX TIMESTAMP COMMAND

到当前用户家中名为.bash_eternal_history的文件。

添加用户名,最初看起来是不必要的,后来在“sudo -s”会话和保留“〜/”相同值的正常会话之间进行分离变得有用,因此将行添加到相同的.bash_eternal_history文件中。

我希望你们中的一些人发现这两行与我一样有用。 : - )

答案 2 :(得分:0)

hard links会解决您的问题吗?

您也可以阅读手册页here

答案 3 :(得分:0)

我会写一个cronjob,每分钟左右将原始的histfiel复制到一个备份位置。你不必担心定义第二个histfile。  否则你可以编写用户输入备用文件的每个命令 对于这种方法,请看一下:

bash, run some command before or after every command entered from console