Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理

          Linux 歷史特性

          使用history命令可以調(diào)出歷史曾經(jīng)用過的命令列表
          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

          如果你想重新執(zhí)行"cd /usr/local/src" 那就可以直接這樣調(diào)出歷史:
          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
          這樣的長命令,可能就有點幫助了,

          獲取上個命令中的某個參數(shù).
          比如你執(zhí)行了如下的操作

          shell> ls /bin/sh
          shell> file /bin/sh
          比較一下,兩個命令的參數(shù)是一樣的,這時候,你就可以使用"!"來獲得上一個命令的參數(shù)了.如下:

          shell> ls /bin/sh
          shell> file !:$
          "!"會提示shell獲得上面的命令的某部分,作為當(dāng)前的輸入,比如$表示結(jié)尾,那就是獲得了ls命令的最后一個參數(shù)(其實這里也是第一個參數(shù).

          再來看一個長點的。

          shell> tar zxvf httpd-2.0.59.tar.bz2
          這顯然是一個錯誤的輸入,大家都知道bz2是使用bzip解壓縮的,對應(yīng)的tar參數(shù),應(yīng)當(dāng)是使用"jxvf". 那我們可以立即這樣修正它:

          shell> tar jxvf !:2
          "!:2"會獲得上面tar命令的第2個參數(shù),作為當(dāng)前的輸入. 獲取的歷史輸入,并不只是可以單獨使用,也可以作為命令的一部分象這樣:

          shell> tar zxvf httpd-2.0.59.tar.bz2
          shell> tar jxvf !:2 -C /usr/tmo
          執(zhí)行完上面的獲取,命令被替換成了tar jxvf httpd-2.0.59.tar.bz2 -C /usr/tmo
          那就會按照-C指定的路徑把包解壓縮到/usr/tmo中.
          命令執(zhí)行后的結(jié)果:
          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默認的歷史替換符號
          !! 重復(fù)最后一個命令
          !:s/xy/yx 這個命令會把最后一個命令里的xy替換成yx
          比如etho xy !:s/xy:/yx

          !so 重復(fù)最近以so開始的命令
          !?fn? 重復(fù)最近喊有fn的命令,在某個參數(shù)中或某個命令的名稱中都可以使用
          !32 執(zhí)行號碼為32的命令
          !! & 會在最后一個命令的末尾加上& (可以加上任意內(nèi)容)
          !:0 挑選出命令的名稱,而不是整行
          !:3 第參數(shù)
          !:2-4 第2到4個參數(shù)
          !:-3 從第0個到第三個參數(shù)
          !^ 第一個參數(shù)
          !$ 最后一個參數(shù)
          !* 第一個到最后一個參數(shù)
          !:2* 第2個到最后一個
          !:2- 從第2個開始,但不要結(jié)尾參數(shù)
          !?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
          眼暈了吧,不一會所有的包都解壓縮了。

          這只是一個簡單的應(yīng)用,其實你還可以加上判斷,把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中了.

          轉(zhuǎn)自:http://blog.chinaunix.net/u/76/showart_155742.html
          posted on 2010-10-11 15:44 calvin 閱讀(2160) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 夹江县| 井陉县| 巴彦县| 改则县| 竹北市| 扬中市| 德江县| 石屏县| 始兴县| 莱州市| 称多县| 常宁市| 沙洋县| 通化县| 深泽县| 威信县| 灵璧县| 陇西县| 红安县| 临安市| 杭州市| 馆陶县| 景泰县| 田林县| 桓台县| 赤城县| 昌都县| 墨玉县| 汝阳县| 张家港市| 汉中市| 水城县| 崇信县| 保亭| 离岛区| 宁夏| 南昌市| 西安市| 凤山市| 嘉鱼县| 敦化市|