linux 101 hacks 6history 及相关关键字
如果你经常使用命令行,那么有效的使用命令历史机制将会使效率获得极大提升。事实上,一旦你掌握了我在下面给出的 15 个例子, 你就会发现使用命令行将更有乐趣
是吗?我学一学呢
技巧 50:使用 HISTTIMEFORMAT 在历史中显示 TIMESTAMP
通常情况下,当你在命令行中键入 history 时,终端中将显示你刚输入的命令及其编号。如果
出于审查命令的目的,和命令一起显示时间戳将会很有帮助, 如下所示。
# export HISTTIMEFORMAT='%F %T ' # history | more 1 2008-08-05 19:02:39 service network restart 2 2008-08-05 19:02:39 exit 3 2008-08-05 19:02:39 id 4 2008-08-05 19:02:39 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 9 (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 16947 0.0 0.0 36516 1264 ? Sl 13:10 0:00 ypbind root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
技巧 55:用 HISTSIZE 控制历史命令的总数
把下面的两行添加到.bash_profile 然后重新登录 bash( 译者注:用 source .bash_profile 即
可) 查看有什么变化,在这个例子中, bash 命令历史记录中只能储存 450 条命令。
# vi ~/.bash_profile HISTSIZE=450 HISTFLESIZE=450
在 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 -4 44 pwd 45 pwd 46 pwd 47 history | tail -4 [注: 上面 pwd 被执行了三次之后,历史中有三条 pwd 命令] # export HISTCONTROL=ignoredups # pwd # pwd # pwd # history | tail -3 56 export HISTCONTROL=ignoredups 57 pwd 58 history | tail -4 [注: 即使上面 pwd 被执行了三次,历史中也只有一条 pwd 命令]
技巧 58:使用 HISTCONTROL 在整个历史中去除重复命令
上面的 ignoredups 去除连续重复的命令,要消除整个命令历史中的重复命令,把 HISTCONTROL
设置成 erasedups
这里有一篇文章也可以参考一下:
如何隐藏你的 Linux 的命令行历史
# export HISTCONTROL=erasedups # pwd # service httpd stop # history | tail -3 38 pwd 39 service httpd stop 40 history | tail -3 # ls -ltr # service httpd stop # history | tail -6 35 export HISTCONTROL=erasedups 36 pwd 37 history | tail -3 38 ls –ltr 39 service httpd stop 40 history | tail -6 [注: 之前在 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 -3 67 ls –ltr 68 pwd 69 history | tail -3
技巧 60:使用 c 选项清除所有的历史命令
有时候你或许想要清除之前的历史命令。而你又想让 history 继续工作:
# history -c
技巧 63:用 HISTSIZE 禁用 history
如果你想禁用 history,又不让 bash shell 记录你的命令,像下面那样把 HISTSIZE 设为 0 即
可。
# export HISTSIZE=0 # 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 -3 79 export HISTIGNORE="pwd:ls:ls -ltr:" 80 service httpd stop 81 history [注: history 命令不显示 pwd 和 ls]
这个可以!