linux history命令


bash提供了命令历史的服务,可以将做过的操作记录下来!通过history命令可以列出做过的操作。 如果觉得histsory的输入太麻烦,可以设置history的命令别名!

              [peter@study ~]$ alias h='history'
            
输入h等于输入history!!

history命令可以列出以前运行过的命令列表

              [peter@study ~]$ history [n]
              [peter@study ~]$ history [-c]
              [peter@study ~]$ history [-raw] histfiles
            
选项与参数:
n :数字,列出最近的n行历史命令!
-c :将当前shell中的所有history内容全部清除;
-a :将当前新增的history命令追加到histfiles中,若没有加histfiles参数,则默认写入~/.bash_history文件;
-r :将histfiles的内容读到当前shell的history记录中;
-w :将目前的history内容写入histfiles。

列出目前内存中的所有history记录:

              [peter@study ~]$ history
              ...#前面省略
              1017 man bash
              1018 ll
              1019 history
              1020 history
            
#列出的信息当中,共分两栏,第一栏为该命令在这个shell当中的代码,
#另一个则是命令本身!HISTSIZE决定会列出几笔命令记录!
              [peter@study ~]$ echo ${HISTSIZE}
              1000
            
列出目前最近使用的3个命令:
              [peter@study ~]$ history 3
              1019 history
              1020 history
              1021 history 3
            
将目前的记录写入histfile当中:
              [peter@study ~]$ history -w
            
#默认情况下,会将历史纪录写入~/.bash_history文件中!

正常的情况下,历史命令的读取与记录是这样的:
当我们以 bash 登入 Linux 主机之后,系统会主动的由家目录的 ~/.bash_history 读取以前曾经下过的命令, 那么 ~/.bash_history 会记录几笔数据呢?这就与你 bash 的 HISTFILESIZE 这个变量设定值有关了!
假设本次登入主机后,共下达过100次命令,等注销时,系统就会将101~1100总共1000个历史命令更新到~/.bash_history中。
也就是说,历史命令在我注销时,会将最近的HISTFILESIZE笔记录到我的纪录文件当中啦!
基本上history的用途很大的!但是需要小心安全的问题!尤其是root的历史纪录文件,这是Cracker的最爱! 因为不小心的root会将很多的重要数据在执行的过程中会被纪录在~/.bash_history当中,如果这个文件被解析的话,后果不堪!
如果某些重要的操作记录不希望被后来登录的人看到,在退登录前需要使用history -c; history -w来强迫更新纪录文件!
当然,也可以用 history -w 强制立刻写入的!那为何用更新两个字呢? 因为 ~/.bash_history 记录的笔数永远都是 HISTFILESIZE 那么多,旧的讯息会被覆盖掉! 仅保留最新的!

除了使用history查询命令记录以外,我们还可以使用相关的功能来执行命令:

              [peter@study ~]$ !number
              [peter@study ~]$ !command
              [peter@study ~]$ !!
            
选项与参数:
number:执行第几笔命令的意思;
command:由最近的命令向前搜寻命令串开头为command的那个命令,并执行;
!!:就是执行上一个命令(相当于按↑按键+Enter)
              [peter@study ~]$ history
              66 man rm
              67 alias
              68 man history
              69 history
              #执行第66条命令:
              [peter@study ~]$ !66
              #执行上一个命令,本例中亦即!66:
              [peter@study ~]$ !!
              #执行最近以al为开头的命令(上头列出的第67个):
              [peter@study ~]$ !al
            

想要执行上一条命令, 除了使用上下键之外,还可以直接用!!来执行上一条命令。 也可以直接使用!n执行第n条命令, 还可以使用命令标头,例如!vi执行最近命令开头是vi的命令!

同一账号同时多次登入bash,history写入问题
很多linux用户喜欢同时打开多个bash,这些bash的身份都是root。 这样会有~/.bash_history的写入问题。因为多个bash同时以root身份登入, 所有的bash都有自己的1000笔记录在内存中。 等到注销时才会更新记录文件,但是最后注销的那个bash才会是最后写入的数据,最后注销的bash的历史记录会将之前的bash历史记录覆盖掉。 这样其他bash的命令操作就不会被记录下来了。
由于多重登入有这样的问题,所以很多用户都习惯单一bash登入,再用作业控制(job control)来切换不同工作! 这样才能将所有执行过的命令记录下来,方便未来系统管理员进行命令的debug!
无法记录时间
bash无法记录命令执行的时间。历史命令是依序记录的,但是并没有记录时间,所以在查询方面会有一些不方便。 其实可以通过~/.bash_logout来进行history的记录,并加上date来增加时间参数!

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读