五分鐘搞定Bash功能與使用技巧

一個完整計算機的體系結構包括:硬件與軟件,而軟件又分爲系統軟件與應用軟件,負責對硬件僅需管理與操做的是系統軟件的內核部分,用戶是沒法與硬件或內核打交道的,用戶經過應用程序或部分系統軟件發出指令(多是經過瀏覽器發送一封郵件),這些指令會被翻譯並傳給內核,內核在得知用戶的需求後調度硬件資源來完成操做(好比,使用網卡發送數據包)。前端

在Linux環境下,咱們通常經過Shell來與內核交流,並最終實現咱們想要使用計算機資源的目的。因爲Linux的開放性特色,使得在Linux下對Shell的選擇也不少,CentOS 6.3系統中可使用的Shell有/bin/sh、/bin/bash、/bin/tcsh、/bin/csh這幾種,/etc/shells文件說明了當前系統有哪些可用的Shell。不一樣的Shell有不一樣的特色以及操做方式,咱們這裏以CentOS默認使用的Shell爲講解案例即Bash。shell

BASH功能介紹vim

 

1命令歷史centos

 

Bash擁有自動記錄命令歷史的功能,用戶所執行的命令會在註銷時自動記錄到本身家目錄下的.bash_history 這樣一個隱藏文件中。查看這些命令歷史記錄的方法有不少,能夠經過直接打開文件來查看,也能夠經過鍵盤的上下鍵來上翻或下翻歷史記錄,還能夠經過history命令查看歷史記錄,全部的命令歷史都有記錄編號。命令歷史可以記錄的信息數量由HISTSIZE變量所決定,CentOS 6.3默認經過/etc/profile文件定義了HISTSIZE=1000,也就是最多能夠記錄最近所使用的1000條命令,當有第1001條命令執行時第一條命令會被覆蓋,執行history -c命令能夠清空全部的歷史記錄。瀏覽器

記錄命令歷史的除了能夠查看歷史記錄外,還能夠在須要時直接調用歷史記錄再次執行該命令:bash

1.上下鍵翻閱歷史命令,找到合適的命令後直接回車便可執行。服務器

2. 輸入!string調用命令歷史(string爲關鍵字),如!vim將調用最後一次執行的以vim開頭的命令。或者經過!n來準肯定位歷史記錄,如!242將直接調用命令歷史的第242條記錄並執行。網絡

3. 經過Ctrl+r快捷鍵打開搜索功能,接着輸入關鍵字便可在命令歷史中搜索相關命令,回車完成執行操做。若是沒有搜索到適合的命令按ESC鍵退出搜索。編輯器

2命令別名firefox

 

在CentOS 6.3系統中咱們能夠直接使用ll命令來顯示文件的詳細信息,其實系統中並無ll這樣一個命令,它僅是被提早定義好的一個別名而已,別名的好處是能夠把原本很長的指令簡化縮寫,爲經常使用且複雜的命令及選項建立別名能夠大大提升平常工做效率。

3管道與重定向

 

Bash的標準輸入設備是鍵盤、鼠標、手寫板等設備,標準輸出爲顯示器,通常咱們經過鍵盤輸入命令並執行,系統將返回信息顯示在屏幕上,默認不論是正確的仍是錯誤的信息都將輸出至顯示器。標準輸入的文件描述符爲0,標準輸出的文件描述符爲1,錯誤輸出的文件描述符爲2。但有時咱們須要改變這樣的標準輸入與輸出方式,Linux中咱們可使用重定向符(<、>、<<、>>、|)從新定義輸入與輸出。

管道使得咱們能夠將多條命令鏈接在一塊兒使用,它的做用是將一個命令的標準輸出重定向給下一個命令並做爲該命令的標準輸入。例如,使用ifconfig eth0 | grep ‘inet addr’命令過濾包含IP地址的行,ifconfig自己會輸出大量網絡接口的信息,因爲這裏使用了管道符號(|)因此ifconfig命令的全部輸出都將做爲grep命令的輸入內容,最終實現過濾包含IP地址的行。

對於標準的輸出信息是輸出至顯示器,而有時你可能並不須要這些輸出信息,又或者是暫時不須要在屏幕上看到這些信息;另外對於輸入通常是經過鍵盤輸入,而有時你或許但願能夠從文件中讀取輸入信息。輸出重定向可使用>或>>符號,使用>能夠將輸出導入至文件,若是文件不存在則建立該文件,若是文件已經存在則會覆蓋該文件的內容;而使用>>能夠將輸出追加至文件;另外,對應錯誤信息的重定向須要使用2>或2>>符號實現。輸入重定向可使用<符號,它能夠能夠幫助咱們從文件中提取輸入信息。

