Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          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
          posted on 2010-10-11 15:44 calvin 閱讀(2160) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 闸北区| 那曲县| 绥德县| 将乐县| 尼勒克县| 运城市| 交口县| 宜兴市| 公主岭市| 长治市| 阳泉市| 桑日县| 高陵县| 辰溪县| 灯塔市| 新源县| 夹江县| 望都县| 资中县| 宁蒗| 崇阳县| 兰坪| 淮滨县| 巴马| 漳州市| 周口市| 天全县| 金沙县| 斗六市| 新平| 平遥县| 平顺县| 通河县| 五台县| 侯马市| 高尔夫| 绩溪县| 博爱县| 大田县| 新民市| 马公市|