iT邦幫忙

0

[Ubuntu]理解 login shell 和 non-login shell 讀取設定流程

名詞定義

login shell

  • 取得 bash 時需要完整的登陸流程的,就稱為 login shell。舉例來說,你要由 tty1 ~ tty6 登陸,需要輸入使用者的帳號與密碼,此時取得的 bash 就稱為「 login shell 」
    • 比如使用 「su -「 命令,或者用 ssh 連接到某一個服務器上,該用戶取得的 bash

non-login shell

  • 取得 bash 接口的方法不需要重複登陸的舉動
    • 該模式下是不會自動去運行任何的 profile 文件。

interactive

  • 可以透過命令符去執行
    • 交互式 shell 顧名思義就是用來和用戶交互的,提供了命令提示符可以輸入命令。
    • 該模式下會存在一個叫 PS1 的環境變量,如果還不是 login shell 的則會去 source /etc/bash.bashrc 和 ~/.bashrc 文件

non-interactive

  • 像是gitHub action那樣靠yml檔案寫好的script去執行
    • non-interactive shell 則一般是通過 bash -c 「CMD」 來行的 bash.

四種方式區別

流程:

1. non-login shell 讀取流程

stept1. 讀取~/.bashrc

該bash配置文件僅會讀取 ~/.bashrc(root和一般使用者看到會不同),它內容主要是去加載 /etc/bashrc 而他裡面也沒有看到sbin相關的東西

  • 「使用者的個人設置」
    • 讀取/etc/bashrc

stept2. 讀取/etc/bashrc

  • 「整體的環境設置」
    • 「依據不同的 UID 規範出 umask 的值;」
    • 「依據不同的 UID 規範出提示字符 (就是 PS1 變量);」
    • 「調用 /etc/profile.d/*.sh 的設置」
    • 可以在這個文件中修改我們喜歡的 shell 配色方案和環境變量等等
      non-login shell 的選項(option)
      --rcfile <file>
      強制讀取並執行檔案的command,而不讀取/etc/bashrc 及 ~/.bashrc.

2. login shell 讀取流程

step1. 讀取/etc/profile

注意:「這是系統整體的設置,你最好不要修改這個文件;」

  • PATH:會依據 UID 決定 PATH 變量要不要含有 sbin 的系統指令目錄;
  • MAIL:依據帳號設置好使用者的 mailbox 到 /var/spool/mail/帳號名;
  • USER:根據使用者的帳號設置此一變量內容;
  • HOSTNAME:依據主機的 hostname 指令決定此一變量內容;
  • HISTSIZE:歷史命令記錄筆數。CentOS 7.x 設置為 1000 ;
  • umask:包括 root 默認為 022 而一般用戶為 002
  • CentOS 7.x 默認調用/etc/profile.d/*.sh

有read權限的user才能讀進來/etc/profile.d/.sh 的內容
**關於 /etc/profile.d/
.sh 的內容:**

  • bash 操作接口的顏色
  • 語系
  • ll
  • ls指令的命令別名
  • vi 的命令別名
  • which 的命令別名

/etc/profile.d/lang.sh --> /etc/locale.conf
-bash 默認使用何種語系的重要配置文件! 文件裡最重要的就是 LANG/LC_ALL
/etc/profile.d/bash_completion.sh --> /usr/share/bash-completion/completions/*

step2. 讀取「讀取使用者的個人配置文件」(按順序只讀1個)

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

參考


尚未有邦友留言

立即登入留言