編者按
本文編譯自commandlinefu.com的系列文章Top Ten One-Liners from CommandLineFu Explained。作為一個由使用者推薦最有用shell命令的網站,其記錄了數以萬計的各色shell命令,其中不乏相當實用和有趣的,本文就要細數當中獲投票最高的一些命令,從其中取材並加以細釋,希望讀者能從中受益。
引言
Shell作為Unix系作業系統當中最有魅力且不可或缺的組件,經過數十載的洗禮不僅沒有被淘汰,而且愈加變得成熟穩健,究其原因,大概因為它是個非常穩固的粘合劑,能夠把大量功能強大的組件任意配搭,總能很好很快地完成使用者的任務。
本文的一些命令很可能看起來是“雕蟲小技”,我們只好仰慕一下Shell大牛了,但是有些細節我會稍加發掘加以說明,遇到有趣的地方希望能博您一笑了。
1.以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方式共用當前檔案夾的檔案
1 |
$ python -m SimpleHTTPServer |
這命令啟動了Python的SimpleHTTPServer模組,考慮到Python在絕大多數的Linux發行版當中都預設安裝,所以這個命令很可能是最簡單的跨平台傳檔案的方法。
命令執行後將在本機8000連接埠開放HTTP服務,在其他能訪問原生機器的瀏覽器開啟ttp://ip:8000即開啟一個目錄列表,點擊即可下載。
3.在以普通使用者開啟的vim當中儲存一個root使用者檔案
這題目讀起來糾結,其實是很常見的,常常忘記了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.替換上一條命令中的一個短語