/etc/profile和/etc/profile.d 的区别

/etc/profile与/etc/profile.d/用于配置Linux系统的全局环境变量。/etc/profile文件在用户首次登录时执行,而/etc/profile.d/目录包含多个脚本,由/etc/profile通过循环调用。两者的区别在于文件与目录的形式不同,但都能实现全局环境变量的设置,且后者更便于管理和移植。

问题:在配置环境变量时,需要编辑/etc/profile,其实/etc/profile和/etc/profile.d都是可以配置环境变量的,两者有什么区别呢

结论:/etc/profile 是文件, /etc/profile.d/ 是目录,用在设置环境变量方面,/etc/profile 文件和 /etc/profile.d/ 目录实现效果是一样的,可根据自己对环境变量配置的需求场景,选择一种最好的方式来配置环境变量,一般应用场景下,全局变量配置于 /etc/profile.d 目录下是最佳的实践方式,/etc/profile.d/ 比 /etc/profile 好维护。

/etc/profile 文件

当一个用户登录Linux系统或使用 su 命令切换到另一个用户时,设置用户环境第一个读取的文件就是 /etc/profile ,此文件为系统全局变量配置文件,且仅仅在第一次登录系统时才会全局运行 /etc/profile

注意上面描述的几个关键:

  • 设置用户环境第一个读取的脚本文件 可以推理出在它之后读取的文件设置环境变量将会会覆盖 /etc/profile 文件中配置的环境变量;
  • 仅仅在第一次登录系统时才会全局运行 /etc/profile 可以解释一个场景:我们在使用Ubuntu等桌面Linux系统时,用快捷键 ctrl+alt+t 打开的shell终端里,修改环境变量后使用source /etc/profile这个命令执行生效,新的环境变量只能在当前的终端里面有效,打开新的shell终端时,刚才有效的环境变量在新的终端是不生效的;所以全局生效 /etc/profile 环境变量的正确方式是注销重登录或者直接重启系统

/etc/profile.d/ 目录

在 /etc/profile.d 目录中存放的是一些应用程序所需的启动脚本,比如vim等命令的一些附加设置,在 /etc/profile.d 目录下添加相关的环境变量设置的 .sh 脚本文件,这些脚本文件的环境变量能够被生效,是因为在 /etc/profile 被读取的时候,会使用一个for循环语句来调用 /etc/profile.d 下的脚本,这些脚本文件所设置的环境变量就和 /etc/profile 启动时一起被设置起来了,cat /etc/profile 可以看到有一段加载 /etc/profile.d 目录下所有 .sh 脚本文件的代码:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

从上面的代码不难理解,/etc/profile.d/ 目录下设置环境变量和 /etc/profile 效果是一样的,都是全局环境变量,一旦生效后也都是永久环境变量; /etc/profile.d/ 比 /etc/profile 好维护,不想要的环境变量从 /etc/profile.d/ 目录中移除即可,创建好的环境变量拷贝文件就轻松的移植到其他的计算机,不用每次去改动 /etc/profile 文件。

根据上面描述可以推理出:

  • /etc/profile.d 目录下的环境变量是 /etc/profile 启动时一起被读取,那么想要在当前shell终端临时生效可以使用 source /etc/profile,要全局生效则需要注销重登录或者直接重启系统,和 /etc/profile 原理一样;
  • /etc/profile.d 目录下的环境变量和 /etc/profile 的环境变量优先级,根据环境变量在 /etc/profile 的for循环语句调用 /etc/profile.d 的前面还是后面,在前则被 /etc/profile.d 目录下的环境变量覆盖,在后则被 /etc/profile 的环境变量覆盖

备注: 本文转自calmsnow-/etc/profile和/etc/profile.d/的区别

在 Oracle Solaris 系统中,`/etc/environDD.profile` `/etc/environ.profile` 是与环境变量相关的配置文件,但它们的作用加载方式存在明显区别。 ### 文件用途 `/etc/environ.profile` 是一个标准的系统级环境变量配置文件,通常用于设置全局环境变量,如 `PATH`、`HOME`、`TERM` 等。该文件的内容会在用户登录时由 `/etc/profile` 脚本加载,从而为用户的 shell 会话提供一致的运行环境。此文件的结构通常是简单的键值对形式,例如: ```sh PATH=/usr/bin:/usr/sbin export PATH ``` 相比之下,`/etc/environDD.profile` 并不是 Oracle Solaris 的标准文件。其命名可能源于管理员自定义的配置文件,用于替代或补充 `/etc/environ.profile` 的功能。这种命名方式可能是为了区分不同的环境配置,例如用于开发(dev)、测试(test)或生产(prod)环境的不同设置。若该文件存在,它不会被系统默认加载,除非手动将其内容包含在 `/etc/profile` 或其他初始化脚本中。 ### 加载机制 `/etc/environ.profile` 是系统默认识别并加载的文件之一。Solaris 在用户登录过程中会执行 `/etc/profile`,其中包含了对该文件的引用[^1]。例如: ```sh if [ -f /etc/environ.profile ]; then . /etc/environ.profile fi ``` 这种方式确保了所有用户在登录时都能获得一致的环境变量配置。 而 `/etc/environDD.profile` 不会被自动加载,除非在 `/etc/profile` 中显式地调用它。例如: ```sh if [ -f /etc/environDD.profile ]; then . /etc/environDD.profile fi ``` 这意味着,如果需要使用该文件中的配置,必须手动修改系统初始化脚本以启用其加载过程。 ### 配置管理方式 `/etc/environ.profile` 提供了一种集中式的环境变量管理方式,适用于大多数系统场景。它通常用于定义全局变量,避免重复配置,并确保所有用户获得一致的运行环境。 `/etc/environDD.profile` 更倾向于作为扩展性配置文件使用,可能用于特定服务、应用程序或环境变体的定制化设置。例如,某些软件包安装脚本可能会创建此文件以注入专用的环境变量,而不影响主配置文件的稳定性。 ### 主要区别总结 - **标准化 vs 自定义**:`/etc/environ.profile` 是 Oracle Solaris 标准环境变量配置文件;而 `/etc/environDD.profile` 若存在,则是系统管理员自定义的配置文件。 - **自动加载 vs 手动加载**:`/etc/environ.profile` 会在用户登录时自动加载;而 `/etc/environDD.profile` 必须通过手动编辑 `/etc/profile` 或其他初始化脚本来启用加载。 - **集中式 vs 扩展性**:`/etc/environ.profile` 提供统一的全局环境变量管理;而 `/etc/environDD.profile` 更适合用于特定用途的环境变量扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值