天天看點

linux常用指令妙用

 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的替換操作都是這樣的文法。