帮助中心 >
  关于独立服务器 >
  分享Linux中bash历史命令提取方法
分享Linux中bash历史命令提取方法
时间 : 2024-12-13 14:31:19
编辑 : Jtti

日常工作中经常会用history命令来查看命令的历史记录来获取有关用户执行的命令信息。下面一起了解如何使用history命令提取用户在bash shell中执行的命令。默认时执行history命令时不会显示日期和时间戳,但是bash shell提供了命令行界面工具用于编辑用户命令历史记录。

查看最后执行的命令完整列表及其行好:

history

列出所有带日期和时间戳的命令:

export HISTTIMEFORMAT="%F %T "

使用history命令列出全部命令机器各自日期和时间戳:

history

所使用的格式占位符的细目HISTTIMEFORMAT='%F %T ':

%F:这表示“ YYYY-MM-DD ”格式的完整日期。

%T:这表示“ HH:MM:SS ”格式的时间。

忽略历史记录中某个命令,您可以通过使用该"export"命令后跟要忽略的命令来设置它。

export HISTIGNORE='ls -l:pwd:date:'

其中,指定了“ ls -l ”,“ pwd ”和“ date ”,这意味着任何包含这些字符串的命令都不会保存在历史记录中。

忽略历史记录中的重复命令,可以保证历史记录更简洁:

export HISTCONTROL=ignoredups

该选项ignoredups告诉系统在记录历史记录时忽略重复的命令。如果连续多次执行相同的命令,则只有第一次出现的命令会存储在历史记录中。

要将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

取消设置导出命令,可以用unset命令来删除它们的值,会把这些设置都恢复默认配置:

unset HISTTIMEFORMAT

unset HISTCONTROL

执行这些命令后,命令历史中的时间戳显示将恢复为默认设置,并且不再自动过滤掉重复的命令。

要列出特定用户执行的命令,您可以使用.bash_history该用户的文件,该文件存储在 Bash shell 中执行的命令的历史记录。

sudo cat /home/username/.bash_history

如果您想根据特定模式过滤命令历史记录,请使用grep 命令以及包含单词的命令。

sudo cat /home/username/.bash_history | grep "ls"

禁用Linux中命令历史记录的存储,可以用HISTFILE:

unset HISTFILE

通过取消HISTFILE的变量,可以组织系统存储命令历史记录,确保在终端执行的命令不会被记录来供将来会话使用。此更改仅适用于当前会话,不会在不同的终端会话中持续存在。如果您想使此更改永久生效,可以考虑更新 shell 的配置.bash_profile文件,以HISTFILE在每次登录时取消设置该变量。

可以使用上下箭头键查看以前使用过的命令,这可能很有用,也可能很烦人。要从 bash 历史记录列表中删除或清除所有条目,您可以使用该'-c'选项。

history -c

要清除所有用户的命令历史记录,您可以删除或截断位于每个用户的历史记录文件/home/[username]/.bash_history。

> /home/[用户名]/.bash_history

rm /home/[用户名]/.bash_history

要过滤历史命令输出中的命令,可以使用grep 命令,它将仅显示历史记录中包含所示关键字的命令。

history | grep "ls"

history | grep "pwd"

history | grep "date"

JTTI-Defl
JTTI-COCO
JTTI-Selina
JTTI-Ellis
JTTI-Eom