登入 Shell 和非登入 Shell 之間的區別
本教程解釋了基於 UNIX 的系統中登入 shell 和非登入 shell 之間的區別。
什麼是基於 UNIX 的系統中的 Shell
基於 UNIX 的系統中的 shell 是使用者和作業系統核心之間的介面。它從使用者那裡獲取輸入並將其傳送到核心,並將結果從核心獲取到使用者。
有兩種型別的 shell,登入 shell 和非登入 shell。
每個 shell 在啟動後都會執行一系列啟動指令碼來設定環境。這些指令碼有不同的用途,它們都會影響環境。
後續指令碼可以覆蓋先前指令碼設定的值。
什麼是基於 UNIX 的系統中的登入 Shell
登入 shell 是使用 /bin/login
通過讀取 /etc/passwd
檔案成功登入後啟動的第一個程序。登入 shell 在你的使用者 ID 下執行。
當你使用終端登入、切換到另一個使用者或使用 SSH 時,會執行登入 shell。
一旦登入 shell 啟動,它就會執行一組啟動指令碼來設定 shell 環境。執行以下指令碼。
- 登入過程執行
/etc/profile
。 /etc/profile
執行/etc/profile.d
中的指令碼- 登入過程執行
~/.bash_profile
。 ~/.bash_profile
執行~/.bashrc
~/.bashrc
執行/etc/bashrc
以下命令用於指示 shell 是否為登入 shell。
echo $0
得到 -bash
或 -su
作為輸出表明 shell 是一個登入 shell。記下輸出前的 -
符號。
在下圖中,echo $0
命令的輸出在 bash
前面有一個 -
。它表明 shell 是一個登入 shell。
什麼是基於 UNIX 的系統中的非登入 Shell
登入 shell 啟動一個非登入 shell。它可以是一個以沒有登入的程序啟動的 shell,也可以是從另一個 shell 啟動的 shell。程序使用 shell 可執行檔案的名稱來啟動非登入 shell。
將 bash shell 作為非登入 shell 執行會執行以下指令碼。
- 非登入程序執行
~/.bashrc
~/.bashrc
執行/etc/bashrc
/etc/bashrc
執行/etc/profile.d/
要確定 shell 是否為非登入 shell,請執行以下命令。
echo $0
如果輸出是 bash
或 su
而沒有前面的 -
符號,則 shell 是非登入 shell。
我們執行下圖中的 echo $0
命令,輸出顯示 bash
前面的 -
。這意味著我們正在使用登入 shell。
要啟動一個非登入 shell,我們輸入 shell 可執行檔案的名稱,在我們的例子中是 bash
。我們再次執行 echo $0
命令來檢視新啟動的 shell 是什麼型別的 shell; echo
命令的輸出是 bash
沒有 -
。這意味著新 shell 是非登入 shell。