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


23

几周前,我创建了一个Ubuntu虚拟机机器,此后一直在进行内部项目的开发。

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

history创建机器后,如何获取返回到我键入的第一个命令的命令?
还是还有其他所有命令都存储在Ubuntu中的地方?


2
据我所知你做不到。您只能返回设置了历史记录缓冲区的位置。如果您询问可以安装什么软件包来将来无限期保存命令历史记录,也许您应该修改问题。
RobotHumans 2012年

Answers:


26

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

但是您可以看到历史记录列表存储在此处

/home/<YOUR_USERNAME>/.bash_history

相关问题(用于处理多个shell历史记录):

是否可以立即写入.bash_history?


3
仅从一个终端/外壳保存历史记录是不正确的。运行时history,它将显示当前外壳程序的历史记录,以及最近的所有其他外壳程序(包括先前会话中的外壳程序,包括跨电源循环的外壳程序)的历史记录。所有外壳程序实例将其历史记录保存.bash_history退出时。在此之前,没有实例会自动将其保存在那里。
伊莱亚·卡根

6

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

如果要永久记录键入的所有命令,则必须自己进行设置。例如,您可以将以下内容放入文件中,以将在shell中键入的所有命令记录到文件中:bash~/.bashrcbash~/.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

上面在on上设置了一个陷阱DEBUG,该陷阱正好在执行普通命令之前执行。该caller内置用于测试是否该命令在交互的shell正在键入或通过类似运行~/.bashrc。该值${BASH_COMMAND}包含当前正在执行的命令。


我想指出的是,在macOS上,此技术还会登录update_terminal_cwd历史记录文件,这是用户不运行但会自动运行的命令。
Ashish Ahuja,

5

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

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


4

只要设置了历史记录限制,您就只能返回。一旦达到该点,历史记录将开始被覆盖。但是,将来可能会有更大的历史记录。将其放在您的.bashrc中并指定一个值(我的值设置为1000):

export HISTSIZE=1000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.