什么是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. XP IE8 安装失败

    装完XP后,此时是IE6.装了QQ浏览器,提示会锁定浏览器主页,没怎么在意. 然后装IE8时,提示失败. 在网上搜索了下是其它浏览器或程序锁定了浏览器主页.卸载QQ浏览器后,成功安装IE8.

  2. 移动端开发之px,em和rem详解

    px:表示的是绝对的像素值,1px就是1像素大小 em:关于em,网上有资料说是关于父元素的,但是其实个人感觉这种说法是不对的,其实em的大小是根据自身的font-size确定的,而只是正常的情况下子 ...

  3. 0122(本来是想ak的但是因为智障只拿了200。)

    今天考了一场小测试,额,非常非常水,但是智障的我才A掉两道题. T1: 1.暑假作业   (mtime.pas/c/cpp) [问题描述] 暑假作业是必须要写的,越到假期结束前,写作业的效率就越高,小 ...

  4. Asp.netMVC中地址后缀使用.html,jsp等404错误解决

    asp.net mvc 默认的地址路径url都是没有后缀的比如 www.a.com/aa/bb 等 如果要是www.a.com/aa/bb.html需要专门写路由. 根据我之前的经验,mvc的路由是相 ...

  5. python requests 爬取数据

    import requests from lxml import etree import time import pymysql import json headers={ 'User-Agent' ...

  6. 551. Student Attendance Record I + Student Attendance Record II

    ▶ 一个学生的考勤状况是一个字符串,其中各字符的含义是:A 缺勤,L 迟到,P 正常.如果一个学生考勤状况中 A 不超过一个,且没有连续两个 L(L 可以有多个,但是不能连续),则称该学生达标(原文表 ...

  7. python学习-day 1

    Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...

  8. Python实践练习:选择性拷贝

    题目 项目要求:编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg),不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中. 代码 import os import sh ...

  9. IDEA 配置Jrebet 自动加载Java类,

    官方文档地址: http://manuals.zeroturnaround.com/jrebel/ide/intellij.html#installation 过期激活 https://blog.cs ...

  10. 在Eclipse中创建Maven版的Web工程

    步骤: 1.第一步 2.第二步 3.第三步 4.第四步 选中项目,右键在弹出的对话框中选择properties 5.第五步 6.第六步