我们经常使用在我们的日常工作中要检查或获取有关用户执行的命令的信息。
在这篇文章中,我们将了解如何有效地使用历史命令来提取用户在 Bash shell 中执行的命令。这对于审计目的或找出在某个时间执行了哪个命令可能很有用。。
默认情况下,执行历史命令时日期和时间戳不可见。但是,bash shell 提供了命令行界面 (CLI) 工具来编辑用户的命令历史记录。
让我们探索一些有用的提示、技巧以及历史命令的强大功能。
要查看上次执行的命令及其行号的完整列表,请使用以下命令。
history

2. 列出所有带有日期和时间戳的命令
要列出 Linux 中的所有命令及其日期和时间戳,您可以使用 History 命令以及历史时间格式环境变量如图所示。
export HISTTIMEFORMAT="%F %T "
现在,您可以使用历史命令列出所有命令及其各自的日期和时间戳。
history
以下是使用的格式占位符的细分HISTTIMEFORMAT='%F %T ':
%F:这表示完整日期,格式为“年-月-日”。%T:这代表时间,格式为“时:分:秒”。

3.忽略历史命令
要忽略历史命令中的命令,可以使用"HISTIGNORE"环境变量,用于指定哪些命令不应记录在命令历史记录中。
您可以使用"export"命令后跟要忽略的所需命令。
export HISTIGNORE='ls -l:pwd:date:'
在此示例中,““,”“, 和 ””被指定,意味着任何包含这些字符串的命令都不会保存在历史记录中。
4.忽略历史中的重复命令
要忽略历史记录中的重复命令,可以使用以下命令,该命令将指示系统不要在历史记录中保存重复的命令,这将有助于保持历史记录干净且没有多余的重复条目。
export HISTCONTROL=ignoredups
选项ignoredups告诉系统在将重复命令记录到历史记录中时忽略它们。如果连续多次执行同一命令,则只有第一次出现的命令会存储在历史记录中。
5. 永久保存导出命令
保存配置HISTTIMEFORMAT,HISTIGNORE, 和HISTCONTROL永久存在于您的 Linux 环境中,您可以将它们添加到您的.bash_profile文件,每次启动新的 shell 会话时都会执行该文件。
nano ~/.bash_profile
将以下行添加到 .bash_profile 文件以设置环境变量:
export HISTTIMEFORMAT="%F %T " export HISTIGNORE="some:commands:to:ignore" export HISTCONTROL=ignoredups
要应用更改,请重新启动终端或在终端中运行以下命令:
source ~/.bash_profile
6. 取消设置导出命令
取消设置HISTTIMEFORMAT和HISTCONTROL环境变量,您可以使用未设置命令删除它们的值,这会将这些设置恢复为其默认配置。
unset HISTTIMEFORMAT unset HISTCONTROL
执行这些命令后,命令历史记录中的时间戳显示将恢复为默认设置,并且不再自动过滤掉重复命令。
7. 列出特定用户执行的命令
要列出特定用户执行的命令,可以使用.bash_history用户的文件,它存储在 Bash shell 中执行的命令的历史记录。
sudo cat /home/username/.bash_history
如果要根据特定模式过滤命令历史记录,请使用以及包含该单词的命令,如图所示。
sudo cat /home/username/.bash_history | grep "ls"
8. 禁用存储命令历史记录
要在 Linux 中禁用命令历史记录的存储,您可以取消设置HISTFILE变量,负责维护文件中命令的历史记录。
unset HISTFILE
通过取消设置HISTFILE变量,可以防止系统存储命令历史记录,确保在终端中执行的命令不会被记录以供将来的会话使用。
需要注意的是,此更改仅适用于当前会话,并且不会在不同的终端会话中持续存在。如果您想让此更改永久生效,您可以考虑更新 shell 的配置.bash_profile文件来取消设置HISTFILE每次登录时变量。
9. 删除或清除命令历史记录
您可以使用向上和向下箭头键查看以前使用过的命令,这可能有用,也可能很烦人。要删除或清除 bash 历史列表中的所有条目,您可以使用'-c'选项。
history -c
要清除所有用户的命令历史记录,您可以删除或截断位于以下位置的历史记录文件:/home/[username]/.bash_history对于每个用户。
> /home/[username]/.bash_history OR rm /home/[username]/.bash_history
10.使用Grep命令搜索历史命令
要过滤历史命令输出中的命令,可以使用,这将仅显示历史记录中包含所示关键字的命令。
history | grep "ls" history | grep "pwd" history | grep "date"
11. 搜索历史记录中最近的命令
要在历史记录中搜索最近的命令,您可以使用grep命令以及包含命令历史记录中的关键字(例如“ssh”)。
history | grep "ssh"
您还可以使用 ' 搜索以前执行的命令Ctrl+r'命令。找到所需的命令后,按 '进入' 执行它,或按 'Esc键' 取消。
(reverse-i-search)`source ': source .bash_profile
12. 调用历史上最后执行的命令
要从 Linux 中命令历史记录中的特定位置调用最后执行的命令,可以使用历史命令以及特定的行号。
要查看带有行号的命令历史记录,请使用 History 命令:
history
接下来,确定与要调用的命令关联的行号,在本例中为命令号 8,然后使用!后跟行号,如图所示。
!8
13. 调用最后执行的特定命令
您可以回忆起以前使用过的命令,例如“netstat -np | 网络统计捕获 22“,通过使用'!'符号后跟该命令的一些字母。
例如,如果您想回忆起“netstat -np | 网络统计捕获 22”命令,您可以输入'!net'并按进入在终端中,这将执行以“开头的最新命令网” 来自您的命令历史记录。
!net
结论
总之,我们已经向您展示了历史命令的有用性,但仍有更多内容需要探索。我们很想听听您使用历史命令的经验!
在下面的评论框中与我们分享。
