歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 最牛B的Linux Shell命令 系列連載(一)

最牛B的Linux Shell命令 系列連載(一)

日期:2017/2/28 16:31:24   编辑:SHELL編程

引言

Shell作為Unix系操作系統當中最有魅力且不可或缺的組件,經過數十載的洗禮不僅沒有被淘汰,而且愈加變得成熟穩健,究其原因,大概因為它是個非常穩固的粘合劑,能夠把大量功能強大的組件任意配搭,總能很好很快地完成用戶的任務。

本文的一些命令很可能看起來是“雕蟲小技”,我們只好仰慕一下Shell大牛了,但是有些細節我會稍加發掘加以說明,遇到有趣的地方希望能博您一笑了。

1.以sudo運行上條命令

$ sudo !!

大家應該都知sudo,不解釋。但通常出現的情況是,敲完命令執行後報錯才發現忘了sudo。這時候,新手用戶就會:按上箭頭,按左箭頭,盯著光標回到開始處,輸入sudo,回車;高手用戶就蛋定多了,按Ctrl-p,按Ctrl-a,輸入sudo,回車。

這裡介紹這個是天外飛仙級別的,對,就直接sudo !!。

當然這幾種解決方式效果是完全一樣的,只是款不一樣,嗯,不解釋。

兩個感歎號其實是bash的一個特性,稱為事件引用符(event designators)。!!其實相當於!-1,引用前一條命令,當然也可以!-2,!-50。默認情況下bash會在~/.bash_history文件內記錄用戶執行的最近500條命令,history命令可以顯示這些命令。

關於事件引用符的更多用法可以深入閱讀The Definitive Guide to Bash Command Line History。

2.以HTTP方式共享當前文件夾的文件

$ python -m SimpleHTTPServer

這命令啟動了Python的SimpleHTTPServer模塊,考慮到Python在絕大多數的Linux發行版當中都默認安裝,所以這個命令很可能是最簡單的跨平台傳文件的方法。

命令執行後將在本機8000端口開放HTTP服務,在其他能訪問本機的機器的浏覽器打開ttp://ip:8000即打開一個目錄列表,點擊即可下載。

3.在以普通用戶打開的vim當中保存一個root用戶文件

:w !sudo tee %

這題目讀起來糾結,其實是很常見的,常常忘記了sudo就直接用vim編輯/etc內的文件,(不過也不一定,vim發現保存的文件無法保存時候會提示)等編輯好了,保存時候才發現沒權限。曲線方法是先保存個臨時文件,退出後再sudo cp回去。不過實際上在vim裡面可以直接完成這個過程的,命令就是如此。

查閱vim的文檔(輸入:help :w),會提到命令:w!{cmd},讓vim執行一個外部命令{cmd},然後把當前緩沖區的內容從stdin傳入。

tee是一個把stdin保存到文件的小工具。

而%,是vim當中一個只讀寄存器的名字,總保存著當前編輯文件的文件路徑。

所以執行這個命令,就相當於從vim外部修改了當前編輯的文件,好完工。

4.切換回上一個目錄

$ cd -

應該不少人都知道這個,橫桿-代表上一個目錄的路徑。

實際上cd -就是cd $OLDPWD的簡寫,bash的固定變量$OLDPWD總保存著之前一個目錄的路徑。

相對地,$PWD總保存著當前目錄的路徑。這些變量在編寫shell腳本時候相當有用。

5.替換上一條命令中的一個短語

$ ^foo^bar^

又是另外一個事件引用符(event designator),可以把上一條命令當中的foo替換成bar。

在需要重復運行調試一道長長的命令,需要測試某個參數時候,用這個命令會比較實用;但多數人會首先選擇按上箭頭提出上道命令,再移動光標去修改某參數,這樣更直觀,但效率上就不夠使用引用符高,而且在腳本中用這個方法可以簡化很多。

這道命令的原始樣式應該是這樣的:

!!:s/foo/bar/

本文一開始介紹過!!,後面的一段大家應該很熟悉,vim、sed的替換操作都是這樣的語法。

關於事件引用符的更多用法可以深入閱讀The Definitive Guide to Bash Command Line History

Copyright © Linux教程網 All Rights Reserved