Linux運維實戰之2-2:bash的工作特性

這次博文我們主要來談談bash的工作特性哈。

主要內容:

  1. bash是一種shell解釋程序    

  2. bash工作特性之命令狀態返回值

  3. bash工作特性之命令行展開

  4. bash工作特性之命令補全

  5. bash工作特性之路徑補齊

  6. bash工作特性之命令引用

  7. bash工作特性之命令別名

  8. bash工作特性之文件名通配

  9. bash工作特性之命令hash


問題引入:Linux中,命令是如何被執行的呢?

Linux命令的執行必須依賴于Shell命令解釋器。Shell實際上是在Linux系統中運行的一種特殊程序,它位于操作系統內核與用戶之間,負責接受用戶輸入的命令并進行解釋,將需要執行的操作傳遞給系統內核執行,Shell在用戶和內核之間充當了一個“翻譯官”的角色。當用戶登陸到Linux系統時,會自動加載一個Shell程序,以便給用戶提供可以輸入命令的操作環境,如下圖所示:

blob.png

一、bash一種shell解釋程序:

Bash是Linux系統中默認使用的Shell程序,文件位于/bin/bash。Linux系統中的shell程序有多種,可以通過/etc/shells文本文件查看:

blob.png

如何得知當前Linux系統默認使用的shell是哪一個呢?,可以查看環境變量SHELL的值哈。

blob.png

根據Linux命令與Shell程序的關系,一般分為以下兩種類型: 

  • 內部命令:指的是集成于Shell解釋器程序(如Bash)內部的一些特殊指令,也成為內建(Built-IN)指令。內部命令屬于Shell的一部分,所以并沒有單獨對應的系統文件,只要Shell解釋器被運行,內部指令也就自動載入內存了,用戶可以直接使用。內部命令無需從硬盤中重新讀取文件,因此執行效率更高。 

  • 外部命令:指的是Linux系統中能夠完成特定功能的腳本文件或二進制程序,每個外部命令對應了系統中的一個文件,是屬于Shell解釋器程序之外的命令,所以稱為外部命令。Linux系統必須知道外部命令對應的文件位置,才能夠由Shell加載并執行。 

Linux系統默認會將存放外部命令、程序的目錄(如/bin、/usr/bin、/usr/local/bin等)添加到用戶的“搜索路徑(PATH環境變量)”中,當使用位于這些目錄中的外部命令時,用戶不需要指定具體的位置,如下圖所示:blob.png

說明:多個路徑以:分割,放在左邊的路徑最先被搜索。 

bash作為一個解釋程序,有許多工作特性,歸納起來最主要的特性如下圖所示:

blob.png


二、bash的工作特性之1:命令狀態返回值

問題引入:在Linux中,如何得知命令執行成功或失敗了呢?

也許大家會說是看輸出結果,在Linux中沒有返回信息就是最好的信息,意思就是命令執行成功后在屏幕上不會顯示任何反饋信息。例如:

blob.png

如果命令執行錯誤一般會在屏幕上顯示相應的報錯信息,例如:

blob.png

問題拓展:但像ls、cat這樣的命令執行結果到底是成功還是失敗如何判斷呢?還有在非交互模式下,命令執行成功與否如何得知呢?

靠命令狀態返回值$?–它是Linux的一個特殊變量,其值為0或非0;為0表示命令執行成功,非0表示命令執行失敗。例如:

blob.png


三、bash的工作特性之2:命令行展開

實現下面的功能:

  1. 創建/tmp目錄下的a_c,a_d,b_c,b_d;

  2. 創建/tmp/mylinux目錄下的:

blob.png

實現過程:

(1)一般的做法是什么?肯定是這樣:

mkdir -pv /tmp/a_c
mkdir -pv /tmp/a_d
mkdir -pv /tmp/b_c
mkdir -pv /tmp/b_d

但這樣mkdir命令要敲4遍,冗余操作太多了哈??梢岳胋ash的特性–命令行展開來簡化操作,如下圖所示:

blob.png

(2)我們用命令行展開功能來創建題目中列出的Linux目錄結構:

mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},
    lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

命令執行結果:

blob.png


四、bash工作特性之3:命令補全

bash支持命令補全,用戶不必輸入完整的命令,這樣可以避免輸入錯誤提高效率。

命令的部分字符<tab>
    會搜索PATH環境變量所指定的路徑下的所有可執行文件,如果“命令的部分字符”能惟一表示某命令,則直接補全為那個命令;
    如果不能惟一標示,則再敲一次tab鍵,會顯示所有以“命令的部分字符”開頭的命令;

范例:例如要在命令行下面鍵入“mkdir”命令,不用敲完整,敲入部分字符按tab鍵就可以

blob.png

可以看出,鍵入的命令越趨于完整,補全給出的命令選項就越少哈。

那么我們不禁要問,bash為什么會支持命令補全呢?它是如何搜索命令的呢?

通過環境變量$PATH的值作為搜索標準,如下圖所示:

blob.png

以敲ls命令為例,bash會先搜索/usr/lib64/qt-3.3/bin如果找到了就在屏幕顯示出來,如果沒找到就接著搜索/usr/local/sbin,直到最后,找到就顯示在屏幕上,沒找到就報錯

Linux中有很多環境變量,這些環境變量定義了用戶的使用環境,用2個命令可以查看:

export
printenv

blob.png


五、bash工作特性之4:路徑補齊

路徑補齊的特性與命令補全的特性類似,支持用<tab>鍵補齊文件路徑

blob.png

