Linux 登入流程依序讀取下列檔案,後讀取者可覆蓋先前設定:
| 順序 | 檔案路徑 | 範圍 | 觸發時機 | 典型用途 |
|---|---|---|---|---|
| 1 | /etc/profile | 全系統所有使用者 | 登入 Shell(Login Shell)啟動時 | 系統預設 PATH、語系、umask、全域別名 |
| 2 | /etc/environment | 全系統所有使用者 | PAM 階段(早於 Shell),由 pam_env.so 讀取 | 靜態環境變數(如 JAVA_HOME、http_proxy),不支援指令替換 |
| 3 | ~/.profile | 單一使用者 | 登入 Shell 啟動時(僅執行一次) | 使用者個人 PATH 補充、啟動 ~/.bashrc、圖形環境變數 |
| 4 | /etc/bash.bashrc (或 /etc/bashrc) | 所有 Bash 使用者 | 每個互動式 Bash Shell 啟動時 | 系統級別名、提示字元設定、函式定義 |
| 5 | ~/.bashrc | 單一使用者 | 每個互動式 Bash Shell 啟動時 | 個人別名、函式、歷史紀錄設定、提示字元客製化 |
su - username、圖形登入(由 Display Manager 呼叫)。會讀取 /etc/profile → ~/.profile。bash、su username(不帶 -)。不讀取 /etc/profile、~/.profile,僅讀取 /etc/bash.bashrc → ~/.bashrc。#!/bin/bash)。不讀取 以上任何設定檔(除非腳本內 source)。~/.profile(登入一次即可)或 /etc/environment(系統級靜態值)。~/.bashrc(每個終端機皆生效)。~/.profile 應包含:# 載入 ~/.bashrc(若存在)
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# 個人 bin 目錄加入 PATH
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
~/.bashrc 判斷是否已存在再加入,或改放 ~/.profile。~/.profile。解決:設定 ~/.xprofile 或 ~/.xsessionrc,或修改 /etc/environment。source /etc/profile 或 source ~/.profile,或改用 systemd 服務的 EnvironmentFile。/etc/zsh/zprofile → ~/.zprofile(Login)、/etc/zsh/zshrc → ~/.zshrc(互動式)。/etc/fish/config.fish → ~/.config/fish/config.fish(所有實例),無 Login/Non-login 區分。