如果你经常使用命令行,那么有效的使用命令历史机制将会使效率获得极大提升。事实上,一旦你掌握了我在下面给出的 15 个例子, 你就会发现使用命令行将更有乐趣

是吗?我学一学呢

技巧 50:使用 HISTTIMEFORMAT 在历史中显示 TIMESTAMP

通常情况下,当你在命令行中键入 history 时,终端中将显示你刚输入的命令及其编号。如果
出于审查命令的目的,和命令一起显示时间戳将会很有帮助, 如下所示。

# export HISTTIMEFORMAT='%F %T '
# history | more
-- :: service network restart
-- :: exit
-- :: id
-- :: cat /etc/redhat-release
[注:你也可以设置 alias 语句来查看最近的历史命令]
alias h1='history 10'
alias h2='history 20'
alias h3='history 30'

如果这个字段没有值的话,是没有时间戳的

技巧 51:用 Ctrl + R 搜索历史命令

我非常确信这应该是你最常使用的 history 特性,当你执行了一串相当长的命令之后,你只要
用关键字搜索一下历史命令然后重新执行这条命令而不需要将整条命令再输一遍。方法是:按
下 Ctrl + R 然后输入关键字。

在以下示例中,我搜索“red” ,则显示以前的命令中含有”red” 的命令“cat/etc/redhat-release” 。

[注:在命令行提示符下按下 Ctrl+R,终端将显示如下提示―reverse-i-search‖]
(reverse-i-search)`red`: cat /etc/redhat-release
[注:当看到你要的命令后按回车键,就可以重新执行这条命令了]
# cat /etc/redhat-release
Fedora release (Sulphur)

而有的时候你需要在执行一条历史命令之前编辑它.比如, 你可以像下面那样搜索“httpd” ,

终端显示历史命令“service httpd stop” , 选择它把“stop” 改为“start” 然后执行它

[注: 在命令提示符下按 Ctrl+R , 将会显示提示符‖reverse-i-search‖]
(reverse-i-search)`httpd`: service httpd stop [注: 看到你想要的命令后按下左键或者右键,就可以在执行这条命令之前编辑它了]
# service httpd start

技巧 52:四种不同的方法快速执行之前的命令

有时出于某些原因你需要执行之前的命令,下面的四种方法可以用来

重复最后执行的命令:
1.用向上键(up arrow ) 查看上条命令,按回车执行。
2.在命令行中输入!!并按回车。
3.在命令行中输入!-1 并按回车。
4.按 Ctrl+P 显示上条命令,按回车执行。ctrl+n 执行下一条命令,跟箭头上下是一样的,这里N,P,大小写不分

技巧 54:执行以特定字开头的历史命令

输入!和你要重新执行的命令的前几个字母。在下面的例子中,输入! ps,回车,执行历史命
令中以“ps” 开头的“ps aux | grep yp”

# !ps
ps aux | grep yp
root 0.0 0.0 ? Sl : : ypbind
root 0.0 0.0 pts/ S+ : : grep yp

技巧 55:用 HISTSIZE 控制历史命令的总数

把下面的两行添加到.bash_profile 然后重新登录 bash( 译者注:用 source .bash_profile 即
可) 查看有什么变化,在这个例子中, bash 命令历史记录中只能储存 450 条命令。

# vi ~/.bash_profile
HISTSIZE=
HISTFLESIZE=

在 linux 系统中,history 命令可以输出历史命令,历史命令默认保存在文件~/.bash_history 中。

HISTFILESIZE 与 HISTSIZE 都是 history 命令需要用到的两个 shell 变量,这两个变量到底有什么区别呢?

HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数,可以理解为. bash_history 文件中最多只有 HISTFILESIZE 行

HISTSIZE 定义了 history 命令输出的记录数,即输出. bash_history 文件中的最后 HISTSIZE 行

所以一般情况下,HISTFILESIZE 是要大于   HISTSIZE的

技巧 56:使用 HISTFILE 改变历史文件名

默认情况下,命令历史被储存在.bash_history 文件中,把下面的一行添加到.bash_profile 文
件中,重新登录 shell,则.commandline_warrior 文件将取代.bash_history 文件用来储存历史
命令。 你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的
命令保存在不同的历史文件中即可。

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

这个很实用!

技巧 57:使用 HISTCONTROL 来消除命令历史中的连续重复条目

在下面的例子中 pwd 被输入了三次,当你使用 history 的时候,你会看到这三条命令连续出现。
设置 HISTCONTROL 为 ignoredups,来消除重复命令:

# pwd
# pwd
# pwd
# history | tail -
pwd
pwd
pwd
history | tail -
[注: 上面 pwd 被执行了三次之后,历史中有三条 pwd 命令]
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -
export HISTCONTROL=ignoredups
pwd
history | tail -
[注: 即使上面 pwd 被执行了三次,历史中也只有一条 pwd 命令]

技巧 58:使用 HISTCONTROL 在整个历史中去除重复命令

上面的 ignoredups 去除连续重复的命令,要消除整个命令历史中的重复命令,把 HISTCONTROL
设置成 erasedups

这里有一篇文章也可以参考一下:

如何隐藏你的 Linux 的命令行历史

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -
pwd
service httpd stop
history | tail -
# ls -ltr
# service httpd stop
# history | tail -
export HISTCONTROL=erasedups
pwd
history | tail -
ls –ltr
service httpd stop
history | tail -
[注: 之前在 pwd 后面的 service httpd stop 命令被除去了]

技巧 59:使用 HISTCONTROL 强制 history 忽略某条特定命令

