咱們經過shell將咱們輸入的命令與內核通訊,好讓內核能夠控制硬件來正確無誤地工做
bash是咱們Linux默認的shell
用戶界面(Shell,application)--------核心(Kernel)-------硬件(Hardware)
操做系統實際上是一組軟件,因爲這組軟件在控制整個硬件與管理系統的活動監測,若是這組軟件被用戶隨便操做,若用戶應用不當,將會使得整個系統崩潰。
由於操做系統管理的是整個硬件功能,因此固然不可以被隨便被一些沒有管理能力的終端用戶隨意使用。
可是咱們老是須要讓用戶操做系統的,因此就有了在操做系統上發展的應用程序。
軟件=程序+文檔=數據結構+算法+文檔
shell的功能只是提供用戶操做系統的一個接口。
像cmake,man,chown這些命令都是獨立安裝的應用程序,可是咱們能夠經過shell(就是命令行模式)來操做這些應用程序,讓這些應用程序調用內核來運行所需的工做。
只要可以操做應用程序的接口均可以稱爲shell
狹義的shell時命令方面的軟件如bash,廣義的shell包括圖形界面的軟件
爲何要學習shell?
1.X Window與Web界面工具同樣,界面雖然親善,功能雖然強大,但畢竟它是將全部利用到的軟件集成在一塊兒的一組應用程序而已,並不是一個完整的套件,因此某些時候當你升級或者使用其它套件管理模塊時,就會形成設置的困擾。並且不一樣的distribution設計的X Window界面也不一樣,形成學習的困擾。而幾乎全部distributions使用的bash都是同樣的。
2.遠程管理,命令行界面比較快:Linux管理常常須要遠程聯機,聯機時命令行傳輸速度必定比較快。並且,較不容易出現斷線或者時信息外流的問題。
3.是Linux的任督二脈,書到用時方恨少:若是真的有心想要將你的主機管理好,那麼良好的shell程序編寫時必定須要的 。
shell有不少種,如Bournce SHell(sh),Sun默認的C SHell、商業經常使用的K SHell, 還有TCSH等
通常是「Bournce Again Shell」(bash),時sh的加強班,也是基於GUN的架構下發展出來的
要查看Linux主機上有多上shell,能夠查看/etc/shells文件
/bin/sh已經被/bin/bash替代
爲何咱們系統上合法的shell要寫入/etc/shells這個文件?
由於系統的某些服務在運行過程當中,會去檢查用戶可以使用的shells,而這些shell的查詢就是藉助/etc/shells這個文件
用戶何時能夠取得shell來工做呢?還有用戶默認會使用哪一種shell?
查看/etc/passwd就知道了,在用戶登陸時取得默認的shell
一些奇怪的shell,之後再看
bash時GUN計劃中重要的工具軟件之一
bash的主要優勢:
1.命令記憶能力(history)
默認記憶功能通常有1000個,記錄在/home/用戶名/.bash_history(沒有home目錄的用戶怎麼辦)
.bash_history記錄的是前一次登陸之前所執行的命令,此次登陸所執行的命令被暫時存在臨時內存中,當成功註銷系統後,該命令記憶纔會記錄再.bash_history中
2.命令與文件補全功能:tab功能
3.命令別名設置功能(alias)
4.做業控制、前臺後臺控制(job control,foreground,background)
能夠隨時將工做丟到後臺執行,不怕不當心ctrl+c終端進程。ctrl+z
也使得能夠在單一登陸的環境中達到多任務的目的
5.程序腳本(shell script)
shell scripts能夠將平時管理系統常須要執行的連續命令寫成一個文件,該文件而且能夠經過交互的方式進行主機的檢車工做
6.通配符
幫助用戶查詢和命令執行,加快用戶操做 如ls -l /usr/bin/X*
若是shell命令比較長,能夠"\[Enter]"換行執行算法