Linux Shell History (快速使用Linux命令)
生活随笔
收集整理的這篇文章主要介紹了
Linux Shell History (快速使用Linux命令)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
============================================================================================================================ 這里提到了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
============================================================================================================================
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
總結
以上是生活随笔為你收集整理的Linux Shell History (快速使用Linux命令)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bash和Ksh中查找和执行历史命令
- 下一篇: 初学C++正则表达式(regex)