2011-10-20 67 views
0

是否可以将特定用户的历史记录存储在除HISTFILE中提到的默认文件之外的另一个文件中? 我希望作为备份文件,如果主文件被删除,让它像一个备份。如何在Linux中的两个文件中有历史记录

Regards, Sriharsha Kalluru。

+1

什么历史? –

+0

我觉得这是bash shell,你能确认一下吗? – Kimvais

+0

对不起,迟到的回应。是的,它是一个bash shell。 –

回答

2

您可以创建一个硬链接到文件

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

当在他家原来的文件被删除的文件仍然存在,并保留丢失的内容。

+0

请注意,尽管只有其中一个名称被删除,硬链接才会保留文件内容。如果某个进程覆盖或以其他方式损坏了该文件,则它也会影响该链接的名称。 – bigendian

+0

@bigendian:这是正确的。我只提出这个解决方案,因为它完全匹配OP的文件被删除的场景。感谢您的澄清! –

0

hard links解决你的问题?

你也可以阅读手册页here

+0

我不认为用另一个问题回答问题实际上非常有用。 RTFM都没有反应。 – heltonbiker

1

很多时候,我发现自己用Ctrl-R在Bash中得到旧的命令终端宽度的四倍,只是为了发现已经过了很多天,并且它不再位于.bash_history文件中。这里有两行将跟踪你在bash提示符下键入的每个命令行,并且根本不使用外部进程,只是纯粹的bash。

我对这个问题的第一种方法是将历史上的最大行数增加到非常大的数量。但不管它有多大,总会有一段时间,我需要一个长达几个月前输入的长命令,它已经离开了历史。当我了解PROMPT_COMMAND变量时,当前的解决方案出现在我的脑海中,这是一个在显示每个提示之前bash执行的命令。这里有两条线:

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

一个目标我开始对自己是为了实现它,而无需使用任何外部的过程,所以庆典就不必每次输入AT其迅速按下后,一个新的进程。第一行将历史行的格式设置为将日期包含为Unix时间戳,因此您现在可以在键入每条命令时进行输入。第二行,这是解决方案的核心,首先确保的是,如果以前的PROMPT_COMMAND设置,它就会被我们的东西之前执行,然后会将一行格式:

PID USER INDEX TIMESTAMP COMMAND 

到一个名为文件。当前用户主页中的bash_eternal_history。

添加用户名似乎并不需要,后来在“sudo -s”会话和保留“〜/”相同值的正常会话之间变得有用,因此将行附加到相同的.bash_eternal_history文件。

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

+0

嗨,谢谢你提供的信息,这是我需要的信息,但是如果我们输入一个空命令,那么以前的命令将存储在永久文件中。所以请让我知道如果有什么方法可以超过这个。 –

相关问题