我们在日常工作中经常使用history命令来查看命令的历史记录或获取用户执行的命令信息。在这篇文章中,小编将介绍如何有效地使用history命令来提取在Bash shell中由用户执行的命令。这对于审计目的或查找特定日期和时间执行了哪个命令可能很有用。
默认情况下,在执行history命令时日期和时间戳是不可见的。然而,bash shell提供了命令行界面(CLI)工具来编辑用户的命令历史记录。接下来,让我们探索一些有用的方法技巧和history命令的强大之处。
1、列出Linux中所有最后执行的命令
要查看上次执行的命令及其行号的完整列表,请使用以下命令:
history
2、列出所有带日期和时间戳的命令
要列出Linux系统中的所有命令及其日期和时间戳,可以使用History命令以及HISTTIMEFORMAT环境变量,命令如下:
export HISTTIMEFORMAT="%F %T "
现在,你可以使用history命令列出所有命令及其各自的日期和时间戳:
history
以下是HISTTIMEFORMAT='%F %T '
中中使用的格式占位符的解释:
%F
:这表示完整日期,格式为“ YYYY-MM-DD ”。%T
:表示时间,格式为“ HH:MM:SS ”。
3、忽略history命令
要在history记录中忽略某个命令,可以使用 “HISTIGNORE” 环境变量,该变量用于指定不应记录在命令历史中的命令。
你可以通过使用 “export” 命令,后面跟要忽略的命令来设置它。
export HISTIGNORE='ls -l:pwd:date:'
在此示例中,指定了“ ls -l ”、“ pwd ”和“ date ”,这意味着任何包含这些字符串的命令都不会保存在历史记录中。
4、忽略history中的重复命令
要忽略history中的重复命令,可以使用以下命令,该命令将指示系统不要在history记录中保存重复的命令,这将有助于保持history记录干净且没有多余的重复条目。
export HISTCONTROL=ignoredups
选项ignoredups
告诉系统在将重复命令记录到history记录中时忽略它们。如果连续多次执行同一命令,则只有第一次出现的命令会存储在历史记录中。
5、永久保存export命令
要在Linux环境中永久保存HISTTIMEFORMAT
、HISTIGNORE
和HISTCONTROL
的配置,可以将它们添加到.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、取消设置Export命令
要取消设置HISTTIMEFORMAT
和HISTCONTROL
环境变量的设置,可以使用unset命令删除它们的值,这会将这些设置恢复为其默认配置,命令如下:
unset HISTTIMEFORMAT unset HISTCONTROL
执行这些命令后,命令历史记录中的时间戳显示将恢复为默认设置,并且不再自动过滤掉重复命令。
7、列出特定用户执行的命令
要列出特定用户执行的命令,可以使用该用户的.bash_history
文件,该文件存储在Bash shell中执行的命令的历史记录。
sudo cat /home/username/.bash_history
如果要根据特定模式过滤命令历史记录,请使用grep命令以及包含该单词的命令,具体如下:
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 或者 rm /home/[username]/.bash_history
10、使用Grep命令搜索历史命令
要过滤历史命令输出中的命令,可以使用grep命令,它只会显示历史记录中包含该关键字的命令,如下所示:
history | grep "ls" history | grep "pwd" history | grep "date"
11、搜索历史记录中最近的命令
要在历史记录中搜索最近的命令,可以使用grep命令以及命令历史记录中包含关键字(例如“ssh”)的命令。
history | grep "ssh"
你还可以使用‘Ctrl+r'
命令搜索以前执行的命令。找到要查找的命令后,按“ Enter ”执行它,或按“ esc ”取消。
(reverse-i-search)`source ': source .bash_profile
12、调用历史记录中最后执行的命令
要从Linux中的命令历史记录中的特定位置调用最后执行的命令,可以将history命令与特定行号一起使用。
例如,要查看带有行号的命令历史记录,请使用History命令:
history
接下来,确定与要调用的命令关联的行号(本文中以第8条命令为例),然后使用!
后跟行号来调用该命令,如下所示:
!8
13、调用最后执行的特定命令
你可以使用'!'
符号后跟该命令的一些字母,来调用先前使用过的命令,比如“netstat -np | grep 22”。
所以,如果你想调用“ netstat -np | grep 22 ”命令,可以在终端中键入'!net'
并按Enter,这将执行命令历史记录中最近的以“ net ”开头的命令。
!net
总结
总之,以上介绍了history命令的一些有用示例,但仍有更多内容需要探索,感兴趣的可以找一些资料看看。