在数据库中记录bash-history

时间:2013-07-02 04:01:35

标签: bash

之前我编写了一个脚本,将我以前访问过的目录记录到sqlite3 db。我写了一些快捷方式来快速搜索和浏览历史记录。现在我想用我的bash命令做同样的事情。

当我在bash中执行命令时,如何获取命令名?我是否必须更改负责编写bash-history的bash源代码部分?一旦我拥有了我的命令历史数据库,我就可以在其中进行智能搜索。

5 个答案:

答案 0 :(得分:3)

Bash已将所有命令记录到〜/ .bash_history,这是一个纯文本文件。

使用向上/向下箭头浏览内容,或按control-r搜索。

答案 1 :(得分:2)

很抱歉这么晚来这个问题!

我倾向于在我工作的地方运行很多炮弹,因此长时间运行炮弹的历史将会一直混乱或丢失。我终于厌倦了我开始登录数据库:)

我还没有完成整合,但这是我的设置:

  1. 在启用SYSLOG的情况下重新编译bash。从bash 4.1版开始,这段代码全部到位,只需要在config-top.h中启用它。我相信。
  2. 安装新bash并配置syslog客户端以记录user.info消息
  3. 安装rsyslog和rsyslog-pgsql插件以及postgresql。如果遇到问题或者在这里询问,我在debian测试PM上安装了这个问题我有几个问题:)
  4. 配置用户消息以提供给数据库。
  5. 在所有这些结束时,所有命令都应该记录到名为systemevents的名为table的数据库中。如果你经常使用shell,你肯定想要在几个字段上设置索引,因为查询可以永远开始:)

    以下是我设置的几个索引:

    索引:     " systemevents_pkey" PRIMARY KEY,btree(id)     " systemevents_devicereportedtime_idx" btree(devicereportedtime)     " systemevents_fromhost_idx"哈希(fromhost)     " systemevents_priority_idx" btree(优先级)     " systemevents_receivedat_idx" btree(收到)

    fromhost,receivedat和devicereportedtime特别有帮助!

    从我使用它的短暂时间开始,这真是太棒了。它让我可以在最近的任何服务器上找到命令!永远不要失去命令!如果您有多个用户,也可以将其与停机/其他问题相关联。

    我打算编写自己的rsyslog插件,使数据库中的历史格式更加实用。当我这样做时不适当地更新:)

    祝你好运!

答案 2 :(得分:1)

看看fc

  

fc:fc [-e ename] [-lnr] [first] [last]或fc -s [pat = rep] [command]       显示或执行历史列表中的命令。

fc is used to list or edit and re-execute commands from the history list.
FIRST and LAST can be numbers specifying the range, or FIRST can be a
string, which means the most recent command beginning with that
string.

Options:
  -e ENAME    select which editor to use.  Default is FCEDIT, then EDITOR,
      then vi
  -l  list lines instead of editing
  -n  omit line numbers when listing
  -r  reverse the order of the lines (newest listed first)

With the `fc -s [pat=rep ...] [command]' format, COMMAND is
re-executed after the substitution OLD=NEW is performed.

A useful alias to use with this is r='fc -s', so that typing `r cc'
runs the last command beginning with `cc' and typing `r' re-executes
the last command.

Exit Status:
Returns success or status of executed command; non-zero if an error occurs.

您可以调用它来将文本插入到您的表中,但是如果它已经被bash保存了,为什么还要费心呢?

答案 3 :(得分:1)

您可以使用Advanced Shell History工具将shell历史记录写入sqlite3,并使用提供的ash_query工具从命令行查询数据库。

vagrant@precise32:~$ ash_query -Q
Query    Description
CWD      Shows the history for the current working directory only.
DEMO     Shows who did what, where and when (not WHY).
ME       Select the history for just the current session.
RCWD     Shows the history rooted at the current working directory.

您可以编写自己的自定义查询,也可以从命令行使用它们。

除了命令之外,此工具还为您提供了许多额外的历史信息 - 您可以获得退出代码,开始和停止时间,当前工作目录,tty等。

完全披露 - 我是作者和维护者。

答案 4 :(得分:0)

要获取完整历史记录,请使用history命令并处理其输出:

$ history > history.log

或使用以下方法刷新历史记录(由BASH保存在内存中):

  $ history -a

然后处理〜/ .bash_history