日常工作中经常会用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"