小結:

  • 在打命令和目錄的時候,我們一定要用TAB鍵來補全,這樣比較輕松,也能檢查命令是否正確。如果不能補全就證明我們敲入的命令有問題

  • 用命令補全,TAB,他會自動加上最后那個/符號,證明這是個目錄,如果后面沒有/的話,這個可能是目錄,也可能是文件


六、bash工作特性之5:命令引用

如何在命令中引用另一個命令的執行結果?(要注意是執行結果,而不是執行狀態)

命令引用:
`命令`或$(命令)

例如:

blob.png

此時,$mylinux變量的值為/tmp/mylinux/下的內容


七、bash工作特性之6:命令別名

如何定義一個命令的別名?

命令別名:
定義別名:alias 別名='正常命令'
撤銷別名:unalias 別名

使用注意事項:

別名的作用范圍是當前shell進程;要想永久生效,需要定義在配置文件中;

當別名跟命令的名字相同時,如果使用原有的命令而非別名,則使用“\命令”

例如:

blob.png

blob.png


八、bash工作特性之7:文件名通配

globbing:文件名通配機制

匹配模式:元字符

bash支持的文件通配符:
*:表示任意長度的任意字符;
?:表示任意單個字符
[]:指定范圍內的任意單個字符:
[a-z]:所有的小寫字母
[A-Z]:所有的大寫字母
[0-9a-zA-Z]:所有的數字和字母
字符集合:
[:digit:]:所有數字,相當于0-9   如:[[:digit:]]
[:lower:]:所有小寫字母
[:upper:]:所有大寫字母
[:alpha:]:所有的字母
[:alnum:]:相當于[0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:所有標點符號
[^]:脫字符,取反,指定范圍外的任意單個字符,如:[^0-9]

練習:

blob.png

1、~]# ls -d /var/l?[[:lower:]]
2、~]# ls -d /etc/[0-9]*[^0-9] 
3、~]# ls -d /etc/[^[:alpha:]][[:alpha:]]*    或  ls -d /etc/[^a-z][a-z]*
4、~]# mkdir -p /tmp/magedu.com;  cp -r /etc/m*[^0-9]  /tmp/magedu.com/
5、~]# mkdir /tmp/man; cp -r /usr/share/man/man*[0-9]  /tmp/man/
6、~]# mkdir /tmp/conf.d; cp -r /etc/{m,n,r,p}*.conf /tmp/conf.d  或 cp -r /etc/[mnrp]*.conf /tmp/conf.d

九、bash工作特性之8:命令hash

bash為了加速命令查找,緩存此前命令的查找結果:哈希碼(Key-value)存儲

key:搜索鍵

value:值

hash命令的用法:
hash:列出緩存的命令
hash -d COMMAND:刪除指定的緩存命令
hash -r:清空緩存

例如:

blob.png


本次博文就這么多哈,歡迎各位大大指正!~~

原創文章,作者:N4_jjx,如若轉載,請注明出處:http://www.www58058.com/57877

(0)
N4_jjxN4_jjx
上一篇 2016-11-06 16:00
下一篇 2016-11-06 16:56

相關推薦

  • 文件查找與壓縮-1

       1、 locate命令(非實時查找即數據庫查找) 1)、查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db      依賴于事先構建的索引;索引的構建是在系統較為空閑時自動進行( 周期性任務) 或者管理員手動更新數據庫即是執行#updatedb命令;引構建過程…

    Linux干貨 2016-08-15
  • 初入linux

    一、認識linux 1、在windows中通過盤符區分文件存放位置,而linux中沒有盤符之說,只有文件和文件夾 2、在linux中,萬物從根開始,沒有后綴之說 二、文件系統的目錄結構 /:根目錄 /boot:系統啟動的相關配置文件 /dev:設備文件 塊設備:隨機訪問,數據塊為單位 字符設備:線性訪問,按字符為單位 設備號:主設備號(major)和次設備號…

    Linux干貨 2017-05-20
  • bash的特性和目錄管理命令

    bash的特性和目錄管理命令 bash特性     1. 命令補全機制: 所謂的命令補全,就是當輸入命令的前幾個字符的時候,按下tab,此時,bash根據輸入的字符串,到path路徑下進行尋找,把找到的且能唯一根據這個字符串標識的命令,予以補全。 如果根據這個字符串能在一個目錄下面找到多個相同的命令,則再按一下tab就能列出所有…

    Linux干貨 2016-10-29
  • python裝飾器1

    簡單介紹裝飾器(注意格式)

    Linux干貨 2017-10-22
  • vim功能及使用

    vim 簡介:   vi命令是UNIX操作系統和類UNIX操作系統中最通用的全屏幕純文本編輯器。Linux中的vi編輯器叫vim,它是vi的增強版(vi Improved),與vi編輯器完全兼容,而且實現了很多增強功能。 文本編輯種類: 行編輯器: sed全屏編輯器:nano, vivim – Vi Improved 一、基本操作語法 vim [OPTION…

    Linux干貨 2016-08-11
  • N23-卡卡琦-第二周

    1、文件管理類命令 常規命令:copy、mv、rm (1).copy 文件復制 用法: 注意:復制文件只是復制文件的數據而不是元數據,但是可以保留元數據的信息。 單源復制:目錄是否存在都可以 多源復制:目錄必須是存在的 -i:提醒用戶操作確認(交互式) -f:強行覆蓋 -r:遞歸復制目錄 -p:保留源數據 -a:用于實現歸檔,做備份 -d:不跟蹤符號鏈接所指…

    Linux干貨 2016-12-11

評論列表(2條)

  • 馬哥教育
    馬哥教育 2016-11-10 20:25

    總結的比較詳細,能注意下排版會更好~加油~

  • N25_Nva
    N25_Nva 2016-11-10 22:55

    受教,hash那邊再詳細些就好了

欧美性久久久久