LINUX环境变量shell和sh执行时的加载顺序

一、前言

  LINUX是多用户操作系统,针对操作系统用户的一些系统参数值,应用初始化前通常需要进行配置。而LINUX针对这块的设置既有系统级配置文件,又有用户级配置文件。我们在编写脚本或者初始化应用时,了解清楚不同配置文件的加载顺序,有利于更好且有效的设置好我们需要的参数。

  最近,看到一篇很早之前的博主文章,写到这块知识点,并且还配上了图,看完再加上动手实验,相信会对此豁然开朗。话不多说,先上图

图上内容描述是不同调用环境下shell脚本调用的配置文件加载顺序,再上手验证测试之前,还需要了解下几种不同执行方式的区别和基础概念。

二、基础知识点

1、sh和bash

sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。在一般的linux系统当中(如redhat,centos),使用sh调用执行脚本相当于打开了bash的POSIX标准模式(等效于bash的 --posix 参数)一般的,sh是bash的“子集”
bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。

在大多数简单脚本中,两种执行没有任何区别,但从上图可以看出不同执行方式的环境变量加载是有区别的。后续测试案例中会验证这一点。

2、login与 no login

登录 shell :

<think>嗯,用户想调整Linux系统中环境变量加载顺序优先级。首先,我需要回忆一下Linux环境变量加载机制。根据之前的引用资料,环境变量的配置文件有多个,比如/etc/environment、/etc/profile、~/.bashrc等,它们的加载顺序会影响最终的变量值。引用[4]提到加载顺序是/etc/environment最先,然后是/etc/profile,接着是/etc/bash.bashrc,再是用户目录下的.profile.bashrc。用户想调整这个顺序的话,可能需要修改这些配置文件的内容或者它们的加载方式。 接下来,用户可能想知道如何改变某个环境变量的优先级,比如PATH变量。通常,PATH中的路径是按顺序查找的,先出现的路径优先级更高。所以如果要让某个路径优先,应该把它放在PATH变量的前面。比如引用[5]中的例子,用户通过修改PATH的值,将某个路径移到最前面。这可能涉及到编辑/etc/environment或者用户的.bashrc文件,使用export命令重新设置PATH。 另外,用户可能需要了解不同作用范围的配置方法。比如系统级用户级的配置文件,调整它们会影响所有用户或仅当前用户。比如要全局调整,可能需要修改/etc/environment或/etc/profile,而用户级别则修改~/.profile或~/.bashrc。 还要考虑临调整永久调整的区别。临调整可以用export命令,只在当前会话有效;永久调整则需要修改配置文件并source或者重启终端。比如引用[4]提到,修改/etc/environment后需要source或者新开终端生效。 可能的误区是用户可能认为可以改变配置文件的加载顺序,比如让/etc/profile在/etc/environment之前加载,但实际上加载顺序是系统预设的,用户无法直接改变这个顺序。不过可以通过在后面的配置文件中覆盖前面的变量来调整优先级。例如,即使/etc/environment先加载了PATH,后面的/etc/profile或~/.bashrc中可以重新导出PATH,把需要的路径加在前面。 还要注意不同shell(如bashsh)可能会有不同的加载文件,比如引用[3]提到shellsh执行加载顺序不同,所以用户需要根据自己使用的shell来调整对应的配置文件。 总结下来,调整环境变量的优先级主要方法包括:1. 在适当的配置文件中修改变量的赋值顺序;2. 使用export覆盖变量;3. 根据作用范围选择系统级或用户级文件;4. 注意临永久修改的区别。需要提醒用户避免直接修改系统级文件可能带来的风险,建议先备份,并在用户级文件中进行调整。</think>### Linux环境变量加载顺序调整方法 #### 一、理解加载顺序机制 Linux环境变量加载顺序由系统配置文件执行流程决定,主要遵循以下优先级(从高到低)[^4][^3]: 1. **系统级配置**:`/etc/environment` → `/etc/profile` → `/etc/bash.bashrc` 2. **用户级配置**:`~/.profile` → `~/.bashrc` #### 二、调整优先级的核心方法 1. **变量覆盖规则**: - 后加载的配置文件会覆盖先加载的同名变量 - 示例:在`~/.bashrc`中设置`PATH="/new/path:$PATH"`会将新路径插入现有路径前 2. **PATH变量调整示例**: ```bash # 在~/.bashrc中添加(用户级生效) export PATH="/custom/bin:$PATH" ``` 该操作将`/custom/bin`设为最高优先级路径[^5] 3. **全局配置修改**: ```bash # 修改/etc/environment(系统级生效) PATH="/global/path:/usr/local/bin:/usr/bin:/bin" ``` #### 三、操作注意事项 1. **生效方式**: - 临修改:`export VAR=value`(仅当前会话有效) - 永久修改:修改配置文件后执行`source <文件名>`或重启终端[^4] 2. **风险控制**: ```bash # 修改前建议备份 cp ~/.bashrc ~/.bashrc.bak ``` 3. **特殊场景处理**: - 图形界面程序:需在`~/.profile`中设置 - 脚本执行环境:通过`env`命令临设置 ```bash env PATH="/temp/path:$PATH" script.sh ``` #### 四、验证方法 1. 查看当前PATH: ```bash echo $PATH | tr ':' '\n' ``` 2. 检查加载顺序: ```bash strace -e openat bash -lic "true" 2>&1 | grep 'profile\|bashrc' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值