Bash History显示每个命令的日期和时间
bash shell 提供对命令历史记录(以前输入的命令列表)的访问。HISTSIZE 变量的值用作要保存在历史记录列表中的命令数。如果设置了HISTTIMEFORMAT,则与每个历史记录条目相关的时间戳信息将写入历史记录文件,并用历史记录注释字符标记。本页介绍在 Linux 或类 Unix 系统上运行 history 命令时如何显示带有日期和时间的 bash 历史记录。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
先决条件 | date 命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 4 分钟 |
Bash History显示每个命令的日期和时间
默认情况下,history 命令将显示如下输出:
$ history
示例输出:
1994 ls S*.pdf 1995 ls -lh S*.pdf 1996 xdg-open Statement_Jun\ 2018.pdf 1997 xdg-open System_01Jun2018_30Jun2018_0133*.pdf 1998 ssh vivek@ln.cbz01 1999 gpass 2000 history
上述命令不会显示 bash 历史记录中命令的执行时间。要解决这个问题,请创建一个名为 HISTTIMEFORMAT 的 shell 变量。
如何查看 bash 历史记录中的时间戳
定义名为 HISTTIMEFORMAT 的环境变量如下:
$ HISTTIMEFORMAT="%d/%m/%y %T "
或者添加到您的 ~/.bash_profile 文件中,输入:
$ echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
其中,
- %d- 天
- %m- 月
- %y- 年
- %T- 时间
使用 source 命令将 HISTTIMEFORMAT 从文件加载到当前 shell 脚本或命令提示符中:
$ . ~/.bash_profile
或者
$ source ~/.bash_profile
如何按日期和时间检索 Linux 或 Unix bash 命令行历史记录
现在,要查看历史记录,请输入:
$ history
示例输出:
.... .. 986 11/03/10 04:31:36 memcached-tool 10.10.28.22:11211 stats 987 11/03/10 04:31:36 w 988 11/03/10 04:31:37 iostat 989 11/03/10 04:31:37 top 990 11/03/10 04:31:37 at 991 11/03/10 04:31:38 atop 992 11/03/10 04:31:40 collectl 993 11/03/10 04:31:41 grep CPU /proc/cpuinfo 994 11/03/10 04:31:45 vmstat 3 100 995 11/03/10 04:31:55 sar -W -f /var/log/sa/sa12 .... ..
这是我的 Ubuntu Linux 服务器的另一个输出:
图 01:将日期和时间添加到我的 bash 历史记录中
控制 Bash 历史记录行为
我们可以使用 shopt 命令来控制 Linux、macOS 和类 Unix OS 下 history 命令的可选 shell 行为。语法为:
shopt -s {option} # set/enable shopt -u {option} # unset/disable
选项 | 描述 | 设定值 | 未设置值 |
---|---|---|---|
histappend | 如果设置,则当 shell 退出时,历史列表将附加到由 HISTFILE 变量的值命名的文件中,而不是覆盖该文件。 | set -s histappend | set -u histappend |
histreedit | 如果设置了,并且正在使用 readline,则用户有机会重新编辑失败的历史替换。 | set -s histreedit | set -u histreedit |
histverify | 如果设置了,并且正在使用 readline,历史替换的结果不会立即传递给 shell 解析器。相反,结果行会加载到 readline 编辑缓冲区中,以便进一步修改。 | set -s histverify | set -u histverify |
其他 shell 变量
我们可以为历史命令设置以下附加变量:
环境变量 (使用export 命令) |
描述 |
---|---|
HISTCONTROL=ignoreboth:erasedups | 如果值列表包含ignorespace,则以空格字符开头的行将不会保存在历史列表中。此外,ignoredups选项会导致与上一个历史条目匹配的行不被保存。 的值ignoreboth是ignorespace和 的简写ignoredups。我们可以设置erasedups选项,导致在保存当前行之前从历史列表中删除与当前行匹配的所有先前行。任何不在上述列表中的值都将被忽略。 |
PROMPT_COMMAND="history -a; history -n" | 在显示下一个提示之前运行 history 命令。该-a选项将此会话中的历史行附加到历史文件中。-n从历史文件中读取所有尚未读取的历史行并将其附加到历史列表中 |
HISTIGNORE="ls:ll:cd:pwd:bg:fg:history" | 用冒号分隔的模式列表,用于决定应将哪些命令行保存在历史列表中。 |
HISTSIZE=100000 | 命令历史中要记住的命令数。 |
HISTFILESIZE=10000000 | 历史文件包含的最大行数。 |
结论
您刚刚学习了如何显示或查看 bash 历史记录中的时间戳,包括执行命令的日期。有关更多信息,请键入以下命令或参阅此处的gnu/bash 页面:有关更多信息,
请参阅“ Shell 入门:掌握您的 Linux、OS X、Unix Shell 环境”。
$ man bash
$ help history
$ man 3 strftime