如下經過幾個簡單的實例演示重定向的使用方法:

4快捷鍵

 

Bash準備了大量的快捷鍵爲用戶使用,熟練掌握這些快捷鍵的所有或部分會使你在工做中受益頗多,開始的時候你可能須要花費大量的時間來記憶這些快捷鍵,但一旦你記住了他們,你的工做效率會直線上升。下面列出了經常使用的快捷鍵及其功能描述。

BASH使用技巧

 

1重定向技巧

 

1.若是你編寫了一個腳本實現自動修改系統賬號的密碼,那麼默認當密碼修改爲功後系統會提示successfully這樣的提示信息,若是須要修改20個帳戶密碼則顯示20條這樣的信息。像這樣的案例,大量的成功提示信息並非咱們關注的重點,管理員更多的是關心錯誤提示。因此這時能夠考慮將標準正確輸出屏蔽,Linux中提供了一個特殊設備/dev/null,它很像太陽黑洞,任何東西往裏寫入都將永遠消失。對大量無心義的輸出信息能夠經過管道導入至/dev/null設備。

2.標準輸出與錯誤輸出分離重定向

不少時候自動運行的腳本編寫完成後,是要在深夜服務器負載最低時以無人職守方式運行的,那麼當管理員去檢查腳本運行狀況時會但願看到哪些命令執行成功了,哪些命令出現了問題,而且爲了方便管理須要將正確輸出與錯誤輸出分寫保存在兩個不一樣的記錄文件中,那麼分離重定向就顯得尤其重要了。下面咱們檢查系統中是否存在tom用戶,若是存在則將tom相關信息記錄至user文件中,不然記錄至error文件中:

2命令序列

 

在Linux中咱們可使用控制字符(;、&&、||、&)來控制命令的執行方式。其中[&]控制符使得命令開啓一個子Shelll並在後臺執行;使用[;]控制字符能夠把多個命令組合,但多個命令之間沒有任何邏輯上的關係,僅按循序執行;使用[&&]控制字符也能夠將多個命令組合,但僅當前一個命令執行成功後纔會執行[&&]控制符後面的命令;[||]控制字符的做用與[&&]恰好相反,僅當前一個命令執行失敗纔會執行[||]控制符後面的命令。下面經過實例演示。

1.火狐瀏覽器經過前端啓動,使得當前Shell將暫時沒法使用:

[root@centos6 ~]# firefox

2.後臺運行瀏覽器,不影響當前Shell的使用:

[root@centos6 ~]# firefox &

3.全部命令按順序執行(無論前面的命令是否成功,後面的命令必定正常執行):

[root@centos6 ~]# ls /tmp ; ls /root ; ls /home

4.若是某個文件存在則顯示該文件內容,不然報錯(僅當ls執行成功纔會執行cat):

[root@centos6 ~]# ls test.txt && cat test.txt

5.若是有gedit編輯器則打開該程序,不然打開vim編輯器:

[root@centos6 ~]# gedit || vim

6.若是id tom執行成功則說明用戶存在屏幕將顯示Hi,tom,不然顯示No such user:

[root@centos6 ~]# id tom &>/dev/null && echo 「Hi,tom」 || echo 「No such user」

實例5首先經過&>重定向符將id命令的全部輸出屏蔽,讓後使用&&與||來判斷id命令是否執行成功,成功就顯示問候語不然顯示沒有該用戶。

3做業控制

 

Bash環境中經過命令開啓進程的時候使用&符可使得該進程進入後臺執行,或者一個命令執行後使用Ctrl+z快捷鍵能夠將該進程放入後臺並暫停執行,之後隨時使用jobs命令能夠查看這些後臺進程,而且會爲每一個這樣的進程分配一個編號,經過fg <編號>的形式能夠將這些後臺進程再次調回前臺執行。

[root@centos6 ~]# firefox &

[root@centos6 ~]# jobs

[1]+  Running                 firefox &

[root@centos6 ~]# fg 1

4花括號{}的使用

 

經過括號擴展能夠生產命令行或腳本須要的字串,括號中能夠包含連續的序列或使用逗號分割的多個項目,連續的序列包括一個起點與一個終點並使用..分割。接下來看看具體的語法格式案例:

相關文章
相關標籤/搜索