咱們必需要經過「shell」將咱們輸入的命令與內核通訊,好讓內核能夠控制硬件來正確無誤地工做。shell
操做系統實際上是一組軟件,因爲這組軟件在控制整個硬件與管理系統的活動監測,若是這組軟件隨意被用戶操做,若用戶應用不當,將會使整個系統崩潰。編程
只要可以操做應用程序的接口都可以稱爲shell。狹義的shell指的是命令行方面的軟件。廣義的shell則包括圖形界面的軟件。數組
目前的Linux可使用的shell(/etc/shells文件):bash
用戶什麼時候取得shell工做以及用戶默認的shell記錄在/etc/passwd文件內ui
瞭解命令是來自於外部命令(指的是其餘非bash所提供的命令)或是內置在bash當中操作系統
type [-tpa] name命令行
參數:設計
type:不加任何參數時,type會顯示出name是外部命令仍是bash內置命令排序
-t:type將name如下面這些字眼顯示出它的意義:繼承
file:表示位外部命令
alias:表示該命令爲命令別名所設置的名稱
builtin:表示內置命令
-p:若是後面接的name爲外部命令時,纔會顯示完整文件名
-a:會有PATH變量定義的路徑中,將全部含name的命令都列出來,包含alias
反斜槓(\)轉移字符
只須要在變量名稱前面加上$,或者是以${變量}的方式來顯示均可以。
設置或者修改變量的內容:用「等號(=)」鏈接變量與它的內容
在bash中,當一個變量名稱還沒有被設置時,默認的內容是「空」的。
子進程:在目前這兒shell的狀況下,其打開另外一個新的shell,新的shell就是子進程。在通常狀態下,父進程的自定義變量是沒法在子進程內是使用的。但經過export將變量編程環境變量之後,就可以在子進程下面使用了。
HOSTNAME:這臺主機的主機名
TERM=這個終端機使用的環境是什麼類型
SHELL=目前這個環境下使用的shell是哪個程序
HISTSIZE=記錄命令的條數,在CentOS中默承認記錄1000筆
USER=用戶的名稱
LS_COLORS=一些顏色顯示
MAIL=和這個用戶取用的mailbox位置
PATH:執行文件命令查找路徑
INOUTERC=與鍵盤功能有關,能夠設置特殊按鍵
PWD=目前用戶所在的工做目錄
LANG=這個與語系相關
HOME=這個用戶的主文件夾
_=上一次使用的命令的最後一個參數(或命令自己)
RANDOM:「隨機數」變量,內容介於0~32767之間
HISTFILE=歷史命令記錄的放置文件,隱藏文件
MAILCHECK=每60秒去掃描一次信箱有無新信
PS1=命令提示符的設置值
PS2=使用轉義符號第二行之後的提示符
$目前這個shell所使用的PID
?剛纔執行完命令的回傳碼
通常來講,不管是否爲環境變量,只要跟目前這個shell的接口操做有關的變量,一般都會被設置爲大寫字符,也就是說,基本上,在Linux默認的狀況中,使用{大寫字符}來設置的變量通常爲系統內定須要的變量。
PS1(提示符的設置)
$(關於本shell的PID)
?(關於上個執行命令的回傳碼)
通常來講,若是成功執行命令,則會回傳一個0值,若是執行過程當中發生錯誤,就會回傳「錯誤代碼」,通常就是以非0的數值來替代
環境變量與自定義變量的差別:該變量是否會被子進程所繼續使用
子進程僅會繼承父進程的環境變量,子進程不會繼承父進程的自定義變量
locale
環境變量能夠被子進程所引用,可是其餘的自定義變量內容就不會存在於子進程中
read:讀取來自鍵盤輸入的變量
參數:
-p:接提示信息
-t:接等待的「秒數」
declare/typeset:聲明變量類型
參數:
-a:數組類型
-i:整型
-x:環境變量
-r:readonly類型,該變量不可被更改內容,也不能重設
在默認的狀況下,bash對於變量有幾個基本的定義:
ulimit [-SHacdfltu] [配額]
參數:
-H:hard limit,嚴格的設置,一定不能超過這個設置的數值
-S:soft limit,警告的設置,能夠超過這個數值,可是若超過則有警告信息
-a:列出全部的限制額度
-c:當某些進程發生錯誤時,系統會將該進程在內存中的信息寫成文件(排錯用),這種文件就被稱爲內核文件(core file),此爲限制每一個內核文件的最大容量
-f:此shell能夠建立的最大文件容量(通常爲2GB)單位爲KB
-d:進程可以使用的最大斷裂內存(segment)容量
-l:用於鎖定(lock)的內存量
-t:可以使用的最大CPU時間
-u:單一用戶可使用的最大進程(process)數量
命令別名設置:alias,unalias
歷史命令:history 【n】
history 【-c】
history 【-raw】 histfiles
參數:
n:數字,是要列出最近的n條命令行
-c:將目前的shell全部的history內容所有消除
-a:將目前新增的history命令新增入histfiles中,若沒有加histfiles,則默認寫入~/.bash_history
-r:將histfiles的內容讀到目前這個shell的history記憶中
-w:將目前的history記憶內容寫入histfiles中(默認爲~/.bash_history)
歷史命令在註銷時,會將最近的HISTSIZE條記錄到記錄文件當中
!number:執行第幾條命令
!command:有最近的命令向前搜尋命令串開頭爲command的那個命令,並執行
!!:執行上一個命令
login shell:取得bash時須要完整的登錄流程,讀取/etc/profile(系統總體設置),~/.bash_profile或~/.bash_login或~/.profile(屬於用戶我的設置)
no-login shell:取得bash接口的方法不須要重複登陸的舉動,讀取~/.bashrc
其餘相關配置文件
/etc/man.config:規定了使用man的時候man page的路徑到那裏去尋找
~/.bash_history:歷史命令記錄
~/.bash_logout:記錄註銷bash後系統完成的操做
執行一個命令的時候,這個命令可能會由文件讀入數據,再將數據輸出到屏幕上。
standard output:標準輸出,命令執行所回傳的正確信息
standard error output:標準錯誤輸出,命令執行失敗後,所回傳的錯誤信息
數據流重定向能夠將standard output(簡稱stdout)與standard error output(簡稱stderr)分別傳送到其餘的文件或設備去,分別傳送所用的特殊字符以下:
1>:以覆蓋的方法將正確的數據輸出到指定的文件或設備上
1>>:以累加的方法將正確的數據輸出到制定的文件或設備上
若是知道錯誤將要發生,將錯誤信息忽略掉而不顯示或存儲
將錯誤和正確的數據統統寫入一個文件:2>&1也能夠是&>
將本來須要由鍵盤輸入的數據改由文件內容替代
<<表明結束輸入的意思
使用命令輸出重定向的緣由:
cmd;cmd(不考慮命令相關性的連續命令執行)
$? (命令回傳碼)與&&或||
cmd1 && cmd2:若cmd1執行完畢且正確執行($?=0),則開始執行cmd2
cmd1 || cmd2:若cmd1執行完畢且正確執行($?=0),則cmd2不執行
通常來書,假設判斷式有三個:cmd1 && cmd2 || cmd3,cmd2和cmd3會放置確定能夠執行成功的命令
管道命令(pipe)
管道命令「|」僅能處理經由前面一個命令傳來的正確信息,也就是standard output的信息,對於standard error output並無直接的處理能力。
在每一個管道後面接的第一個數據一定是「命令」,並且這個命令必需要能接受standard input的數據才行
cut:將一段信息的某一段「切」出來,處理的信息是以「行」爲單位
cut –d ‘分隔字符’ –f fields(取出第幾段)
cut –c 字符範圍(以字符的單位去除固定字符區間)
grep:分析一行信息,若當中有須要的信息,就將該行拿出來
grep [-acinv] [—color=auto] ‘查找字符串’filename
參數:
-a:將binary文件以text文件的方式查找數據
-c:計算找到‘查找字符串’的次數
-i:忽略大小寫
-n:輸出行號
-v:反向選擇,即顯示沒有‘查找字符串’內容的哪一行
--color=auto:將找到的關鍵字部分加上顏色顯示
sort:排序命令,依據不一樣的數據類型排序
uniq:將重複的數據僅列出一個顯示
wc:文件裏面的字數,行數和字符數
同時將數據流送與文件與屏幕(screen);而輸出到標準屏幕的,其實就是stdout,可讓下個命令繼續處理
tee –a file:以累加的方式,將數據加入file中
字符轉換命令:
tr:刪除一段信息當中的文字,或者是進行文字信息的轉換
tr [-ds] set1
參數;
-d:刪除信息當中的set1這個字符串
-s:替換掉重複的字符
col [-xb]
參數:
-x:將tab鍵換成對等的空格鍵
-b:在文字內有反斜槓(/)
col常常被利用於將man page轉存爲純文本文件以方便查閱的功能
join,將兩個文件當中有相同數據的那一行加在一塊兒
join [-ti12] file1 file2
參數:
-t:join默認以空格符分隔數據,而且對比「第一個字段」的數據
-i:忽略大小寫
-1:表明第一個文件要用哪一個字段來分析
-2:表明第二個文件要用哪一個字段來分析