Linux历史记录——您在命令行上使用的命令记录——可以简化重复命令,并在您试图跟踪最近的系统或帐户更改时提供一些非常有用的信息。
然而,在开始侦察之前,您需要了解两件事,一是shell的命令内存可以是选择性的,二是运行命令的日期和时间是可选的。
基本的Linux历史
让我们首先看看在命令行中输入命令时如何记录日期和时间。默认情况下,它们不是。history命令只是提供了以前使用过的命令的列表。这就是保存在历史文件中的全部内容。对于bash用户,这些信息都被填充到.bash_history文件中;对于其他shell,它可能只是。history。
/ /创建历史文件
如何多如果已经设置了HISTSIZE(通常是这种情况),则保留的命令历史记录受HISTSIZE设置的限制。大多数帐户被设置为记录100、500或1000条命令,当超过这个限制时,旧的命令会被新命令覆盖。
$ echo $HISTSIZE 500
另一个有趣的行为是,在当前登录会话中输入的命令是不添加到历史文件,直到注销。相反,它们被写入历史缓冲区,该缓冲区在登录会话结束时添加到历史文件中。
向历史文件添加日期和时间
默认情况下,历史文件只记住命令本身,而不是输入它们的日期/时间。您所做的任何事情都无法提供有关过去何时使用这些命令的信息。
如果想要记录日期和时间,可以在登录时运行的.bash_profile文件中添加这样的命令。然后,您可以将文件的来源(。~/.bash_profile),以便立即激活更改,或者等到下一次登录时更改才生效。
$ echo export HISTTIMEFORMAT=\"%m/%d/%y %T \" >> ~/.bash_profile . txt . txt
您选择的格式将决定您的命令历史记录将如何显示,但是不如何记录它。当使用上述设置时,日期和时间信息将以“02/20/18 09:10:11”的格式显示。时间格式的每个部分代表一个日期组件。
y年2位格式y年4位格式m月2位格式d日2位格式T时间24小时格式%r日期12小时AM/PM格式% d日期mm/dd/yy格式
在HISTTIMEFORMAT设置中,不要忽略结束引号前的空白,否则你的日期和命令会像这样一起运行:
11 02/19/18 21:19:21cat .bash_profile 12 02/19/18 21:19:27vi .bash_profile 13 02/19/18 21:20:06echo $HISTCONTROL .bash_profile
一旦您选择了日期格式,日期和时间将添加到您的历史文件。但是,没有日期将被添加到先前添加到文件中的记录中。相反,一旦更改生效,您将看到与这些命令相关联的日期和时间,但它们只是反映文件中最早记录的时间-不这些命令实际输入的日期和时间。
如果你改变了日期格式的想法,没问题。当您使用history命令时,您的命令历史记录将以任何当前格式显示日期/时间信息。这说明存储在历史文件中的时间戳与您选择的显示格式无关。事实上,日期/时间信息将以这种形式存储在历史文件中:
1519083591
“那是什么?你可能会问。它以臭名昭著的Unix“epoch”格式显示时间——自Unix/Linux开始以来的秒数。如果你想在工作中看到一些转换,请查看这个时代转换器.如果想查看这些时间戳是如何存储的,可以使用od命令,你会看到这样的行:
0016440 171 012043 061 065 061 071 060 070 063 065 071 061 012 157 144 y \n #1 5 1 9 0 8 3 5 9 1\n o d 001646040 055 142 143 040 056 142 141 163 150 137 150 151 163 164 157B a s h _ h I s t o
注意到里面的数字1519083591了吗?转换器会告诉你,这个数字表示2018年2月19日,星期一,11:39:51 GMT。有趣的是,这个值实际上不是以数字形式存储的,而是以表示时间戳的一系列字符(例如,字符1、字符5等等)的形式存储的。
实现选择性记忆
选择性记忆有两种发挥作用的方式。首先,您可以保持在当前登录会话中输入的命令不被添加到历史文件中。请记住,它们不会被添加到该文件,直到您注销。如果你用历史- c在您注销之前,这些命令将被忘记。
另一种选择是让shell忽略以空格开头的命令。换句话说,如果您输入“pwd”而不是“pwd”,该命令将不会被记录在您的历史文件中。要使该特性生效,您需要将HISTCONTROL设置为“ignorespace”。
出口HISTCONTROL = ignorespace美元
其他设置包括ignoredups(连续输入命令时忽略重复的命令)和ignoreboth(忽略以空格和重复的命令)。要使用多个设置,请在HISTCONTROL变量中用冒号分隔它们。例如:
美元出口HISTCONTROL = ignorespace: ignoredups
如果您希望该设置一直有效,可以将显示的命令添加到登录时读取的文件(例如.bash_profile)中,并检查确保下次登录时设置正确。
$HISTCONTROL:ignoredups
总结
你不能改变历史,但你可以控制它的记录方式——至少在Linux上可以。