什么是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. 遍历树节点(多层)的方法(java)

    前序遍历,后序遍历,广度遍历,深度遍历,遍历一级节点.以及按钮如何响应点击事件. import java.awt.*; import java.awt.event.*; import java.uti ...

  2. Java通过匿名类来实现回调函数

    在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2() ...

  3. python文本挖掘输出权重,词频等信息,画出3d权重图

    # -*- coding: utf-8 -*- from pandas import read_csv import numpy as np from sklearn.datasets.base im ...

  4. 【UVA】11825 Hackers' Crackdown(状压dp)

    题目 传送门:QWQ 分析 $ n<= 16 $ 显然是状压 然后搞一搞(靠着蓝书yy一下) 代码 #include <bits/stdc++.h> using namespace ...

  5. mysql-5.6.20主从同步错误之Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND

    mysql-5.6.20主从同步错误之Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND 方法一:  1.Error_code: 1032; ha ...

  6. python推荐书籍

    推荐的python电子书 python学习路线图 优先级 入门:python核心编程 提高:python cookbook 其他 (1).数据分析师 需要有深厚的数理统计基础,但是对程序开发能力不做要 ...

  7. ADO.Net学习总结

    一.讲述6个ADO.NET中的常用对象: Connection对象Command对象DataReader对象DataAdapter对象DataSet对象DataTable对象DataRow对象Data ...

  8. Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]

    1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java package com.rhythmk.model; import java.util.Date; ...

  9. curl返回302 found问题相关

    在使用curl 的时候 ,偶尔会遇到一些URL跳转到新的URL,即HTTP中的3XX(redirection,重定向 ) 此时如果不设置自动跳转倒新url的话,可能会出现问题. 一些网上的解决方法: ...

  10. LUA ipairs遍历的问题

    t = { 1, 2, 3, nil, 4,} for k, v in ipairs(t) doprint(k, v)end print("------------------------- ...