`

linux环境变量

    博客分类:
  • os
阅读更多

环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux 的环境变量具有继承性,即子shell 会继承父shell 的环境变量。

本地变量,当前shell 中的变量,很显然本地变量中肯定包含环境变量。Linux 的本地变量的非环境变量不具备继承性。

Linux 中环境变量的文件

    当你进入系统的时候,linux 就会为你读入系统的环境变量,这些环境变量存放在什么地方,那就是环境变量的文件中。Linux 中有很多记载环境变量的文件,它们被系统读入是按照一定的顺序的。

1.    /etc/profile :

此文件为系统的环境变量,它为每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d 目录的配置文件中搜集shell 的设置。

    这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的shell 是csh 、tcsh 、zsh ,则不会读取此文件),用于获取系统的环境变量,只在登陆的时候读取一次。

    假设用户使用的是BASH ,那么

2.    /etc/bashrc :

在执行完/etc/profile 内容之后,如果用户的SHELL 运行的是bash ,那么接着就会执行此文件。另外,当每次一个新的bash shell 被打开时, 该文件被读取。

    每个使用bash 的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。因此,如果你想让每个使用bash 的用户每新开一个bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。

3.    ~/.bash_profile :

每个用户都可使用该文件输入专用于自己使用的shell 信息。当用户登录时,该文件仅仅执行一次,默认情况下,它设置一些环境变量,执行用户的.bashrc 文件。

    单个用户此文件的修改只会影响到他以后的每一次登陆系统。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么它在每次登陆的时候都会去获取这些新的环境变量或者做某些特殊的操作,但是仅仅在登陆时。

4.    ~/.bashrc :

该文件包含专用于单个人的bash shell 的bash 信息,当登录时以及每次打开一个新的shell 时, 该该文件被读取。

    单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。

~/.bash_logout :

当每次退出系统( 退出bash shell) 时, 执行该文件。

几个命令

    env 和printenv

    这两个变量用于打印所有的环境 变量:

set

用于显示与设置当前本地 变量。单独一个set 就显示了当前环境的所有的变量,它肯定包括环境变量和一些非环境变量

unset

用于清除变量。不管这个变量是环境变量还是本地变量,它都可以清除。

-- 下面是清除本地变量
[oracle@devdb1 oracle]$ set|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ set|grep myname
-- 下面是清除环境变量
[oracle@devdb1 oracle]$ env|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ env|grep myname
    export

 

用于把变量变成当前shell 和其子shell 的环境变量,存活期是当前的shell 及其子shell ,因此重新登陆以后,它所设定的环境变量就消失了。如何将环境变量永久化?修改上面介绍的那几个环境变量的配置文件

source

当直接执行一个脚本的时候,其实是在一个子shell 环境运行的,即开启了一个子shell 来执行这个脚本,脚本执行完后该子shell 自动退出。

有没有办法在当前shell 中执行一个脚本呢?使用source 命令就可以让脚本在当前shell 中执行。如:

[oracle@dbamonitor NBU]$ cat test.sh    -- 查看脚本内容,显示变量内容
echo $myname
[oracle@dbamonitor NBU]$ echo $myname -- 变量存在,内容是ilonng
ilonng
[oracle@dbamonitor NBU]$ set |grep myname -- 变量是本地变量
myname=ilonng
[oracle@dbamonitor NBU]$ env |grep myname -- 变量不是环境变量
[oracle@dbamonitor NBU]$ sh test.sh -- 直接执行,新开子shell ,非环境变量的本地变量不具备继承性,在子shell 中不可见

 

-- 这里什么都没有输出

一、Shell变量分为本地变量和环境变量。 
1、本地变量 -- 在用户现有运行的脚本中使用 
1) 定义本地变量 格式: variable-name=value 
例子:[root@jike1 /root]# LOCALTEST="test" 
[root@jike1 /root]# echo $LOCALTEST test 


2) 显示本地变量 格式: set 
例子:[root@chinaitlab root]# set 


3) 清除本地变量 格式:unset variable-name 
例如:[root@jike1 /root]# unset LOCALTEST 
此时再执行echo $LOCALTEST将看不到变量LOCALTEST的输出。 


2、环境变量 -- 在所有的子进程中使用 
1) 定义环境变量 格式: export variable-name=value (与本地变量的定义相比,多了一个export关键字) 
例子:[root@chinaitlab /root]# export DOMAIN="chinaitlab.com" 
[root@ chinaitlab shell]# vi testenv.sh 
#!/bin/bash 
echo $DOMAIN 
[root@chinaitlab shell]# chmod +x testenv.sh 
[root@chinaitlab shell]# ./testenv.sh 
chinaitlab.com 


2) 显示环境变量 格式: env (本地变量的显示使用set,环境变量的显示使用env) 
例子: [root@chinaitlab test]# env 


3) 清除环境变量 格式:unset variable-name (用法与本地变量相同,都使用unset) 
例子: [root@chinaitlab shell]# unset DOMAIN 
此时再执行./testenv.sh将看不到变量DOMAIN的输出。

---------------------------------------------------------------------------------------------------------------

用户登录后加载profile和bashrc的流程如下: 
1)/etc/profile-------->/etc/profile.d/*.sh 
2)$HOME/.bash_profile-------->$HOME/.bashrc---------->/etc/bashrc 
说明: 
bash首先执行/etc/profile脚本,/etc/profile脚本先依次执行/etc/profile.d/*.sh 
随后bash会执行用户主目录下的.bash_profile脚本,.bash_profile脚本会执行用户主目录下的.bashrc脚本, 
而.bashrc脚本会执行/etc/bashrc脚本 
至此,所有的环境变量和初始化设定都已经加载完成. 
bash随后调用terminfo和inputrc,完成终端属性和键盘映射的设定. 
其中PATH这个变量特殊说明一下: 
如果是超级用户登录,在没有执行/etc/profile之前,PATH已经设定了下面的路径: 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
如果是普通用户,PATH在/etc/profile执行之前设定了以下的路径: 
/usr/local/bin:/bin:/usr/bin 
这里要注意的是:在用户切换并加载变量,例如su -,这时,如果用户自己切换自己,比如root用户再用su - root切换的话,加载的PATH和上面的不一样. 
准确的说,是不总是一样.所以,在/etc/profile脚本中,做了如下的配置: 
if [ `id -u` = 0 ]; then 
pathmunge /sbin 
pathmunge /usr/sbin 
pathmunge /usr/local/sbin 
fi 
如果是超级用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/sbin:/usr/kerberos/bin 
如果是普通用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/bin 
在/etc/profile脚本中,会在PATH变量的最后增加/usr/X11R6/bin目录 
在$HOME/.bash_profile中,会在PATH变量的最后增加$HOME/bin目录 
以root用户为例,最终的PATH会是这样(没有其它自定义的基础上) 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
以alice用户(普通用户)为例 
/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin

---------------------------------------------------------------------------------------------------------------

~/.bash_profile  用户登录时被读取,其中包含的命令被执行

~/.bashrc  启动新的shell时被读取,并执行

~/.bash_logout  shell 登录退出时被读取

转自:http://www.cnblogs.com/growup/archive/2011/07/02/2096142.html

分享到:
评论

相关推荐

    基于web的机动车号牌管理系统.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    cmm培训资料,PcDmis 初級培訓教程

    cmm培训资料,PcDmis 初級培訓教程

    华为手机助手,降级工具

    华为手机助手,降级工具。

    基于S7-200 PLC与组态王的喷泉控制系统设计及应用

    内容概要:本文详细介绍了基于西门子S7-200 PLC和组态王软件的喷泉控制系统的设计与实现。首先阐述了硬件配置,包括CPU选型、IO分配以及接线注意事项。接着深入解析了梯形图程序的关键逻辑,如手动模式和自动模式的控制流程,特别是利用定时器实现的复杂喷水效果。此外,还讲解了组态王的画面设计技巧,如通过绑定寄存器地址实现动态视觉效果。最后分享了一些调试经验和常见问题的解决方案,强调了安全性和稳定性的重要性。 适合人群:初学者和有一定基础的工业自动化工程师。 使用场景及目标:适用于希望深入了解PLC编程和人机界面设计的学习者,旨在掌握喷泉控制系统的完整开发流程,包括硬件选型、程序编写、画面设计和现场调试。 其他说明:文中提供了大量实际操作经验和代码示例,有助于读者更好地理解和应用所学知识。

    《基于yolov8的安全帽检测项目》(包含源码、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、数据集、部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.dataset.txt文件,仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持

    基于QT(QT6.5.3)自制串口工具,实现多条发送,单条发送,(注HEX接收和发送有问题,后续有时间再完善)

    注:由于本人对QT也不熟悉,仅做参考使用, 文件代码开源,由于使用本资料引起的后果自负。 文件夹中build中,分Release和Debug,文件夹Relase时使用QT的windeployqt.exe打包,YMCOM.exe是使用Enigma Virtual Box压缩后的应用程序。

    整理的手写数字识别项目Pytorch以及matlab实现,给初学者使用案例.zip

    matlab

    活动创作者激励数据相关材料

    【活动】创作者激励数据相关材料

    matlab实现全球定位系统GPS信号产生、捕获与追踪的深度研究-GPS-信号处理-伪随机码-三边测量-多路径效应修正-matlab

    内容概要:本文详细探讨了全球定位系统(GPS)的信号产生、捕获和追踪三个核心步骤,并通过Matlab源码实现相关算法。首先介绍了GPS信号产生的关键要素,包括伪随机码生成、数据编码和信号发射。接着讨论了信号捕获过程,涉及天线接收、码相位测量及其常用方法如滑动相关法。最后阐述了信号追踪的三边测量原理及误差修正措施,如电离层延迟补偿、地形效应补偿和多路径效应修正。通过具体Matlab代码示例展示了整个流程的实现,并附带了详细的运行步骤和结果分析。 适合人群:对GPS系统有兴趣的研究人员和技术爱好者,尤其是有一定编程基础并希望深入了解GPS内部机制的人群。 使用场景及目标:适用于学术研究、工程开发等领域,旨在帮助读者掌握GPS信号处理的基本理论和实践技能,提升定位精度和可靠性。 其他说明:文中提供的Matlab代码已在特定版本下测试通过,但不同版本可能存在差异。此外,还列举了一些参考文献供进一步学习。

    基于Matlab/GUI的FIR数字滤波器设计:窗函数法与等波纹最佳逼近法实现多种类型滤波器

    内容概要:本文详细介绍了如何使用Matlab和其图形用户界面(GUI)设计不同类型的FIR数字滤波器。首先解释了FIR滤波器的基本概念及其重要性,然后重点讨论了两种常用的设计方法:窗函数法和等波纹最佳逼近法。窗函数法通过选择合适的窗函数(如矩形窗、凯塞窗等)来截断理想的滤波器冲激响应,而等波纹最佳逼近法则采用Parks-McClellan算法,在通带和阻带内获得最小的最大纹波。文中还展示了具体的Matlab代码实例,包括低通、高通、带通和带阻滤波器的设计,并通过频响图进行了直观展示。此外,文章介绍了如何利用Matlab的App Designer创建交互式的GUI工具,使用户能够实时调整滤波器参数并查看频响特性。 适合人群:对数字信号处理有一定了解的研究人员和技术爱好者,尤其是那些希望通过Matlab进行FIR滤波器设计的人。 使用场景及目标:①帮助读者理解FIR滤波器的工作原理和设计方法;②提供实用的Matlab代码示例,便于读者动手实践;③通过GUI工具提高滤波器设计的效率和直观性。 其他说明:文章不仅涵盖了理论知识,还包括了大量的实战经验和技巧提示,有助于读者更好地掌握FIR滤波器设计的技术要点。

    Eplan部件库优化与应用:提升电气设计效率的关键技术与实践经验

    内容概要:本文详细介绍了Eplan部件库的优化与应用,旨在提高电气设计工程师的工作效率。文中分享了作者积累的宝贵经验,涵盖了多个知名品牌如西门子、三菱、施耐德、正泰等的低压电器和PLC模块的高效管理方法。通过自定义部件库,实现了即插即用的功能,大幅减少了重复劳动,提高了项目的响应速度。文章还提供了具体的代码示例和技术细节,展示了如何利用过滤器快速查找所需设备、智能匹配端子排布局宏、动态生成接线图等功能。此外,文章强调了部件库的维护和版本管理的重要性,以及如何处理非标元件和特殊需求。 适用人群:电气设计工程师、自动化工程师及相关技术人员。 使用场景及目标:适用于各类工业自动化项目的设计阶段,特别是在涉及多种品牌设备混合使用的复杂环境中。主要目标是通过优化部件库管理,缩短设计周期,减少错误率,提高工作效率。 其他说明:文中提到的技术细节和代码片段可以直接应用于实际工作中,帮助工程师们更好地理解和掌握Eplan部件库的高级用法。同时,文章也提醒读者要注意部件库的规范化管理和持续更新,确保长期稳定运行。

    openjdk 8u44源码

    openjdk 8u44源码

    [数据结构(C语言版)(第三版)(微课版)]习题答案+实例源代码+电子课件

    [数据结构(C语言版)(第三版)(微课版)]配书资源

    J2SE开发的资源共享客户端+服务端

    J2SE开发的资源共享客户端+服务端,用户可以共享文件目录,搜索资源,下载资源

    反欺诈平台的建设.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    基于主从博弈的综合能源微网与共享储能优化运行研究及MATLAB仿真

    内容概要:本文深入探讨了综合能源微网与共享储能系统的优化运行方法,特别是在主从博弈框架下的应用。文中详细介绍了如何利用MATLAB和CPLEX求解器,通过主从博弈模型实现微网运营商与用户聚合商之间的利益均衡。具体来说,微网运营商作为上层领导者制定价格策略,用户聚合商作为下层跟随者根据价格调整用能行为,共享储能商则起到调节供需的作用。文章展示了通过迭代式启发式算法和混合整数线性规划(MILP),可以有效提升能源利用效率并降低用能成本。此外,还讨论了电制热设备的引入及其对博弈结果的影响,以及仿真过程中的一些关键技术细节和挑战。 适合人群:从事能源管理和电力系统优化的研究人员和技术人员,尤其是对主从博弈理论和MATLAB编程有一定了解的专业人士。 使用场景及目标:适用于希望深入了解综合能源微网与共享储能系统优化运行机制的人群。目标是掌握主从博弈模型的应用方法,学会使用MATLAB和CPLEX求解器进行相关仿真,以便在未来的工作中能够更好地设计和优化能源管理系统。 其他说明:文章提供了详细的MATLAB代码示例,涵盖了从模型建立到求解的全过程。同时,强调了实际应用中的注意事项,如充放电效率、热惯性模型、设备启停损耗等,确保仿真结果更加贴近真实情况。

    国产大模型DeepSeek-R1简介及其对出版业的影响分析.pdf

    本文详细介绍了国产大模型DeepSeek-R1及其对出版业的影响。DeepSeek-R1是DeepSeek公司开发的第一代推理优化大语言模型,具有高效的模型架构、多阶段训练流程和强化学习算法等技术特点,在复杂推理任务中表现出色,且开源免费、成本低廉。文章分析了其与OpenAI模型及其他国产大模型的比较优势,并探讨了其对人工智能发展的影响,如推动技术共享、促进AI安全应用等。同时,文章重点阐述了DeepSeek-R1在出版业的应用现状、对知识生成、加工和传播的影响,并为出版单位提出了应对策略和建议,指出出版业应积极拥抱大模型技术以实现智能化转型。

    眉山市乡镇边界,矢量边界,shp格式

    矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用

    基于PCA与智能优化算法的BP神经网络参数优化及数据降维方法研究

    内容概要:本文详细介绍了如何将主成分分析(PCA)、遗传算法和粒子群算法应用于BP神经网络的数据降维和参数优化。首先,通过对数据进行标准化处理并使用PCA降低数据维度,确保保留至少95%的方差信息。然后,构建了一个简单的BP神经网络模型,并分别采用遗传算法和粒子群算法对其参数进行优化。实验结果显示,经过优化后的模型不仅提高了准确性,还显著减少了训练时间和计算复杂度。此外,文中提供了完整的Python代码示例,便于读者理解和实践。 适合人群:对机器学习感兴趣的研究人员和技术爱好者,尤其是希望深入了解数据降维技术和智能优化算法的应用场景的人士。 使用场景及目标:适用于需要处理高维数据集并且希望通过智能优化算法提高BP神经网络性能的情况。主要目标是在不影响模型精度的前提下,通过降维减少计算成本,并通过参数优化进一步提升模型的表现。 其他说明:文中提到的技术不仅可以用于分类任务,也可以扩展到回归等问题。同时,作者强调了在实际应用中调整超参数的重要性,如正则化参数的选择以及避免过度复杂的网络结构。

    基于三菱PLC和MCGS的广场喷泉控制系统设计与实现

    内容概要:本文详细介绍了基于三菱PLC(FX3U系列)和MCGS组态软件的广场喷泉控制系统的设计与实现。首先明确了系统的硬件搭建,包括IO分配、接线图原理图以及注意事项如电磁阀加中间继电器、24V电源独立走线等。接着阐述了PLC梯形图程序的核心逻辑,特别是模式切换、定时器应用、水泵控制的安全机制等。最后讲解了MCGS组态画面的设计,包括运行指示灯、喷水动画、调试界面等功能,并分享了一些调试经验和技巧。 适合人群:自动化工程技术人员、PLC编程爱好者、电气工程师。 使用场景及目标:适用于需要设计和实施类似广场喷泉控制系统的工程项目,目标是掌握三菱PLC和MCGS组态软件的具体应用方法和技术要点。 其他说明:文中提供了详细的代码片段和接线示意图,有助于读者更好地理解和实践。同时强调了硬件配置的重要性,提醒读者避免常见的错误和陷阱。

Global site tag (gtag.js) - Google Analytics