通过history命令可以查看我们在系统中输入过的命令

history命令的一些常用参数

-c  清空内存中命令历史

-d #  删除指定的历史命令,比如 history -d 100 ,就是删除第100个命令历史

# : 显示最近的#条历史,例如:history 20 ,表示显示最近的20条命令历史

-a: 追加本次会话新执行的命令历史列表至历史文件

-n: 将历史文件中未读过的行加载到内存中的历史列表,方便多个终端同步内存中的命令历史。

-r: 读取历史文件中的所有历史命令到内存中的历史列表,即使内存中的列表中已经存在这条历史。

-w: 保存内存中历史列表到指定的历史文件,history -w ./test 把历史写入到当前目录的test文件中

-p: 官方解释没看懂,我觉得此命令相当于echo的作用,但是使用history -p string输出的信息不被记录到历史中,

就是“不被记录的echo,隐形echo,你可以尝试使用history -p $变量名,这样会不会觉得很像echo?

但是如果你使用history -p string1 string2,会发现它并不像echo打印到一行,会打印成多行。

-s: 伪造命令历史,比如history -s rm -rf /opt,这样写并不会执行删除opt目录的操作,只是把这条没有执行的"命令"加入到了历史中。



history命令的相关文件

当我们输入history命令,history会将命令历史返回给我们,当我们重启机器后,再次执行history命令,还是会返回历史命令,证明历史命令是存在于某个文件中的,这个文件就是

~/.bash_history

每个用户家目录中都有一个隐藏文件,.bash_history  ,历史命令最终都存放在此文件中。

我们先使用history命令查看,可以看到当前登录后的一些命令历史,但是我们查看.bash_history却没有发现当前登录后的历史命令,这是因为本次登录后执行的命令历史存放在内存中,当我们退出本次会话,本次会话的命令历史才会从内存写入到.bash_history文件中,使用-a参数可以不退出当前会话,即可将内存中的历史命令追加到历史文件中。

由此也可见,命令历史会在登陆后从历史文件中被加载到内存中,可以理解为有两个地方存放。

/etc/profile

此文件中配置了history命令的相关变量,在此文件中配置的history命令的变量全局生效。

~/.bash_profile

如果在此文件中重复配置/etc/profile中配置过的history的相关变量,那么以此文件中的配置为准,此文件中的命令历史相关配置只对当对应用户有效。


history命令的相关变量

HISTSIZE变量,用于history命令最多显示多少条命令历史。

HISTSIZE=1000,表示内存中最多缓存加载1000条命令历史,也就是说history命令返回最多1000条命令,可是我们使用history命令查看的时候,却可能发现命令已经记录到了1041条,这并不是我们的设置没有生效或者发生错误,而是“最开始的1到41条”已经被挤出了命令历史,序号是从“41”开始的,所以记录到1041条正好是1000条,如果设置 HISTSIZE=0 代表永远不记录历史。

HISTFILESIZE变量,用于配置~/.bash_history中最多保存多少条历史。

centos6中 ,HISTSIZE 和 HISTFILESIZE默认都是1000,但是 HISTFILESIZE 我们可以稍微设置大一点,这样能保存更多的历史,而且~/.bash_history是存放在硬盘中的,所以即使设置的条目数量很大,对于现在的硬盘容量来说,也是比较小的,当然,太大的话读取也会很慢,但是HISTSIZE就不要设置的太大,因为个人觉得HISTSIZE设置过大没有必要,还占用内存资源。

HISTTIMEFORMAT变量,用于配置命令历史的时间格式。

HISTTIMEFORMAT="%F  %T  "  这样设置HISTTIMEFORMAT变量是设置历史命令的时间格式的,当然,我们也可以灵活运用,加入一些自己想要显示的信息,比如:HISTTIMEFORMAT="`hostname` %F  %T  ",可以理解为格式化历史命令的显示方式,此例中的格式表示在命令历史前加入 主机名 、日期、时间等信息。

HISTIGNORE变量,指定不记录到历史中的命令。

