当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

几周前,我创建了一台 Ubuntu 虚拟机,从那时起我就一直在其中断断续续地开发项目。

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

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

最佳思路

可能会也可能不会获得所有命令。这取决于您执行的命令数量以及历史记录限制的设置方式。

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

/home/$USER/.bash_history

其中 $USER 是您的用户名。

这是一个相关问题(用于处理多个 shell 历史记录):Is it possible to make writing to .bash_history immediate?

次佳思路

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

如果你想永远记录在bash中输入的每条命令,你必须自己设置。例如,您可以将以下内容放入 ~/.bashrc 文件中,以将 bash shell 中键入的所有命令记录到文件 ~/.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}包含当前正在执行的命令。

第三种思路

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

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

第四种思路

您只能返回已设置的历史限制;一旦达到这一点,历史将开始被重写。然而,未来可能会有更大的历史规模。将其放入您的 .bashrc 并指定一个值(我的设置为 1000):

export HISTSIZE=1000

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13909.html,未经允许,请勿转载。