如何查找自机器创建以来 shell 命令的历史记录?

如何查找自机器创建以来 shell 命令的历史记录?

几周前,我创建了一个 Ubuntu VirtualBox 机器,从那时起我就一直在其中断断续续地开展项目。

现在我想找到一周前在终端中输入的一些命令的语法,但我已经多次打开和关闭终端窗口并重新启动机器。

如何让history命令返回到我创建机器后输入的第一个命令?
或者 Ubuntu 中是否有其他地方存储所有命令?

答案1

可能或不可能获取所有命令。这取决于您执行了多少命令以及如何设置历史记录限制。

不过,您可以看到存储在这里的历史列表:

/home/$USER/.bash_history

你的用户名在哪里$USER

这是一个相关问题(用于处理多个 shell 历史记录):是否可以立即写入 .bash_history ?

答案2

默认情况下,没有地方记录并无限期地保存所有命令,尽管~/.bash_history包含过去的几个命令(如果您使用bash,这是 Ubuntu 中的默认 shell)。

如果你想每一个bash录制中输入的命令永远,您必须自行设置。例如,您可以将以下内容放入文件中~/.bashrc,以将在 shell 中输入的所有命令记录bash到文件中~/.command_log

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

上面的代码在 上设置了一个陷阱DEBUG,该陷阱在执行普通命令之前执行。caller内置函数用于测试命令是在交互式 shell 中输入还是通过 之类的方式运行~/.bashrc。该值${BASH_COMMAND}包含当前正在执行的命令。

答案3

您可能还想知道如何搜索以前的命令历史记录。您可以通过按下Ctrl+r,然后输入要匹配的字母,在命令行上反向搜索历史记录。如果有多个匹配的命令,请Ctrl+r再次按下 。要退出反向搜索,请按下Ctrl+g

http://www.ice2o.com/bash_quick_ref.html

答案4

您只能回溯到您设置的历史限制;一旦达到该点,历史记录将开始被覆盖。但是,将来可以拥有更大的历史记录大小。将其放入您的 .bashrc 并指定一个值(我的设置为 1000):

export HISTSIZE=1000

相关内容