首先让我在下面展示一个例子。
在 shell(1) 中我执行了以下命令。
$ ping google.com
PING google.com (74.125.235.164) 56(84) bytes of data.
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=1 ttl=54 time=2.85 ms
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=2 ttl=54 time=3.42 ms
然后,打开另一个 shell(2) 并查看历史记录。
$ history
.
.
.
8720 exit
8721 clear
8722 history
在这种情况下,shell无法看到shell(1)执行的历史记录,但我想查看每个shell中的所有bash历史记录。
所以我的问题是如何查看所有 bash 历史记录?有人知道怎么破解吗
提前非常感谢您!
cat ~/.bash_history
也可以工作,尽管我倾向于只使用
vim ~/.bash_history
然后使用
/
进行搜索
您应该查看
histappend
shell 选项和 -a
标志到 history
:
histappend
如果设置,当 shell 退出时,历史列表将附加到由
变量的值命名的文件中,而不是覆盖该文件。HISTFILE
history
将“新”历史行(自当前 bash 会话开始以来输入的历史行)附加到历史文件中。-a
如果您将
history -a
放入 PROMPT_COMMAND
中,您将获得始终最新的 .bash_history
文件。
试试这个:
编辑您的 .bashrc 并将其附加到其末尾:
shopt -s histappend
PROMPT_COMMAND="history -n; history -a"
unset HISTFILESIZE
HISTSIZE=2000
来源:http://subbass.blogspot.com.br/2009/10/howto-sync-bash-history- Between.html
您可以安装高级 Shell 历史记录之类的东西,它会将每个命令记录到 sqlite3 数据库中。 它附带了一个用于从命令行查询数据库的工具。 https://github.com/barabo/advanced-shell-history
通过此设置,您将拥有所有会话的命令历史记录的统一视图。 您还可以获得当前工作目录(或子树)的命令历史记录、命令退出代码、命令持续时间等信息。
完全披露:我编写并维护了该工具。
正如一些人所指出的,您需要使用
shopt -s histappend
。通过运行 shopt
并验证 histappend 是否“打开”进行检查。
为了确保每个命令(跨多个并发 shell)出现在每个 shell 的历史记录中,请将其添加到 .bashrc 文件的末尾:
# Skip if not an interactive shell
if [ -z "${PS1}" ]; then return; fi
export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
-a:将新的历史行(自当前 Bash 会话开始以来输入的历史行)追加到历史记录file。
-c:清除历史记录列表。
-r:读取当前历史记录文件并将其内容追加到历史记录列表。
运行
source .bashrc
或创建新会话,并在多个终端窗口中在每个窗口中输入注释 #Tn
。 然后在一个终端上输入 history | tail -N
查看最后 N 行。 您应该会看到在不同终端上输入的所有评论。
将以下内容添加到
/etc/profile.d/bashrc.sh
可能会有所帮助,以便在历史记录的每一行上获取时间戳:
if [ -z "${PS1}" ]; then return; fi
export HISTTIMEFORMAT='%F %T '
结果如下所示:
[moi@laBoheme ~]$ history | tail -4
3292 2019-01-22 12:41:25 # T1
3293 2019-01-22 12:41:32 # T2
3294 2019-01-22 12:41:44 # T3
3295 2019-01-22 12:41:50 history | tail -4
history 1
为我工作..
这将显示从第 1 行开始的历史记录。