初識Shell——bash
Linux中的shell有點類似Windows下的cmd.exe或者.bat。管理整個計算機硬件的其實是操作系統的內核(Kernel),用戶無法與內核直接交互,所以通過shell來跟內核通信。即shell介於操作系統(Kernel)和用戶之間,它是用戶與內核的翻譯官,是一個命令解釋器。
常見的shell種類有:Bsh、Csh、Ksh、Bash、Zsh
Bsh和Csh出現的較早,Ksh繼承了它兩的功能,Bash繼承了Bsh和Ksh的升級版,而且是Linux系統中默認的shell,Zsh則兼具了各種shell的程序有點,交互式操作效率更高,但仍不及bash應用廣泛。
Shell環境的切換:
登錄Shell:指用戶每次登錄系統後自動加載的Shell程序,大多數Linux系統采用 /bin/bash 作為默認登錄Shell;/etc/shells 文件記錄了系統支持的有效登錄Shell
[root@localhost ~]# cat /etc/shells ==>使用chsh -l命令也可查看 /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/ksh [root@localhost ~]#
默認的shell是bash,那麼如何切換shell環境呢?分為兩種,一種是臨時切換,即當此終端關閉時,下次啟動仍然是bash,方法很簡單,直接在終端輸入shell名稱;第二種則是更改用戶登錄Shell,需要修改/etc/passwd文件中用戶記錄的最後一個字段,或者像前面講到的使用修改用戶的命令:usermod -s shell程序路徑 用戶名,也可以使用chsh命令,下次登錄有效。
查看當前shell可以通過/etc/passwd來查看,要查看系統默認使用的shell,可以使用echo $SHELL。
bash的常用功能:
1)Tab鍵自動補齊
這個功能可以讓您少打很多字,並且確定輸入是正確的。tab鍵接在一串命令的第一個字後面,則為命令補全;若接在一串命令的第二個字後面,則為文件補全;直接在bash提示符後面按兩下tab鍵,則能顯示所有可執行的命令。
2)命令編輯快捷鍵
如之前提到的ctrl+D,ctrl+L,ctrl+U等
3)命令歷史
保存用戶曾經執行過的命令操作;存放位置是:~/.bash_history隱藏文件;查看歷史命令只需使用history命令就行了。
調用歷史命令:
!n:執行歷史記錄中的第n條命令
!str:執行歷史記錄中以“str”開頭的命令
設置記錄歷史命令的條數:修改HISTSIZSE參數即可(在/etc/profile文件裡),默認為1000條。
(備注:正確使用歷史命令可以有效提高命令行輸入的效率,例如:如果之前不久執行過“service network restart”命令,則重新修改了網卡的配置文件以後,通常只需要執行“!ser”操作即可調用該歷史命令,以重啟network服務。合理控制歷史命令的條數可以提高安全性,root用戶的命令歷史一般建議設置為少於100條)
4)命令別名
為使用較高的復雜命令行設置間斷的調用名稱,存放位置是:~/.bashrc隱藏文件。查看命令別名只需用alias命令即可。
(備注:手動使用alias命令設置的別名只在當前Shell環境中有效,如alias rm='rm -i';若需每次登錄Shell環境時設置的別名都有效,需要修改宿主目錄中的“.bashrc”文件,添加相應別名設置)
5)標准輸入輸出
交互式硬件設備:
標准輸入:從該設備接收用戶輸入的數據
標准輸出:通過該設備向用戶輸出數據
標准錯誤:通過該設備報告執行出錯信息
類型
設備文件
文件描述編號
默認設備
標准輸入
/dev/stdin
0
鍵盤
標准輸出
/dev/stdout
1
顯示器
標准錯誤輸出
/dev/stderr
2
顯示器
(備注:/dev/stdin、/dev/stdout、/dev/stderr這三個文件是一個符號鏈接,輸入輸出與重定向關系緊密)
6)重定向操作
改變標准輸入、標准輸出、標准錯誤的方向:
類型
操作符
用途
重定向標准輸入
<
將命令中接收輸入的途徑由默認的鍵盤更改為指定的文件
重定向標准輸出
>
將命令的執行結果輸出到指定的文件中,而不是直接顯示在屏幕上
>>
將命令執行的結果追加輸出到指定文件
重定向標准錯誤
2>
清空指定文件的內容,並將標准錯誤信息保存到該文件中
2>>
將標准錯誤信息追加輸出到指定的文件中
重定向標准輸出和
標准錯誤
&>
將標准輸出、標准錯誤的內容全部保存到指定的文件中,而不是直接顯示在屏幕上
7)管道操作
管道操作符號是“|”,連接左右兩個命令,將左側的命令輸出的結果,作為右側命令的輸入(處理對象)。管道是腳本語言的特色,它可以講多個功能連接起來形成一個大的功能,這點與面向對象有很大的不同。
例如我現在要查看歷史記錄命令的第4行:則可先將前4條命令顯示出來,在��示前4條命令的最後一條:history | head -4 | tail -1 這樣即取出了第四條命令。