您当前的位置: 首页 >  linux

phymat.nico

暂无认证

  • 0浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux Shell History (快速使用Linux命令)

phymat.nico 发布时间:2017-12-11 09:31:47 ,浏览量:0

============================================================================================================================
这里提到了history,那么不得不说在linux下还是ctr+r(用途:反向搜索执行过的命令(reverse-i-search))更为常用和易用。
当然,!^、!$、!:num-num的方式获取上一命令的参数是基本操作技巧。
^mo^mp这会把上一个命令行里的mo替换成mp,这就少见了,非常有用。类似sqlplus下的c/mo/mp替换功能。
============================================================================================================================
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
Yorking Alan
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0547s