文章目錄
- 護花使者
- shell 的作業原理
- shell 的必要性
- shell 的功能
- shell 的優越性
- 系統的合法 shell
- bash shell 的功能
- 總結
護花使者
管理整個計算機硬體的其實是作業系統的內核(kernel),這個內核是需要被保護的!

所以我們一般使用者就只能通過 shell 來跟內核溝通,以讓內核達到我們所想要達到的作業,
shell 的作業原理
舉個例子來說明 shell 在計算機中的運作狀況,當你想讓計算機播放『音樂』的時候,你的計算機需要什么東西呢?
- 硬體:當然就是需要你的硬體有『聲卡芯片』這個設備,否則怎么會有聲音;
- 內核管理:作業系統的內核可以支持這個芯片,當然還需要提供芯片的驅動程式;
- 應用程式:需要使用者輸入發生聲音的指令,
這就是一個基本的輸出聲音所需要的步驟,也就是說,你必須要『輸入』一個指令,『硬體』才會通過你下達的指令來作業,那么硬體如何知道你下達的指令呢?那就是內核(kernel)的控制作業了,也就是說,我們必須要通過『shell』將我們的輸入指令與 kernel 溝通,好讓 kernel 可以控制硬體來正確無誤地作業,下面這張圖說明了硬體、內核、shell、用戶之間的關系:

shell 的必要性
作業系統其實是一組軟體,由于這組軟體在控制整個硬體,如果這組軟體能被用戶隨意操作,若使用者使用不當,將會使得整個系統崩潰,因為作業系統管理的就是整個硬體功能,所以當然不能隨便被一些沒有管理能力的用戶隨意使用,
但是我們總是需要讓用戶作業系統的,所以就有了在作業系統上面發展的應用程式啦,用戶可以通過應用程式來指揮內核,讓內核達成我們所需要的硬體任務,這個程式就是 shell,因為它包裹著內核,就像雞蛋的外殼一樣,所以稱它為 shell(殼),
shell 的功能
其實 shell 的功能只是提供用戶作業系統的一個介面,因此這個 shell 程式需要能夠呼叫其他軟體,我們經常使用的很多指令如 man、chmod、vi、fdisk、mdisk 等,這些指令都是獨立的應用程式,但是我們可以通過 shell 程式(就是命令列模式)來操作這些應用程式,讓這些應用程式呼叫內核來運行所需要的功能,這樣對于 shell 程式是否有了一定的概念了?
也就是說,只要是能夠操作應用程式的介面都可以稱為 shell 程式,狹義的 shell 程式指的是命令列方面的軟體,包括 bash、sh 等,廣義的 shell 程式則包括圖形介面的軟體,因為圖形介面其實也能夠操作各種應用程式來呼叫內核作業,
shell 的優越性
- 大家都一樣
雖然對于初學者來說,shell 可能上手稍難,但是幾乎各家的 shell 都是一樣的,如此一來,你就能夠做到『一法通、萬發通!』,x Windows、web 介面各家差異都很大,變化也多,掌握一家幾乎根本沒用, - 快
特別是遠程,命令列 shell 需要更小的帶寬,帶來更流暢的體驗,圖形界面對帶寬的要求就高了, - 效率高,打通任督二脈
shell 腳本,解放生產力,圖形界面就沒那么簡單了,

系統的合法 shell
知道了什么是 shell 之后,我們來了解一下 Linux 使用的是哪一個 shell?以 Ubontu 20.04 為例,查看在我們的 Linux 中有多少我們可以使用的 shell:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
為什么我們系統上合法的 shell 要寫入 /etc/shells 呢?這是因為系統某些服務在運行程序中,會去檢查使用者能夠使用的 shell,舉例來說,某些 FTP 網站會去檢查使用者的可用 shell,如果你不想讓這些用戶使用 FTP 以外的主機資源時,可以給予該使用者一些錯誤的 shell,讓使用者無法以其它服務登入主機,這個時候,你就可以將一個錯誤的 shell 寫人 /etc/shells 中了,舉例來說,我們的 Centos 中就有個 /sbin/nologin 條目,這就是一個錯誤的 shell,
那么,再想一想,某個使用者什么時候可以取得 shell 來作業呢?還有,這個使用者會取得哪個 shell 呢?答案就是當使用者登入的時候,系統就會給一個 shell 讓使用者來作業了,而這個登入取得的 shell 就記錄在 /etc/passwd 這個檔案中
[root@Box ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
如上圖所示,每一行的最后一項,就是你登入后可以取得的 shell,可以看到,root 賬號使用的是 /bin/bash, bin 和 daemon 賬號使用的是 /sbin/nologin,
bash shell 的功能
/bin/bash 是 Linux 預設的 shell,bash 兼容 sh,并依據一些使用者的需求而加強的 shell,bash 的主要優點:
- 歷史命令記錄(history)
- table 補全
- 命令別名(alias)
- job、前臺運行、后臺運行
- 腳本
- 通配符(ls /etc/pass*)
總結
總之,當我們順利在終端機(tty)上面登入后,Linux 就會依據 /etc/passwd 給我們一個 shell,然后我們就可以下達指令來操作 shell 了,進一步地可以通過 shell 和內核溝通,從而控制硬體,
$ sudo shutdown -h now
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/287774.html
標籤:其他
