History 命令

你敲的每一个命令都会被忠实地记录下来 --- 我.

上面说的也不完全对啦, 因为这个"忠实"会被各种方法破解...

首先你要有一个历史记录的概念, 然后你要知道这些记录存放到哪儿, 最后你要知道这些记录可以被删除, 修改.

搜索历史命令

快捷键 Ctrl + r

非常建议你使用这个命令, 因为当你曾经输过一个很长的命令之后, 当你再次想输入这个命令的时候, 你就可以按下这个快捷键, 然后键入那条长命令的关键词, 然后就会显示出含有那个关键词的命令, 每次按下这个键都会再往上搜一个.

( 还有一些其他的快捷键, 在我的博客上: HERE )

重复上一次的命令

  1. 向上的方向键
  2. 两个叹号: !!
  3. 还有这个: !-1
  4. 快捷键Ctrl+p

最好用的还是方向键, 不是么~

从历史记录中执行某个命令

还是沿袭上一个中的!-n模式, 其中n是一个编号.

# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release

作者给出的例子中, 执行了编号为4的命令.

执行曾经的命令中特定开头的

假设你的部分历史命令如下:

 1719  find . -type f 
 1720  find . -type f | cpio -o > test.cpio
 1721  find .  | cpio -o > test.cpio
 1722  ls
 1723  l
 1724  du -h

那么, 怎样重复执行1721条呢? 除了利用!-1721这么麻烦的方法, 我们还可以用!f这样的姿势.

因为开头的f是离着最后一条命令最近的, 所以!f就执行了它.

清空历史记录

 history -c

从历史记录中截取参数

在下面的例子中, !!:$ 等价于上一条命令的最后一个参数:

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg

下面的例子中, !^则等价于上一条命令的第一个参数:

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^
vi anaconda-ks.cfg

从特定的历史记录中截取特定的参数

下面的例子中, !cp:2 等价于当前历史记录中, 最后一个以cp开头的命令的第二个参数; !cp:$则等价于当前历史记录中最后一个以cp开头的命令的最后一个参数.

是不是有点啰嗦...

# cp ~/longname.txt /really/a/very/long/path/long-
filename.txt
... ... ...
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

results matching ""

    No results matching ""