路漫漫其修远兮
吾将上下而求索

linux命令历史:history命令

1、简介

history命令会记录shell进程在会话中提交执行过的命令

2、语法

只要当前的shell不退出,当前登录终端的历史命令保存在内存中,只有退出终端的时候,内存中的历史命令才会写入到文件中。清除内存历史命令:history -c

n:数字,要列出最近执行过的 n 条命令
-c:将目前的shell中的所有 history 记忆内容全部消除,保存在 histfiles 的历史命令不受影响
-a:将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles,则预设写入 ~/.bash_history
-r:将 histfiles 的内容读到目前这个 shell 的 history 中,如果当前 history 里面有内容,变为最早的历史命令
-w:将目前的 history 记忆内容写入 histfiles,原有的文件内容被清空
-d:delete,偏移,删除特定历史条目,例如:history -d 100 删除第100条命令

3、命令缓存

        缓存此前命令的查询结果,可以提高命令的运行速度,不用每次都去PATH下面一个一个查询。当以前执行的命令在hash中缓存,当命令被移动到其他地方,缓存仍在缓存的地方找命令,此时要清除错误的hash缓存,让系统去重新找正确的命令路径

命令格式

hash:列出缓存的命令
hash -d COMMAND: 删除,当命令路径人为改变,但缓存不变,会找不到命令,会变成错误的缓存,此时需要删除缓存让系统再识别路径
hash -r: 清空

举例,前面显示这个命令缓存被命中的次数

[root@localhost ~]#hash
hits	command
   1	/bin/cat
[root@localhost ~]#hash -d cat
[root@localhost ~]#hash
hash: hash table empty

4、历史命令保存目录

查看历史命令保存文件的目录,默认历史命令保存在 root 目录下的隐藏文件 /root/.bash_history,只有用户登出的时候内存中的命令才会保存到history文件中

[root@localhost ~]#echo $HISTFILE
/root/.bash_history

5、历史命令记录的方式

[root@localhost ~]#echo $HISTCONTROL
ignoredups

变量值代表的含义

ignoredups:忽略重复命令(默认),即连续重复多次执行这条命令,只在历史命令中记录一条
ignorespace:忽略以空白开头的命令,如果想要执行的命令不被历史所记录,可以开启这个变量,同时执行命令的时候加空格开头,就不会被记录
ignoreboth:以上两者都生效

修改环境变量值,仅对当前shell有效,也就是说上面的内存中的历史不会出现重复命令和忽略空白开头的命令

[root@localhost ~]#HISTCONTROL='ignoreboth'
[root@localhost ~]#echo $HISTCONTROL
ignoreboth

如果想要上面的变量永久生效,添加到 /etc/bashrc 里面或者用户的家目录下面, .bash_profile 文件并重读配置文件即可

[root@localhost ~]#vim .bash_profile 
HISTCONTROL='ignorespace'
HISTFILE='/root/abc'

[root@localhost ~]#source .bash_profile

[root@localhost ~]#echo $HISTCONTROL
ignorespace
[root@localhost ~]#echo $HISTFILE
/root/abc

6、历史命令记录条数

调整记录命令的条数,默认是1000条。也可以使用 HISTSIZE 禁用 history,如果你想禁用 history,可以将 HISTSIZE 设置为 0:

[root@localhost ~]#echo $HISTFILESIZE
1000

[root@localhost ~]#HISTFILESIZE='500'

[root@localhost ~]#echo $HISTFILESIZE
500

7、调用命令历史中的命令

格式

!#: 再执行一次历史列表中第#条命令
!string: 再一次执行命令历史列表中最近一个以string开头的命令

示例

  18  cat abc 
[root@localhost ~]#!18
cat abc 
echo 
[root@localhost ~]#!cat
cat abc 
echo

8、历史命令记录格式

        使用 HISTTIMEFORMAT 显示时间戳,当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行下面的命令,注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。

[root@localhost ~]#export HISTTIMEFORMAT='%F %T '

[root@localhost ~]#history
    1  2017-05-06 20:45:27 history -w
    2  2017-05-06 20:45:35 cat /root/.bash_history 
    3  2017-05-06 20:45:38 history
    4  2017-05-06 20:50:01 hash

9、历史命令搜索

        使用 Ctrl+R 搜索历史,Ctrl+R 是经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。

10、上一条命令的参数

为当前的命令获得上一条命令的参数:!$,或者使用esc+.  组合键更简单

[root@localhost ~]#file !$
file abc
abc: ASCII text
[root@localhost ~]#file abc
abc: ASCII text

11.审计

http://369369.blog.51cto.com/319630/1732164

不管当前用户执行什么操作,还是sudo到root上面,只要最后在这个用户执行

删除历史命令文件,history -c就可以

未经允许不得转载:江哥架构师笔记 » linux命令历史:history命令

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址