HISTIGNORE="cmd1:cmd2:…"    表示忽略cmd1,cmd2这些命令,cmd1和cmd2将不被记录在命令历史中,但是如果你对cmd1加选项和参数的话,还是会被记录到历史中,除非你只使用cmd1,不加任何选项和参数。

HISTFILE变量,指定存放历史的文件。

HISTFILE=/root/his.log  指定记录历史的文件,默认存储命令历史的文件为用户家目录下的.bash_history

HISTCONTROL  变量 ,控制历史记录的方式的变量。

通过设置 环境变量:HISTCONTROL  可以控制历史的记录方式,HISTCONTROL  变量可以设置成如下值。

ignoredups 不记录“重复”的命令;连续且相同 方为“重复”

ignorespace 不记录所有以空格开头的命令,此变量值非常实用,我们可以通过临时更改HISTCONTROL 的变量值为ignorespace ,

以便当前会话中的以空格开头不被记录到历史中。

ignoreboth 表示ignoredups:ignorespace ,效果相当于以上两种的组合。

erasedups  删除重复命令


怎样快速执行上一条命令

有 4 种方法可以重复执行上一条命令:

1、使用上方向键,并回车执行。

2、按 !! 并回车执行。

3、输入 !-1 并回车执行。

4、按 Ctrl+P 并回车执行。

调用特定的历史命令的方法

!!重复前一个命令

! 字符重复前一个以“字符”开头的命令

!num按照历史记录的序号执行命令

!?abc重复之前包含abc的命令

!-n执行命令历史列表中的倒数第n条命令,!-1代表上一条命令

调用历史命令的参数的方法

#cmd !^ 或者#cmd !!^       : 利用上一个命令的第一个参数做cmd的参数

#cmd !$ 或者#cmd !!$       : 利用上一个命令的最后一个参数做cmd的参数

#cmd !* 或者#cmd !!*       : 利用上一个命令的全部参数做cmd的参数

#cmd !:n或者#cmd !!:n      : 利用上一个命令的第n个参数做cmd的参数

#cmd !n:^ 调用第n条命令的第一个参数做cmd的参数

#cmd !n:$ 调用第n条命令的最后一个参数做cmd的参数

#cmd !m:n 调用第m条命令的第n个参数做cmd的参数

#cmd !n:* 调用第n条命令的所有参数做cmd的参数

#cmd !string:^ 从命令历史中搜索以 string 开头的命令,并获取 它的第一个参数,当做cmd的参数

#cmd !string:$ 从命令历史中搜索以 string 开头的命令,并获取它 的最后一个参数,当做cmd的参数

#cmd !string:n 从命令历史中搜索以 string 开头的命令,并获取 它的第n个参数,当做cmd的参数

#cmd !string:* 从命令历史中搜索以 string 开头的命令,并获取 它的所有参数,当做cmd的参数

从上述语法可以看出

调用历史命令的方法  和 调用历史命令参数的方法 是可以互相组合的

一些相关的快捷键

ctrl键 + r    快捷键可以从命令历史中查找(reverse-i-search)

按(Alt+.)或者(按esc后松手,再按.)可以调用上一个命令的最后一个参数。

注意:

历史扩展只能用在交互shell,不能用在shell脚本中

一些小例子

history命令应用的小例子

我们通常会打开多个远程命令行窗口连接到一台主机进行操作,这样更方便,假设我通过ssh远程工具,打开了两个远程窗口,窗A、窗B

加入我们一开始在窗A执行了一些命令,然后切换到窗B,在窗B中又执行了一些不同的命令。

那么这时候我们在窗B中使用history命令查看历史命令,会发现窗A中执行过的命令并没有在窗B中的history中显示。

我们可以通过如下方法,将窗A中的命令历史同步到窗B中

1、在窗A中执行history -a将内存中的命令写入到历史文件中

2、在窗B中执行history -n ,从历史文件中将新增历史命令加载到窗B的内存历史列表中

3、在窗B中执行history命令,已经可以看到窗A中执行过的命令

调用历史命令参数的小例子

mkdir a b c
cd !!:1
cd a
mkdir a b c
cd !!:2
cd b
mkdir a b c
cd !$
cd c

注意:

历史扩展只能用在交互shell,不能用在shell脚本中

