2.2 檔案相關
2.3 指令碼程式設計相關
2.4 其他
shell程式是獨特的程式,這個程式提供了乙個介面(就那黑乎乎的命令列介面,即linux的終端介面),使用者通過這個介面訪問作業系統核心的服務,從而解析使用者提供的命令。而bash(bourne again shell)是眾多shell的一種,也是大部分linux系統的預設shell。
shell程序會儲存此前使用者用過的命令,利用history命令可檢視或者設定命令歷史相關引數。
-d:delete,刪除歷史命令中指定的命令;
-c:clear,清空命令歷史;
-a:add,手動增加當前會話緩衝區的命令歷史至歷史檔案中;
n:number,顯示最近使用的n條歷史命令
bash不單可以顯示出命令歷史,關鍵是還可以呼叫之前用過的命令,配合tab鍵使用更佳。
!#:重複執行第#條命令
!string:重複執行最近一次以string(可變)開頭的命令,這個比較常用
若要控制命令歷史的記錄方式,可在/etc/prfofile配置檔案中更改histcontrol環境變數,其中
ignoredups:忽略重複的命令,連續且相同方為「重複」
ignorespace:忽略所有以空白開頭的命令
ignoreboth:等於以上兩者之和
其他history命令相關環境變數
histsize:命令歷史記錄的條數
histfile:~/.bash_history,命令歷史檔案
histfilesize:命令歷史檔案 記錄歷史的條數
在談及命令補全之前,首先我們得明白什麼是命令。當我們發起命令的時候,請求核心將某個二進位制程式執行為乙個程序,此時程式由靜態變為動態。命令本身也是乙個可執行的程式檔案,二進位制格式的檔案,也有可能會呼叫共享庫檔案。一般這些命令檔案都儲存在bin,sbin,lib這些目錄中。
內部命令(builtin):內部命令沒有具體的二進位制檔案,而是由核心提供;
外部命令:bash根據path環境變數定義的路徑,自左而右在每個路徑搜尋以給
定命令名命名的檔案,第一次找到即為要執行的檔案。
bash命令補全的方法,當命令按一半,發現不小心忘記命令全稱或完全忘記了命令名時,只要按下命令前幾個字母,再按下tab鍵,即會顯示使用者給定的字串所對應的命令,當使用者給定的字串為開頭的命令不唯一時,則再次按tab鍵就會給出以字串開頭的命令列表。tap鍵用好了,事半功倍。
你也可以不敲字串,直接按tap鍵,會有驚喜哦。
路徑補全是把使用者給出的字串當作路徑開頭,並在指定上級目錄下搜尋以指定的字串開頭的檔名,如果唯一,則直接補全,否則,再次tab鍵會給出以字串為開頭的路徑列表。
命令別名類似於個性化設定,一些常用且繁瑣的命令可以在不和其他命令的名稱衝突的情況下,給它設定成乙個相對簡單的命令。
舉個例子,編輯網絡卡配置檔案的時候,可定義如下別名
alias cdnet='cd /etc/sysconfig/network-scripts/'
但是如此定義的命令別名只對當前shell(當前使用者)有效,即只配置在~/.bashrc中,若想對所有使用者有效,則需要定義在配置檔案中,即/etc/bashrc中。
linux系統下會有乙個hash表,當你剛開機時這個hash表為空,每當你執行過一條命令時,hash表會記錄下這條命令的路徑,就相當於快取一樣。第一次執行命令shell直譯器預設的會從path路徑下尋找該命令的路徑,當你第二次使用該命令時,shell直譯器首先會檢視hash表,沒有該命令才會去path路徑下尋找,這樣可以大大提高命令執行的速度。
hash [options] ...
輸入/輸出裝置(i/o device)是計算機系統中的四大基本組成(運算器、控制器、儲存器、輸入及輸出裝置)之一,其重要性不言自明。在linux中我們訪問檔案的時候是通過鍵盤輸入某個檔名,,然後在linux系統中通過核心來識別檔名所對應的乙個數字(檔案描述符,file descripter),從而訪問檔案。
linux中一切皆檔案,裝置也可被描述為檔案。一般在linux系統定義的標準輸入(stdin,standard input,命令在執行時所要的輸入資料通過它來取得)裝置為鍵盤,對應的檔案描述符為0,對應控制代碼位置為/proc/slef/fd/0;標準輸出(stdout,standard output,命令在執行後的輸出結果從該埠送出)裝置為顯示器,對應的檔案描述符為1,對應控制代碼位置為/proc/slef/fd/1;標準錯誤輸出(stderr,standard error output,命令執行時的錯誤資訊通過該埠送出)裝置為顯示器,對應的檔案描述符為2,對應控制代碼位置為/proc/slef/fd/2。
標準輸入/輸出可以理解為linux系統預設的輸入/輸出,而i/o重定向可以改變標準輸入/輸出的位置。
輸出重定向:簡單來講可以把本來輸出到螢幕上的"hello,world"輸出到隨便哪個檔案等作用。
command >new_pos,command >>new_pos
>:覆蓋重定向,目標檔案彙總的原有內容會被清除
>>:追加重定向,新內容會追加之目標檔案尾部
set -c:禁止將內容覆蓋輸出至已有檔案中,如果需要強制覆蓋,則使用:>|
set +c:關閉覆蓋已有檔案的功能。2>:覆蓋重定向錯誤輸出流;2>>:追加重定向錯誤輸出流
例子:
ls /etc/ > test.0
,表示將/etc/目錄下的檔名覆蓋輸入至test.0中。
輸入重定向:<,<<,輸入重定向這個不常用,可起到讀取檔案內容等作用。
例子:cat < test.1 > test.2
,這個命令表示從test.1檔案中讀取內容覆蓋輸出至test.2中;
又如tr 'a-z' 'a-z' < /etc/fstab
,表示將/etc/fstab檔案中的小寫字母轉化為大寫字母。
**注意:**重定向字元(<,<<,>,>>)後面若沒檔案,即先執行字元後的內容,系統會自動先建立檔案。
欲知更詳細內容可參考((
管道(|)可以將乙個命令的輸出導向另乙個命令的輸入,從而讓兩個(或者更多命令)像流水線一樣連續工作,不斷地處理文字流。
command 1|command 2|command 3...
linux中還有其他類似的多命令執行的方式,如
每個命令之間用;
隔開,其中各命令的執行結果不會影響其它命令的執行。也就是說各個命令都會執行, 但不保證每個命令都執行成功。
每個命令之間用&&
隔開,若前面的命令執行成功,才會去執行後面的命令。這樣可以保證所有的命令執行完畢後,執行過程都是成功的。
每個命令之間用||
隔開,||
是或的意思,只有前面的命令執行失敗後才去執行下一條命令,直到執行成功 一條命令為止。
glob用於實現檔名通配,顯示指定條件的檔案,即如果顯示以a開頭的所有檔案,至於a後面是什麼我們不管,因此這裡有乙個通配,常用的萬用字元有*、?、(可通過查詢glob的幫助文件來檢視有哪些萬用字元,man 7 glob)
glob萬用字元:
* 表示任意長度的任意字元
? 表示任意單個字元
匹配指定範圍內的任意單個字元
[0-9] 任意單個數字
[a-z] 任意單個字母(不區分字母的大小寫)
[a-z0-9] 任意單個字母或數字
[^] 匹配指定範圍外的任意單個字元
[:alnum:] 表示所有的字母和數字
[:alpha:] 表示所有的字母(不區分大小寫)
[:digit:] 表示所有數字
[:lower:] 表示所有的小寫字母
[:punct:] 表示所有的標點符號
[:space;] 表示所有的空白字元
[:upper:] 表示所有的大寫字母
bash中變數可分為
本地變數:生效範圍為當前shell程序,對當前shell之外的其他shell程序包括當前的shell的子shell程序均無效;
環境變數:生效範圍為當前shell程序及子程序;
區域性變數:生效範圍為當前shell程序中某**片段(通常指函式);
位置變數:$1,…,$n,$來表示,用於放指令碼在指令碼**中呼叫通過命令列傳遞給他的引數;
特殊變數:
$?:上個命令執行成功與否的結果
$0:表示命令本身
$#:傳遞給指令碼引數的個數
$*:傳遞給指令碼的所有引數
$@:引用傳遞給指令碼的所有引數
bash的快捷鍵:
ctrl+i 相當於clear清屏
ctrl+a 跳轉至命令開始處
ctrl+e 跳轉至命令結尾處
ctrl+c 取消命令的執行
ctrl+u 刪除命令列首至游標所在處的所有內容
ctrl+k 刪除命令列所在處至命令行尾的所有內容
Linux Bash基礎特性
1 命令補全 bash執行命令 內部命令 help命令 外部命令 bash根據path環境變數定義的路徑,自左而右在每個路徑搜尋以給定命令名命名的文 件,第一次找到即為要執行的命令 直接補全 tab,使用者給定的字串只有一條惟一對應的命令 以使用者給定的字串為開頭對應的命令不惟一,則再次tab會給出...
Linux Bash基礎特性
1 命令補全 bash執行命令 內部命令 help命令 外部命令 bash根據path環境變數定義的路徑,自左而右在每個路徑搜尋以給定命令名命名的文 件,第一次找到即為要執行的命令 直接補全 tab,使用者給定的字串只有一條惟一對應的命令 以使用者給定的字串為開頭對應的命令不惟一,則再次tab會給出...
linux bash的基礎特性
bash的基礎特性 2 1.命令別名 alias 通過alias命令實現 1 alias 顯示當前 shell 程序所有可用的命令別名 2 alias name value 定義別名name,其相當於執行命令 value 注 在命令列中定義的別名,僅對當前shell程序有效,若果想永久有效,要定義在...