History 命令
你敲的每一个命令都会被忠实地记录下来 —- 我.
上面说的也不完全对啦, 因为这个"忠实"会被各种方法破解…
首先你要有一个历史记录的概念, 然后你要知道这些记录存放到哪儿, 最后你要知道这些记录可以被删除, 修改.
搜索历史命令
快捷键 Ctrl + r
非常建议你使用这个命令, 因为当你曾经输过一个很长的命令之后, 当你再次想输入这个命令的时候, 你就可以按下这个快捷键, 然后键入那条长命令的关键词, 然后就会显示出含有那个关键词的命令, 每次按下这个键都会再往上搜一个.
( 还有一些其他的快捷键, 在我的博客上: HERE)
重复上一次的命令
- 向上的方向键
- 两个叹号:
!!
- 还有这个:
!-1
- 快捷键
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