"忘记历史的Linux用户注定要输入很多信息。”

这也让强有力的历史命令(包括Bash shell的历史变体)不仅在援引之前执行命令而不需重新输入它们时有用,在调用其它很少用到的命令时也有用,这省去了必须重新使用它们的麻烦。该命令按时间顺序列出了之前执行命令的清单。

该命令的输出示例如下:

01 $ history
02 ...
03 62 rm 092210.sql
04 63 mysqldump
05 64 mysqldump -u root -p dev_gamenomad_com > 092210.sql
06 65 more 092210.sql
07 66 rm 092210.sql
08 ...
09 9991 mkdir chapter05
10 9992 cd chapter05
11 9993 dir
12 9994 npm install websocket-server
13 9995 node hello.js
14 9996 exit
15 9997 history

与每条命令相关的顺序号服务于重要目的,允许用户通过提供直接跟着感叹号的顺序号来重新执行相关命令,如下:

1 $ !10000
2 sudo /etc/init.d/apache2 start
3 * Starting web server apache2

但这并不是全部。Linux历史命令能做到更多,本文后续部分也将提及。

掌控历史扩展

敲击向上箭头键会显示之前执行的命令,敲击Enter键会再次执行该命令。但是还可以使用另一个可能更快的包括历史扩展功能的选择:

$ !!

如果你重复执行同样两条或三条命令的不同排列组合,你还可以选择通过识别其位移负指数来执行出现在上一命令出现处的命令。例如,执行之前命令的前一命令(回退两条命令),运用以下序列:

$ !-2

执行早期命令的另一方式是输入紧跟着感叹号的命令序列号的开头。符合字符对象的第一条命令会执行。举例来说,假设最后三条命令如下:

$ history
...
9876 build-book /home/wjgilmore/easy_php
9877 mkdir chapter05
9878 cd chapter05
9879 touch chapter05.md

你可以只通过运行以下命令来再次执行构书脚本:

$ !b

用两步过程创建一个确认它的新目录和导航和以运用历史扩展缩短。在本例中,我创建了一个叫做easy_bash的新目录,位置在/home/wjgilmore/books。要确认该目录,运用!$来获得在前一命令中发现在最后“字符”:

$ mkdir /home/wjgilmore/books/easy_bash
$ cd !$

搜索命令历史

虽然可以翻阅命令历史(或使用grep命令),但在使用Ctrl+R开放选择搜索它之后也可以调用该命令的片段,提示的命令行将如下所示:

(reverse-i-search)`':

开始输入命令片段,命令行会实时更新反映出最符合的一条。输入apa后会出现类似于这样的命令:

(reverse-i-search)`apa': sudo /etc/init.d/apache2 start

当你看到想要的命令,敲击Enter执行它,或者敲击向上箭头键在重新执行前修改它。

调整历史行为

你可以做很多有趣的设置更改来控制命令历史的行为方式。例如,Bash shell设置的默认历史大小是500条记录,这个限制很快就达到了,即使是很小的命令行相互作用。你可以通过设置在Bash配置文件(.bashrc,位于主目录中)上发现的HISTSIZE变量提高限制数。

HISTSIZE=10000

你在命名为HISTCONTROL的.bashrc中通常还会遇到另一个与历史有关的变量。该变量帮助明确规定历史文件中的存放内容(位于.bash_history,也可见于主目录中)。例如,你也许在检查最新的日志文件附件时重复执行了尾命令,就在运行tail的几分钟里。通过重复来集群历史文件不太实际,通过设置它为ignoredups来让HISTCONTROL变量忽视复制行。

HISTCONTROL=ignoredups

可疑效用的另一个HISTCONTROL设置是忽略空格。该HISTCONTROL设置的结果是所有前面有空格的执行命令都从历史文件中删除。这对于不跟踪每条命令似乎起了反作用,但是如果你除了ignoredups之外还想实现该功能,你可以将两者设置成:

HISTCONTROL=ignoreboth

我最后要谈及的一个功能是命令替换。假设你想基于一个虚拟主机配置文件模板快速配置一群虚拟主机。这些命令序列可能非常长,就像下面所示:

$ cp vhost.template /etc/apache2/sites-available/dev.example.com
$ cp vhost.template /etc/apache2/sites-available/forum.example.com
$ cp vhost.template /etc/apache2/sites-available/staging.example.com

