您的位置:首页 > 运维架构 > Shell

[转]Linux Shell History (快速使用Linux命令)

2015-08-14 08:52 471 查看
http://www.blogjava.net/lihao336/archive/2010/10/11/334367.html
Linux Shell History (快速使用Linux命令)

Linux 历史特性

使用history命令可以调出历史曾经用过的命令列表

shell> history

994 cat config.nice

995 cd /usr/local/src

996 ls

997 cd /usr/src

998 ls

999 dmesg

1000 history

1001 history 100

如果你想重新执行"cd /usr/local/src" 那就可以直接这样调出历史:

shell> !995

对简短容易的命令来说,可能没什么用处,但是对于

cd /usr/local/src/ZendOptimizer-3.0.0-linux-glibc21-i386

./configure --prefix=/usr/local/gd --without-x --without-freetype --without-fontconfig --without-png

这样的长命令,可能就有点帮助了,

获取上个命令中的某个参数.

比如你执行了如下的操作

shell> ls /bin/sh

shell> file /bin/sh

比较一下,两个命令的参数是一样的,这时候,你就可以使用"!"来获得上一个命令的参数了.如下:

shell> ls /bin/sh

shell> file !:$

"!"会提示shell获得上面的命令的某部分,作为当前的输入,比如$表示结尾,那就是获得了ls命令的最后一个参数(其实这里也是第一个参数.

再来看一个长点的。

shell> tar zxvf httpd-2.0.59.tar.bz2

这显然是一个错误的输入,大家都知道bz2是使用bzip解压缩的,对应的tar参数,应当是使用"jxvf". 那我们可以立即这样修正它:

shell> tar jxvf !:2

"!:2"会获得上面tar命令的第2个参数,作为当前的输入. 获取的历史输入,并不只是可以单独使用,也可以作为命令的一部分象这样:

shell> tar zxvf httpd-2.0.59.tar.bz2

shell> tar jxvf !:2 -C /usr/tmo

执行完上面的获取,命令被替换成了tar jxvf httpd-2.0.59.tar.bz2 -C /usr/tmo

那就会按照-C指定的路径把包解压缩到/usr/tmo中.

命令执行后的结果:

tar: /usr/tmo: Cannot chdir: No such file or directory

tar: Error is not recoverable: exiting now

sorry,我一不小心又敲错了.我本来是想解压缩到/usr/tmp中的这时候另一个更有趣的命令派上用场了,

"^"号(替换)

shell> ^mo^mp

这会把上一个命令行里的mo替换成mp

神奇吧,你的指法再快,只是在浪费时间,我轻敲6个字符,就搞定了上面的错误.

一些有用的历史命令

!是bash和cshell默认的历史替换符号

!! 重复最后一个命令

!:s/xy/yx 这个命令会把最后一个命令里的xy替换成yx

比如etho xy !:s/xy:/yx

!so 重复最近以so开始的命令

!?fn? 重复最近包含fn的命令,在某个参数中或某个命令的名称中都可以使用

!32 执行号码为32的命令

!! & 会在最后一个命令的末尾加上& (可以加上任意内容)

!:0 挑选出命令的名称,而不是整行

!:3 第参数

!:2-4 第2到4个参数

!:-3 从第0个到第三个参数

!^ 第一个参数

!$ 最后一个参数

!* 第一个到最后一个参数

!:2* 第2个到最后一个

!:2- 从第2个开始,但不要结尾参数

!?fn?% 给出第一个包含 fn的单词(sort fn1 fn2 fn3 ... =>echo !?fn?% =>echo fn1)

更cool的,请参

man 3 history

和其他的一些man page

命令行编程 shell是直接支持命令行编程的. 比如:

sh > /usr/local/src

sh > ls *z

--------------------------------------------------------------------------------

ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz mod_fastcgi-2.4.2.tar.gz

dia-0.94.tar.gz mod_fcgid.1.10.tar.gz

gd-2.0.33.tar.gz mysql-4.0.27.tar.gz

jpegsrc.v6b.tar.gz mysql-standard-4.0.26-pc-linux-gnu-i686-glibc23.tar.gz

lighttpd-1.4.11.tar.gz

--------------------------------------------------------------------------------

开工了,我要把这些东西装起来,解压缩吧,好多呀,要敲n个命令.

别急,这不会花费你几秒钟的时间;

sh > for i in `ls *z`

sh > do

sh > tar zxvf $i

sh > done

眼晕了吧,不一会所有的包都解压缩了。

这只是一个简单的应用,其实你还可以加上判断,把gz和bz2,rar什么的分别用不同的程序解压缩.

使用sed和shell配合,你甚至可以一次修改一大堆的虚拟主机配置文件中的主目录:

sh > for i in `ls`

sh > do

sh > sed -i 's/\/home\//\/disk1\\/home\//g\' $i

sh > done

大搬家!把所有用户的虚拟主机都从/home搬迁到/disk1/home中了.

转自:http://blog.chinaunix.net/u/76/showart_155742.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: