系统级配置文件
/etc/profile
作用:
为所有 Bourne 兼容 shell(包括 Bash、sh 等)提供登录时的全局环境设置。加载时机:
当用户登录(例如在控制台登录或图形界面登录时启动登录 shell)时,都会首先加载此文件。常见配置内容:
设置全局环境变量(如 PATH、LANG 等)
调用
/etc/profile.d/
目录下的脚本
# /etc/profile 示例片段
# 设置全局 PATH
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export PATH
# 设置默认语言环境
export LANG="en_US.UTF-8"
# 加载 /etc/profile.d 中的所有脚本
if [ -d /etc/profile.d ]; then
for script in /etc/profile.d/*.sh; do
if [ -r "$script" ]; then
. "$script"
fi
done
fi
/etc/bash.bashrc
作用:
针对所有用户的交互式 Bash shell 设置,如命令提示符、别名、函数以及 Bash 特有的选项。加载时机:
每当启动一个新的交互式 Bash shell(例如在图形桌面中打开终端)时都会读取该文件。常见配置内容:
定义全局别名,例如常用的
ll
设置 Bash 提示符(PS1)的默认格式
# /etc/bash.bashrc 示例片段
# 如果是交互式 shell,则设置提示符和别名
if [ "$PS1" ]; then
# 设置命令提示符:显示用户名、主机名、当前目录
PS1='\u@\h:\w\$ '
# 定义常用别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
fi
/etc/profile.d/*.sh
作用:
将全局设置拆分到多个独立的脚本中,便于各个软件包或组件维护自己的环境变量和配置。加载时机:
这些脚本会在 /etc/profile 中通过遍历 /etc/profile.d 目录加载,所以它们在用户登录时生效。常见配置内容:
设置 Java 环境变量(如 JAVA_HOME)
定义 Python 虚拟环境的路径或其他程序特定变量
示例:
创建一个文件/etc/profile.d/java.sh
,内容如下
# /etc/profile.d/java.sh
# 设置 JAVA_HOME 环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
用户级配置文件
~/.profile
作用:
为当前用户设置环境变量和启动程序,是一个较为通用的登录 shell 配置文件。加载时机:
登录 shell 会优先读取 ~/.bash_profile 或 ~/.bash_login,如果不存在这些文件,则会加载 ~/.profile。常见配置内容:
用户自定义的 PATH 修改
其他环境变量设置
调用 ~/.bashrc(确保登录 shell中也加载交互式配置)
# ~/.profile 示例
# 设置用户自己的 PATH,添加 ~/bin 到路径中
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
export PATH
# 设置 LANG 环境变量
export LANG="en_US.UTF-8"
# 如果存在 ~/.bashrc,则加载它
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
~/.bashrc
作用:
主要用于配置当前用户的交互式 Bash shell,例如设置别名、函数、命令提示符以及 shell 选项。加载时机:
每次打开新的交互式终端时都会加载 ~/.bashrc。常见配置内容:
定义个人别名,如
alias ll='ls -l'
自定义命令提示符(PS1)
定义 shell 函数和其它个性化设置
# ~/.bashrc 示例
# 设置个性化命令提示符(PS1)
PS1='\[\e[1;32m\]\u@\h:\w\$ \[\e[0m\]'
# 定义别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# 自定义函数示例:快速跳转到常用目录
function goto_projects() {
cd ~/projects || return
}
# 加载用户级 bash_completion(如果存在)
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
~/.bash_profile 与 ~/.bash_login
作用:
这两个文件也是登录 shell 的配置文件,用于设置环境变量和其他登录时初始化设置。区别:
如果 ~/.bash_profile 存在,Bash 会忽略 ~/.bash_login;二者通常只需要配置一个。
主要用于登录时的初始化,与 ~/.profile 类似,但通常专门为 Bash 设计。
# ~/.bash_profile 示例
# 加载 ~/.bashrc,以确保交互式设置也在登录 shell 中生效
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
# 设置特定环境变量
export EDITOR=nano
加载顺序与调用关系
登录 Shell 加载顺序:
系统级:/etc/profile
加载 /etc/profile.d/*.sh 脚本
用户级:~/.bash_profile 或 ~/.bash_login
如果没有上述文件,则加载 ~/.profile
在 ~/.bash_profile 或 ~/.profile 中通常会调用 ~/.bashrc,以确保交互式设置也生效。
非登录交互式 Shell:
直接加载 /etc/bash.bashrc 和 ~/.bashrc,不会重新加载 /etc/profile 或 ~/.profile。
使用示例
配置全局环境变量
需求: 为所有用户设置 JAVA_HOME
操作: 在
/etc/profile.d/java.sh
中添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
用户自定义快捷方式和别名
需求: 在个人终端中使用别名
ll
显示详细列表,同时定义一个跳转函数操作: 在
~/.bashrc
中添加:
alias ll='ls -alF'
function goto_projects() {
cd ~/projects || return
}
重新打开终端后,这些设置立即生效,并在每个新的交互式 shell 中使用。
确保登录 shell 加载交互式配置
需求: 登录 shell 也能获得与交互式 shell 相同的环境设置
操作: 在
~/.profile
或~/.bash_profile
中添加调用:
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
这样登录时,既加载了全局登录配置,又加载了个人交互式配置。