登入 Shell 和非登入 Shell 之間的區別

Fumbani Banda 2023年1月30日
  1. 什麼是基於 UNIX 的系統中的 Shell
  2. 什麼是基於 UNIX 的系統中的登入 Shell
  3. 什麼是基於 UNIX 的系統中的非登入 Shell
登入 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 環境。執行以下指令碼。

  1. 登入過程執行/etc/profile
  2. /etc/profile 執行 /etc/profile.d 中的指令碼
  3. 登入過程執行~/.bash_profile
  4. ~/.bash_profile 執行 ~/.bashrc
  5. ~/.bashrc 執行 /etc/bashrc

以下命令用於指示 shell 是否為登入 shell。

echo  $0

得到 -bash-su 作為輸出表明 shell 是一個登入 shell。記下輸出前的 - 符號。

在下圖中,echo $0 命令的輸出在 bash 前面有一個 -。它表明 shell 是一個登入 shell。

登入 shell

什麼是基於 UNIX 的系統中的非登入 Shell

登入 shell 啟動一個非登入 shell。它可以是一個以沒有登入的程序啟動的 shell,也可以是從另一個 shell 啟動的 shell。程序使用 shell 可執行檔案的名稱來啟動非登入 shell。

將 bash shell 作為非登入 shell 執行會執行以下指令碼。

  1. 非登入程序執行~/.bashrc
  2. ~/.bashrc 執行 /etc/bashrc
  3. /etc/bashrc 執行 /etc/profile.d/

要確定 shell 是否為非登入 shell,請執行以下命令。

echo $0

如果輸出是 bashsu 而沒有前面的 - 符號,則 shell 是非登入 shell。

我們執行下圖中的 echo $0 命令,輸出顯示 bash 前面的 -。這意味著我們正在使用登入 shell。

要啟動一個非登入 shell,我們輸入 shell 可執行檔案的名稱,在我們的例子中是 bash。我們再次執行 echo $0 命令來檢視新啟動的 shell 是什麼型別的 shell; echo 命令的輸出是 bash 沒有 -。這意味著新 shell 是非登入 shell。

非登入 shell

作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

相關文章 - Linux Shell