什么是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,或扫描下面的二维码添加关注:

Linux 基础教程 44-history命令的更多相关文章

  1. Linux 基础教程 37-进程命令

    pidof     我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...

  2. Linux 基础教程 32-解压缩命令

        将文件压缩后对提升数据传输效率,降低传输带宽,管理备份数据都有非常重要的功能,因此文件压缩解压技能就成为必备技能.相对于Windows中的文件解压缩工具百花争艳,在Linux中的解压缩工具则要 ...

  3. Linux基础 - 系统优化及常用命令

    目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...

  4. Linux基础系统优化及常用命令

    # Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...

  5. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  6. Linux基础01 学会使用命令帮助

    Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...

  7. Linux基础教程 linux下查询history操作时间的方法

    要在linux操作系统中查看history记录的操作时间,可以按如下步骤实现: 学习linux 1,修改/etc/profile文件,在末尾添加:exporthisttimeformat=”%f %t ...

  8. Linux基础教程 linux中使用find命令搜索文件常用方法记录

    find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方 ...

  9. Linux基础知识之history的详细说明

    背景:history是Linux中常会用到内容,在工作中一些用户会突然发现其安装不了某个软件,于是寻求运维人员的帮助,而不给你说明他到底做了哪些坑爹的操作.此时你第一件要做的就是要查看其history ...

随机推荐

  1. 【linux】用户与组

    一.用户和组的基本概念                                               1.用户 用户:用于获取计算机资源或服务的标识符,比如用户名.计算机处理的是UID, ...

  2. 国产FPGA市场分析 该如何破局

    2018年上半年对于中国半导体行业而言是多事之秋,发生了几件让国人深入思考的大事.我作为IC产业的逃兵,最近也在思考很多的问题,包括资本市场.集成电路行业和研究所的一些不成熟的想法. 2008年进入华 ...

  3. pythonNet day02

    网络收发缓冲区 1.协调读写速度.减少和磁盘交互 2.recv和send实际上是从缓冲区获取内容,和向缓冲区发送内容 recv()特性 1.如果连接断开,recv会立即结束阻塞返回空字符串 2.当接收 ...

  4. 6.5笔记-DQL高级查询

    一.高级查询 Exists Drop table if exists result; 子查询有返回结果: EXISTS子查询结果为TRUE 子查询无返回结果: EXISTS子查询结果为FALSE, 外 ...

  5. Windows 远程桌面连接Ubuntu16.04图像界面

    1.安装xrdp sudo apt-get install xrdp 2. 安装vnc4server sudo apt-get install vnc4server 3. 安装xubuntu-desk ...

  6. 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #4 如何使用Git

    HACK #4 如何使用Git 本节介绍Git的使用方法.Git是Linux内核等众多OSS(Open Source Software,开源软件)开发中所使用的SCM(Source Code Mana ...

  7. python值解析excel

    原文:http://blog.csdn.net/tomatoandbeef/article/details/52253578 一.安装python和xlrd模块 python下载地址,安装好后要配置环 ...

  8. 28.OGNL与ValueStack(VS)-总结$ # %的区别

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html $用于i18n和struts配置文件 #取得ActionContext的值 ...

  9. jQuery用FormData对象实现文件上传以及如何通过ajax下载文件

    之前在Vue的项目里面用到过文件上传,封装好的组件用起来比较顺手,查询Element-UI文档,十八般武器样样都有,一顿操作猛如虎,一看--跑偏了(⊙o⊙)-,我的意思就是用框架实现比较简单,但是如果 ...

  10. JAVA_03

    在Java中,理解JDK.JRE.JVM三者的区别是十分重要的; JDK JDK是Java Development Kit(Java开发工具包)的缩写,包含JRE和其他开发工具. JRE JRE是Ja ...