歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 一些可以快速使用unix命令行的技巧

一些可以快速使用unix命令行的技巧

日期:2017/2/28 11:26:14   编辑:關於Unix


歷史特性
1.使用history命令可以調出歷史曾經用過的命令列表
shell> history
CODE: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" 那就可以直接這樣調出歷史:
CODE:shell> !995

對簡短容易的命令來說,可能沒什麼用處,但是對於
CODE:cd /usr/local/src/ZendOptimizer-3.0.0-linux-glibc21-i386
./configure --prefix=/usr/local/gd --without-x --without-freetype --without-fontconfig --without-png

這樣的長命令,可能就有點幫助了,
1.獲取上個命令中的某個參數.
比如你執行了如下的操作
CODE:shell> ls /bin/sh
shell> file /bin/sh

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

"!"會提示shell獲得上面的命令的某部分,作為當前的輸入,比如$表示結尾,那就是獲得了ls命令的最後一個參數(其實這裡也是第一個參數.
再來看一個長點的。
CODE:shell> tar zxvf httpd-2.0.59.tar.bz2

這顯然是一個錯誤的輸入,大家都知道bz2是使用bzip解壓縮的,對應的tar參數,應當是使用"jxvf". 那我們可以立即這樣修正它:
CODE:shell> tar jxvf !:2

"!:2"會獲得上面tar命令的第2個參數,作為當前的輸入. 獲取的歷史輸入,並不只是可以單獨使用,也可以作為命令的一部分象這樣:
CODE: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中的這時候另一個更有趣的命令派上用場了,
1."^"號(替換)
CODE:shell> ^mo^mp
這會把上一個命令行裡的mo替換成mp
神奇吧,你的指法再快,只是在浪費時間,我輕敲6個字符,就搞定了上面的錯誤.

一些有用的歷史命令
CODE:!是bash和cshell默認的歷史替換符號
!! 重復最後一個命令
!:s/xy/yx 這個命令會把最後一個命令裡的xy替換成yx

比如etho xy !:s/xy:/yx
CODE:!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)

命令行編程 shell是直接支持命令行編程的. 比如:
CODE:sh > /usr/local/src
sh > ls *z

--------------------------------------------------------------------------------
CODE: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

--------------------------------------------------------------------------------
開工了我要把這些東西裝起來,解壓縮吧,好多呀,要敲好多命令.
別急,這不會花費你幾秒鐘的時間;
CODE:sh > for i in `ls *z`
sh > do
sh > tar zxvf $i
sh > done

眼暈了吧,不一會所有的包都解壓縮了。
這只是一個簡單的應用,其實你還可以加上判斷,把gz和bz2,rar什麼的分別用不同的程序解壓縮.
使用sed和shell配合,你甚至可以一次修改一大堆的虛擬主機配置文件中的主目錄:
CODE:sh > for i in `ls`
sh > do
sh > sed -i 's/\/home\//\/disk1\\/home\//g\' $i
sh > done

大搬家!把所有用戶的虛擬主機都從/home搬遷到/disk1/home中了.
Copyright © Linux教程網 All Rights Reserved