linux环境变量配置文件区别 /etc/profile和~/.bash_profile

embedded/2025/1/26 15:06:57/

在 Linux 系统中,环境变量可以定义用户会话的行为,而这些变量的加载和配置通常涉及多个文件,如 ~/.bash_profile 和 /etc/profile。这些文件的作用和加载时机各有不同。以下是对它们的详细区别和用途的说明:

文章目录

    • 1. 环境变量配置文件的主要分类
    • 2. 文件的加载时机和优先级
    • 3. 常见文件的作用和示例
    • 4. 推荐的配置方法
    • 5. 总结

1. 环境变量配置文件的主要分类

文件名 作用范围 加载时机 说明
/etc/profile 系统级别,全体用户可用 登录 Shell 时加载 用于定义系统级别的环境变量和配置。
/etc/profile.d/* 系统级别,全体用户可用 登录 Shell 时加载 细化分组管理 /etc/profile
的配置。
~/.bash_profile 用户级别,仅当前用户可用 登录 Shell 时加载 定义用户级别的环境变量和配置。
~/.bashrc 用户级别,仅当前用户可用 非登录 Shell 时加载 用于交互式 Shell 配置(如别名等)。
/etc/bashrc
或 /etc/bash.bashrc 系统级别,全体用户可用 非登录 Shell 时加载 定义全局交互式 Shell 的行为和变量。
~/.profile 用户级别,仅当前用户可用 登录 Shell 时加载 通用登录 Shell 配置文件(非 Bash 特有)。

2. 文件的加载时机和优先级

2.1 登录 Shell
● 登录 Shell 是指通过终端直接登录系统的场景,例如:
○ 通过 SSH 登录远程服务器。
○ 在图形界面中选择终端登录选项。
● 加载顺序(按优先级):
a. /etc/profile:系统级别的环境变量和配置会先被加载。
b. /etc/profile.d/*:加载 /etc/profile.d 目录下的所有脚本。
c. ~/.bash_profile:用户级别的配置,覆盖系统级别设置。
d. 如果 ~/.bash_profile 不存在,会尝试加载以下文件(按顺序):
■ ~/.bash_login
■ ~/.profile

2.2 非登录 Shell
● 非登录 Shell 是指用户已经登录后,启动的终端或子进程,例如:
○ 打开新的终端窗口(如 GNOME Terminal)。
○ 在 Shell 中运行子 Shell:bash。
● 加载顺序:
a. /etc/bashrc 或 /etc/bash.bashrc(系统级别交互式配置)。
b. ~/.bashrc(用户级别交互式配置)。
注意:~/.bashrc 通常不会自动加载,需要在 ~/.bash_profile 中显式加载:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

3. 常见文件的作用和示例

3.1 /etc/profile
● 定义系统全局的环境变量,所有用户在登录时都会加载。
● 示例内容:
System-wide PATH
PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”
export PATH

#Default umask
umask 022
3.2 /etc/profile.d/*
● 将 /etc/profile 的配置按模块化进行分组管理。
● 每个 .sh 文件都可以定义一组特定配置:
○ /etc/profile.d/java.sh:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
○ /etc/profile.d/python.sh:
export PYTHONPATH=/usr/lib/python3.8
3.3 ~/.bash_profile
● 用户级别的登录配置,可以覆盖系统配置。
● 示例内容:
加载用户级别的 .bashrc
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

自定义 PATH
export PATH=$PATH:~/bin
3.4 ~/.bashrc
● 用户级别的非登录配置,常用于设置别名和命令提示符。
● 示例内容:
#定义别名
alias ll=‘ls -alF’
alias gs=‘git status’

自定义 PS1 提示符
export PS1="\u@\h:\w$ "

4. 推荐的配置方法

  1. 集中管理:将全局配置放在 /etc/profile.d/,用户个性化配置放在 ~/.bash_profile。
  2. 加载 .bashrc:确保 ~/.bash_profile 加载 ~/.bashrc,以统一管理交互式配置。
  3. 环境变量分组:通过不同的文件对环境变量进行分组,方便维护和排查。

5. 总结

文件 作用 优先级
/etc/profile 定义系统全局环境变量和配置 系统优先加载。
/etc/profile.d/* 细化全局配置,模块化管理 /etc/profile
后加载。
~/.bash_profile 用户个性化的登录配置,可覆盖系统配置 用户优先。
~/.bashrc 用户的交互式配置,通常由 .bash_profile
加载 非登录 Shell 优先加载。
/etc/bashrc 系统级别的交互式配置,供所有用户使用 高于 ~/.bashrc

通过合理配置这些文件,可以实现灵活的环境变量管理,满足不同用户和场景的需求!


http://www.ppmy.cn/embedded/157166.html

相关文章

SpringCloud两种注册中心

SpringCloud 基本概念 系统架构 我们之前做的所有的项目都属于单体架构,下面我们将要学习更适合大型项目的分布式架构 单体架构: 将业务的所有功能几种在一个项目中开发,打成一个包部署。 优点:架构简单、部署成本低 缺点&am…

差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法

四轮驱小车的话: 转向角度计算方法:float turning_angle z_angular / x_linear; // 转向角度,单位为弧度 速度的话直接用线速度 两轮驱动小车: 计算公式: leftSpeed x_linear - z_angular * ORIGINBOT_WHEEL_TRACK /…

Baklib如何推动企业知识管理的创新与转型探讨

内容概要 在当今快速发展的数字化时代,企业需要不断适应变化,以保持竞争优势。Baklib作为一款企业知识管理中台,扮演着推动数字化转型的重要角色。它通过提供一个集成的知识管理平台,帮助企业高效管理和共享内部及外部的知识资源…

MySQL 中如何进行 SQL 调优?

重点 平时进行 SQL 调优,主要是通过观察慢 SQL,然后利用 explain 分析查询语句的执行计划,识别性能瓶颈,优化查询语句。 1) 合理设计索引,利用联合索引进行覆盖索引的优化,避免回表的发生,减少一次查询和随机 I/O 回表:索引无法满足查询所需的所有列数据&#xf…

双写+灰度发布:高并发场景下的维度表拆分零事故迁移实践

目录 0 文章摘要 1业务场景描述 2 迁移及实施过程 2.1 拆分设计与数据探查 2.1 历史数据迁移(全量) 2.3 增量数据同步(双写过渡) 2.4.业务切换验证 2.5 回滚预案 2.6 成果与收益 3 关键经验总结 往期回顾 专栏优势&am…

Redis-缓存

1.缓存 1.1 什么是缓存? 越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样;同样,实际开发中,系统也需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法…

数据结构day02

1 线性表的定义和基本操作 1.1 线性表的定义 分析: 1.1.1 问题一:我们为什么探讨线性表的定义和基本操作 在研究数据结构时,需要重点关注三个方面:逻辑结构、物理结构以及数据的运算。在本节内容里,我们首先来介绍线…

深入探讨:如何在 Debian 系统中实施有效的安全配置

深入探讨:如何在 Debian 系统中实施有效的安全配置 在如今的网络环境中,服务器的安全配置已经成为每个运维工程师的必备技能。无论是个人网站还是企业应用,确保服务器的安全性都是至关重要的。作为一名运维领域的自媒体创作者,我将分享一些在 Debian 系统中实施安全配置的…