在执行一条命令时,你可以将 HISTCONTROL 设置为 ignorespace 并在该命令前加上一个空格来指
示 history 忽略这条命令。可以预见的是,很多初级系统管理员将为他们能从 history 中成功隐
藏某条命令而振奋。
了解 ignorespace 的工作方式是很好。不过,实践中最好不要从 history 中去掩盖任何命令。

# export HISTCONTROL=ignorespace
# ls –ltr
# pwd
# service httpd stop
[注: 在 service 的前面加上一个空格,以便在命令历史中忽略它]
# history | tail -
ls –ltr
pwd
history | tail -

技巧 60:使用 c 选项清除所有的历史命令

有时候你或许想要清除之前的历史命令。而你又想让 history 继续工作:

# history -c

技巧 63:用 HISTSIZE 禁用 history

如果你想禁用 history,又不让 bash shell 记录你的命令,像下面那样把 HISTSIZE 设为 0 即
可。

# export HISTSIZE=
# history
# [注: 执行 history 后没有显示任何信息]

技巧 64:用 HISTIGNORE 让 history 在存储时忽略某些指令

有时你不想在记录里看到诸如“pwd”,“ls” 之类的基本指令, 可以用 HISTIGNORE 忽略这些指令。

注意在 HISTIGNORE 中添加“ls” ,只忽略“ls” 不忽略“ls –l” 。一定要准确的写出要忽略的的指令。

# export HISTIGNORE="pwd:ls:ls –ltr:"
# pwd
# ls
# ls –ltr
# service httpd stop
# history | tail -
export HISTIGNORE="pwd:ls:ls -ltr:"
service httpd stop
history
[注: history 命令不显示 pwd 和 ls]

这个可以!

linux 101 hacks 6history 及相关关键字的更多相关文章

  1. linux 101 hacks 第一章cd命令

    本系列来源于<linux 101 hacks>,作者还写了其他101 hacks教程,读了几章,觉得技巧都还不错,很实用,做个总结收藏. cdpath 设置基目录 [ramesh@dev- ...

  2. linux 101 hacks 2date,grep,find

    感觉挨个按着作者来的太蠢了,我还是放自己觉得不错的东西把 用特定格式显示当前时间 以下的方法可以用各种不同的格式来显示当前时间: $ date Thu Jan :: PST $ date --date ...

  3. linux 101 hacks 7crontab

    技巧 74: crontab 书上的这一段我删了,重写一下,用的是ubuntu 16.04系统 参考 每天一个 linux 命令(50):crontab 命令 crond 服务 安装 crontab: ...

  4. linux 101 hacks 5PS1

    PS1——默认提示符 看完这一章,我心里若干个卧槽.. 如下所示, 可以通过修改 Linux 下的默认提示符,使其更加实用.在下面的例子中,默认的 PS1的值是“ \s-\v\$”,显示出了 shel ...

  5. linux 101 hacks 3null 改文件大小写 xargs

    禁止标准输出和错误信息的输出 当我们调试 shell 脚本的时候,我们往往不希望看到标准输出和标准错误的信息.我们可以使用/dev/nulll 来禁止标准错误的信息. 将标准输出重定向到/dev/nu ...

  6. linux 101 hacks 4stat diff ac

    stat 命令 stat 命令那个可以用来查看文件或者文件系统的状态和属性.显示一个文件或目录的属性 $ stat /etc/my.cnf File: `/etc/my.cnf' Size: Bloc ...

  7. linux 创建守护进程的相关知识

    linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...

  8. 尚学linux课程---9、yum相关操作和知识

    尚学linux课程---9.yum相关操作和知识 一.总结 一句话总结: 如何使用比如163,阿里云给yum配置yum源:去官网,不要百度:直接去官网,有帮助文档的(比如centos的就在centos ...

  9. CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

    在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...

随机推荐

  1. 使用SSH-Xsheel文件传输

    借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 使用命令前需要 apt-get install lrzsz 如果提示源找不到 ...

  2. grep与正则表达式详解和实例

    转载自:http://www.jb51.net/article/31207.htm grep 工具,以前介绍过. grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 ...

  3. nginx配置详情(总结)

    Nginx简介 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务 Nginx工作原理 Nginx由内核和模块组成,完成工作是通过查找配置文件 ...

  4. hdu1286 找新朋友

    找新朋友 http://acm.hdu.edu.cn/showproblem.php?pid=1286 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. Nginx错误日志与优化专题

    一.Nginx配置和内核优化 实现突破十万并发 二.一次Nignx的502页面的错误记录 (1)错误页面显示 错误日志: // :: [error] #: * recv() failed (: Con ...

  6. Redis学习十:Redis的复制(Master/Slave)【重要】

    一.是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.能干嘛 读写分离  容灾恢 ...

  7. 全链路追踪traceId,ThreadLocal与ExecutorService

    关于全链路追踪traceId遇到线程池的问题,做过架构的估计都遇到过,现在以写个demo,总体思想就是获取父线程traceId,给子线程,子线程用完移除掉. mac上的chrome时不时崩溃,写了一大 ...

  8. 开启session

    在index.php中开启 session_start();

  9. HDU 2094 产生冠军 dfs加map容器

    解题报告:有一群人在打乒乓球比赛,需要在这一群人里面选出一个冠军,现在规定,若a赢了b,b又赢了c那么如果a与c没有比赛的话,就默认a赢了c,而如果c赢了a的话,则这三个人里面选不出冠军,还有就是如果 ...

  10. Python练习-一个Break跳出所有循环

    Alex大神的需求:三层循环,在最内层循环中使用break,让所有循环结束; # 编辑者:闫龙 i=1; count=0; while 1==i : while 1==i: while 1==i: c ...