通常你执行该一列命令的方法会是首先输入和执行,接着向上滚动、删除尾行片段(dev.example.com),然后输入下一片段(forum.example.com),然后重新执行。另一种方法,你可以运用命令替换来快速地用一行字符串替换另一相关字符串,如下所示:

$ !!:s/dev/forum

该命令行在指向-点击界面中已为用户带来了大量好处,让任务执行和操作系统导航可以快速且优雅地完成。最大程度上地利用历史命令只能增加这些功能,促进生产力会走得更远。

linux历史命令的更多相关文章

  1. linux 历史命令用法(转)

    许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

  2. 强有力的Linux历史命令 你还记得几个

    列出所有出现到的命令:(所有一下信息都可以通过man history得到,而且还更多) history:列出历史中执行过的命令(-c清除所有的命令历史) !N:执行编号为N的历史命令 !-N:执行倒数 ...

  3. linux历史命令查找快捷方式

      一.回到上次操作的目录# cd -进入上次访问目录 二.历史命令搜索操作快捷键:[Ctrl + r], [Ctrl + p], [Ctrl + n] 在终端中按捉 [Ctrl] 键的同时 [r] ...

  4. linux历史命令审计

    一.添加历史命令记录 1.首先在/etc/profile中添加 export HISTORY_FILE=/var/log/Command/Command.log export PROMPT_COMMA ...

  5. Linux历史命令管理以及用法

    history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...] -c: 清空命令历史 -d offset: ...

  6. Linux登录自动切换root账户与历史命令优化

    1:当我们Linux系统优化完成,会使用oldboy用户远程连接CRT登录,每次连接都需要使用sudo su - 或者su - 输入密码登录,请问如何在CRT连接的时候自动的切换到root账户,(提示 ...

  7. Linux中的历史命令

    Linux中的历史命令一般保存在用户    /root/.bash_history history 选项 历史命令保存文件夹 选项     -c:清空历史命令     -w :把缓存中的历史命令写入历 ...

  8. linux查看历史命令history

    在linux下,我们有可能需要查看最近执行过的命令(历史命令),我们可以进行如下操作: # 显示使用过的所有历史命令 $ history # 显示最近使用的5个命令 $ history 5 我们可以通 ...

  9. 【转】Linux中history历史命令使用方法详解

    原文网址:http://os.51cto.com/art/201205/335040.htm 当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效 ...

随机推荐

  1. GDI+小例子

    原文链接地址:http://www.cnblogs.com/chuanzifan/archive/2011/11/26/2264507.html 1.在stdafx.h中 #include <G ...

  2. CentOS 7, Attempting to create directory /root/perl5

    By francis_hao    Apr 10,2017 在使用CentOS 7的时候,首次登陆会出现新建一个perl5文件夹的提示,删除该文件后,之后登陆还是会出现该提示并新建了perl5文件夹. ...

  3. [hdu 2102]bfs+注意INF

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 感觉这个题非常水,结果一直WA,最后发现居然是0x3f3f3f3f不够大导致的……把INF改成I ...

  4. LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)

    1.使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式. recv_udp, accept_function, sent_tc ...

  5. c++(类继承)示例[仅用于弱弱的博主巩固知识点用哦,不好勿喷]

    测试代码: Animals.h: #pragma once #include<string> class Animals { protected: std::string Food; in ...

  6. JAVASCRIPT和JSP计算闰年

    0x01:JAVASCRIPT 实现 <h1 align="left">求闰年</h1> 开始年份: <input type="text&q ...

  7. bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理

    题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...

  8. swift xcode设置 ,代码折叠,全局折叠 快捷键

    在preference text editing 里面打开 function 折叠的项, 折叠方法快捷键: option+command +left/right 全局折叠快捷键: shift+opti ...

  9. NYOJ 211 Cow Contest (弗洛伊德+传递闭包 )

    title: Cow Contest 弗洛伊德+传递闭包 nyoj211 tags: [弗洛伊德,传递闭包] 题目链接 描述 N (1 ≤ N ≤ 100) cows, conveniently nu ...

  10. 浅谈 原生javaScript && react 实现全局触摸按钮(附带对addeventlistener的了解)

    1.采用原生javaACript 实现全局触摸按钮 首先在控制台输出,观察事件有哪些关于触摸的字段可以使用,然后拿这些字段的数据开始来写方法. 因为要做的是全局触摸按钮,我需要拿到的是按钮时时的坐标位 ...