Linux 基础教程 44-history命令

什么是history

    在Linux系统日积月累的使用中,我们会输入很多命令。而在我们想重复上一个命令时,通过使用方向键向上翻就可以查看我们已经输入和使用过的命令。那大家有没有想过这个命令保存在什么地方,最大又会保存多少条记录了?今天我们就来学习history命令。
    从history字面意思就可以知道该命令主要用于查看用户曾经输入和使用过的命令。使用该命令可以减少我们日常重复输入命令的次数。其常用选项如下所示:

选项 说明
-c 清除历史命令
-d offset 删除指定位置的history命令
-a 添加新的历史命令记录
-r 从historyfile读取历史记录做为当前的历史记录
-w 将当前的历史记录保存并覆盖到historyfile中

常用用法

重复上一次的执行命令

    在日常使用过程中,最常用的场景就是重复执行上一次的命令,对于这种场景,我想大家用得最多应当是使用方向键向上或向下进行翻滚来实现吧。但可以实现这种场景共有4种方法,分别如下:

  • 使用方向键向上或向下翻滚,按Enter键
  • 输入!!,按Enter键
  • 输入!-1,按Enter键
  • 输入Ctrl+P,按Enter键

重复执行指定的命令

    在日常使用过程,我们不仅仅希望执行上一次的命令,而是想执行指定的历史命令时,则有两种方法

  • 指定ID,则可以使用!HistoryID,如我们想执行historyID为1993的命令,则可以按以下形式进行输入
[root@localhost ~]# !1993
  • 指定命令进行模糊查询,则可以使用!HistoryCmd这里搜索的命令从最后一条历史记录向前搜索,找到满足条件的命令即执行,示例如下:
[root@localhost ~]# cat -n ~/.bash_history | grep du
   562	du -ah --exclude="*/.*" .
   564	du -ah .
   565	du -ah . | more
   566	du -ah --exclude="*/.*" .
   567	du -h --max-depth=1 /
   568	du -h --max-depth=1 / | sort -hr
[root@localhost ~]# !du
#找到离当前最近执行的命令
du -h --max-depth=1 / | sort -hr

搜索曾经执行的命令

    在Window中如果大家要搜索文件常用快捷键Ctrl+F,而Linux中搜索曾经执行过的命令则使用快捷键Ctrl+R

# 在当前Shell中按Ctrl+R,而后输入命令即可
(reverse-i-search)`du': cat -n ~/.bash_history | grep du

给历史命令添加时间戳

# 预先定义一个环境变量
[root@localhost ~]# export HISTTIMEFORMAT=' %F %T '

root@localhost ~]# history
 1009   2018-08-14 23:18:22 pidof sshd
 1010   2018-08-14 23:18:22 pidof -o 1995
 1011   2018-08-14 23:18:22 pidof sshd -o 1995

清除历史命令

    虽然历史命令方便和减少日常需要输入执行命令的时间,但也会存在安全隐患。如果不小心在历史命令输入连接其他Linux的地址、MySQL等密码。一旦出现系统被黑掉或被非管理员看到,则可能存在严重的隐患,这时候大家肯定会想到清除历史命令。这时可以使用-c选项

[root@localhost ~]# history -c

    在使用以下选项,就真的把历史命令给清空了吗?答案当然不是。在下次重新登录后,历史命令依然存在,这是什么原因?

-c 选项只是暂时把Linux系统内存中的历史命令给清空,当用户退出时,就不会有历史命令记录追加到.bash_history中,当用户重新登录后,系统会重新加文件.bash_history,而历史命令便又会重新显示出来了。

    真正能完全清空历史命令的做法如下:

  • 方法一:
[root@localhost ~]# history -c ; history -w
  • 方法二:清空~/.bash_history文件
[root@localhost ~]# echo "" > ~/.bash_history

history配置

  • 设置历史记录时间:
[root@localhost ~]# export HISTTIMEFORMAT=' %F %T '
  • 控制历史命令记录个数
#设置内存中保存的命令记录个数
[root@localhost ~]# export HISTSIZE=300
# 设置.bash_history中保存的命令记录个数
[root@localhost ~]# export HISTFILESIZE=300
  • 更改默认保存文件
        系统默认配置会将历史命令保存到~/.bash_history中,如果要保存到其他文件,可以按以下方法进行更改
[root@localhost ~]# export HISTFILE=~/.historycmd.txt
  • 其他配置
# 清除整个命令历史记录中的重复记录
[root@localhost ~]# export HISTCONTROL=erasedups
# 忽略命令历史记录中连续重复的记录
[root@localhost ~]# export HISTCONTROL=ignoredups
# 忽略命令历史记录中以空格开始的记录
[root@localhost ~]# export HISTCONTROL=ignorespace
# 忽略命令历史记录的重复记录和以空格开始的记录
[root@localhost ~]# export HISTCONTROL=ignoreboth

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
MyQRCode.jpg

posted @ 2018-08-31 22:41  Surpassme  阅读(603)  评论(0编辑  收藏  举报