!$是引用上一个命令的最后一个参数

$_是引用前一个命令的最后一个参数

一个是前一个命令一个是上一个命令

例如

mkdir -p testdir && cp -r  /opt "$_"

马哥教育Linux学习笔记

http://www.magedu.com/

http://mageedu.blog.51cto.com

.

转载于:https://blog.51cto.com/zz6547/1830928

Linux中的history命令相关推荐

  1. 如何在Linux中使用history命令

    随着我在终端会话中花费越来越多的时间,感觉就像我一直在寻找使我的日常任务更加高效的新命令一样. GNU history命令确实改变了我的工作日. GNU history命令保留了从该终端会话运行的所有 ...

  2. Linux学习系列二:Linux中的常用命令

    这个系列的Linux教程主要参考刘遄老师的<Linux就该这么学>.用的系统是RHEL8,如果遇见一些命令出现问题,请首先检查自己的系统是否一致,如果不一致,可网上查一下系统间某些命令之间 ...

  3. Linux中升级更新命令yum upgrade和yum update的区别

    这篇文章主要介绍了Linux中升级更新命令yum upgrade和yum update的区别,Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的,本文 ...

  4. Linux中的In命令

    2019独角兽企业重金招聘Python工程师标准>>> ln是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用 ...

  5. linux一条命令添加用户并设置密码,linux中如何通过命令行来添加用户并设置密码...

    linux中如何通过命令行来添加用户并设置密码 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 LINUX中如何通过命令行来添加用户 ...

  6. linux dmesg信息哪来的,linux中的dmesg命令简介

    今天, 我们来介绍一个linux中的dmesg命令,事实上, 我们之前用过, 但是没有单独介绍过. 看一下dmesg命令的用途吧: dmesg命令用会把开机信息存到ring bufer中, 形成一个缓 ...

  7. Linux中如何用命令打开文件夹

    Linux中如何用命令打开文件夹 文章目录: 一.点击Linux桌面文件图标打不开 二.解决方式 三.杀死所有nautilus相关进程 你是否遇到过Linux桌面文件图标打不开,我就遇到过,此时我的眼 ...

  8. linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档

    第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...

  9. linux中的nm命令

    代码在git 是names的缩写, nm命令主要是用来列出某些文件中的符号(说白了就是一些函数和全局变量等). 下面, 我们一起来看看. linux中的nm命令简介 nm * nm: main.c: ...

最新文章

  1. 在网页中加入百度搜索条
  2. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration
  3. 手把手教你webpack4.x从零开始搭建vue项目
  4. 大数据WEB阶段(二十)更新丢失
  5. 常见排序算法的C#实现
  6. Queue 输出数据
  7. python多线程实现同时下载_Python实现多线程下载
  8. 工业相机在全息成像中的应用
  9. 筛选法求素数-c++
  10. ResNet网络结构详解、完整代码实现
  11. 练习4-11 统计素数并求和
  12. securecrt破解版64位
  13. 计算机无法关机 总是自动启动不了怎么办,电脑不能关机,小编教你电脑关机后总是重启怎么办...
  14. ES数据库重建索引——Reindex(数据迁移)
  15. 记一次git 之windows凭据管理器引发的xx
  16. OSChina 周四乱弹 ——老司机的幼年日常
  17. 利用手机软件fing查询树莓派的ip地址
  18. UIView 的部分圆角的设定
  19. 东南亚电商发展迅猛,中国卖家“钱”途光明
  20. inet_aton、inet_addr、inet_ntoa、inet_pton、inet_ntop

热门文章

  1. Boost:bind绑定类型测试
  2. Boost:boost::bimaps::list_of的测试程序
  3. DCMTK:转换dicom文件编码
  4. OpenCV透视校正perspective correction的实例(附完整代码)
  5. OpenCV“智能剪刀“Intelligent Scissors的实例(附完整代码)
  6. Qt Designer的Tab顺序编辑模式
  7. C++Odd Even Sort奇偶排序的实现算法(附完整源码)
  8. C语言字符串转换为整数(附完整源码)
  9. QT的QHttpPart类的使用
  10. C++代码在Sublime Text 3中编译和运行