終於搞懂了——BASH內核

BASH作爲學習Linux進階的必要之路,今天俺就帶你們瞧瞧Linux的內核到底有啥?

不廢話,先上圖
BASH主要內容

命令編修命令 (history):

最大的好處就是可以『查詢曾經做過的動作!』 如此可以知道你的執行步驟,那麼就可以追蹤你曾下達過的指令,以作爲除錯的工具!

命令與檔案補全功能: ([tab] 按鍵的好處)

[Tab] 接在一串指令的第一個字的後面,則爲命令補全;

[Tab] 接在一串指令的第二個字以後時,則爲『檔案補齊』!

命令別名設定功能: (alias)

lm 這個自定義癿命令指代ls –al

alias lm='ls -al' 

數據流重導向

數據流重導向透過 >, 2>, < 之類的符號將輸出的信息轉到其他檔案或裝置。

上圖是數據的輸入和輸出,其中輸出有兩種情況,一種是標準輸出(standard output),一種是錯誤輸出(standard error output)。

standard output 與standard error output

簡單的說,標準輸出指的是『指令執行所回傳的正確的訊息』,而標準錯誤輸出可理解爲『 指令執行失敗後,所回傳的錯誤訊息』。正確或錯誤的數據都是默認輸出到屏幕上!那能與能將這兩股數據分開呢? 當然可以啊!那就是數據流重導向的功能啊!數據流重導向可以將 standard output (簡稱 stdout) 與 standard error output (簡稱 stderr) 分別傳送到其他的檔案或裝置去。

  1. 標準輸入 (stdin) :代碼爲 0 ,使用 < 或 << ;

  2. 標準輸出 (stdout):代碼爲 1 ,使用 > 或 >> ;

  3. 標準錯誤輸出(stderr):代碼爲 2 ,使用 2> 或 2>> ;

管線命令 (pipe)

管線命令使用的是『 | 』這個界定符號 !
假設我們想要知道 /etc/ 底下有多少檔案,那麼可以使用 ls /etc 來查閱,不過, 因爲 /etc 底下的檔案太多,導致一口氣就將屏幕塞滿了~不知道前面輸出的內容是啥?此時,我們可以透過 less 指令:

Ls –al /etc | less

如此一來,使用 ls 指令輸出後的內容,就能夠被 less 讀取,我們就能夠前後翻動相關的信息了。

管線命令『 | 』僅能處理經由前面一個指令傳來的正確信息,也就是 standard output 的信息,對於 stdandard error沒有直接處理的能力。

在每個管線後面接的第一個數據必定是『指令』!而且這個指令必須要能夠接受 standard input 的數據纔行,這樣的指令纔可以是爲『管線命令』,例如 less, more, head, tail 等都是可以接受 standard input 的管線命令啦。至於例如 ls, cp, mv 等就不是管線命令了!

管線命令主要有兩個比較需要注意的地方:

  • 管線命令僅會處理 standard output,對於 standard error output 會予以忽略

  • 管線命令必須要能夠接受來自前一個指令的數據成爲 standard input 繼續處理纔行。

切割命令cut 和grep:

cat

使用權限:所有使用者
使用方式:cat [-AbeEnstTuv] [–help] [–version] fileName
說明:把檔案串連接後傳到基本輸出(螢幕或加 > fileName 到另一個檔案)
參數:
-n 或 --number 由 1 開始對所有輸出的行數編號
-b 或 --number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 --squeeze-blank 當遇到有連續兩行以上的空白行,就代換爲一行的空白行
-v 或 --show-nonprinting
範例:
cat -n textfile1 > textfile2 把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裏
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 裏。

grep

功能說明:查找文件裏符合條件的字符串。
語 法:grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本文件>][–help][範本樣式][文件或目錄…]

補充說明:grep指令用於查找內容包含指定的範本樣式的文件,如果發現某文件的內容符合所指定的範本樣式,預設grep指令會把含有範本樣式的那一列顯示出來。若不指定任何文件名稱,或是所給予的文件名爲“-”,則grep指令會從標準輸入設備讀取數據。
參 數: -a或–text 不要忽略二進制的數據。
-A<顯示列數>或–after-context=<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之後的內容。
-b或–byte-offset 在顯示符合範本樣式的那一列之前,標示出該列第一個字符的位編號。
-B<顯示列數>或–before-context=<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前的內容。
-c或–count 計算符合範本樣式的列數。
-C<顯示列數>或–context=<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。
-d<進行動作>或–directories=<進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep指令將回報信息並停止動作。

-e<範本樣式>或–regexp=<範本樣式> 指定字符串做爲查找文件內容的範本樣式。
-E或–extended-regexp 將範本樣式爲延伸的普通表示法來使用。
-f<範本文件>或–file=<範本文件> 指定範本文件,其內容含有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每列一個範本樣式。
-F或–fixed-regexp 將範本樣式視爲固定字符串的列表。
-G或–basic-regexp 將範本樣式視爲普通的表示法來使用。
-h或–no-filename 在顯示符合範本樣式的那一列之前,不標示該列所屬的文件名稱。 -H或–with-filename 在顯示符合範本樣式的那一列之前,表示該列所屬的文件名稱。 -i或–ignore-case 忽略字符大小寫的差別。

-l或–file-with-matches 列出文件內容符合指定的範本樣式的文件名稱。
-L或–files-without-match 列出文件內容不符合指定的範本樣式的文件名稱。
-n或–line-number 在顯示符合範本樣式的那一列之前,標示出該列的列數編號。
-q或–quiet或–silent 不顯示任何信息。
-r或–recursive 此參數的效果和指定“-d recurse”參數相同。
-s或–no-messages 不顯示錯誤信息。
-v或–revert-match 反轉查找。
-V或–version 顯示版本信息。
-w或–word-regexp 只顯示全字符合的列。
-x或–line-regexp 只顯示全列符合的列。
-y 此參數的效果和指定“-i”參數相同。
–help 在線幫助。

參數代換: xargs

使用 xargs 的原因是,很多指令其實不支持管線命令,因此我們可以透過 xargs 來讓這個指令生效!

例如:

find /sbin -perm +7000 | ls -l 
find /sbin -perm +7000 | xargs  ls -l

第一個命令會報錯不會輸出,第二個命令就可以輸出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章