名詞定義
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相關的東西
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
參考