一.系统环境变量位置

在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量。这篇学习怎么让环境变量的作用持久化。在此之前,先了解下系统环境变量文件会在哪些位置,当使用bash shell时,bash是如何查找环境变量位置的。下面先来介绍几个文件,这些文件叫启动文件或叫环境文件。

bash检查的启动文件(环境文件)取决于你启动bash shell的方式。启动bash shell有3种方式:

(1) 登录时的默认登录shell。

(2) 交互式shell。

(3) 运行脚本的非交互式shell。

1.1 登录shell

登陆shell是指:(1) 用户登陆时,输入用户名和密码后启动的shell(例如使用ssh登录远程主机等);(2) 通过带--login参数的命令:bash --login而启动的shell。当登录linux系统时,bash shell作为登录shell启动,登录shell会从5个不同的启动文件里读取命令。包括:/etc/profile,  $HOME/.bash_profile, $HOME/.bashrc, $HOME/.bash_login, $HOME/.profile。而/etc/profile文件是系统默认的bash shell的主启动文件。另外4个启动文件是针对用户的(不同发行版中,四个启动文件一般都只有一到二个),可根据个人需求定制。

(1) /etc/profile文件

只要登录了linux系统,bash就会执行/etc/profile启动文件中的命令(不同发行版的/etc/profile,有不同的设置和命令),profile文件内容如下图所示:

(2) $HOME目录下的启动文件

HOME目录下的隐藏文件,找到了$HOME/.bash_profile, $HOME/.bashrc。每个用户都可以编辑这些文件添加自己的环境变量,这此环境变量会在每次启动 bash sehll 会话时生效。 HOME目录如下图所示:

1.2 交互式shell进程

交互式shell是指:就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。命令行提示符输入命令,只会检查用户HOME目录中的.bashrc文件。 该文件两个作用:1是查看/etc目录下通用的bashrc文件,2是为用户提供一个定制自己的命令别名(前面讲alias命令)和私有脚本函数(后面介绍)。 .bashrc文件内容如下图所示:

1.3 非交互式shell

非交互式shell是指:以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。 系统执行shell脚本时用的这是这种shell。区别是它没有命令提示符。但当你的系统上运行脚本时,也许希望能够运行一些特定启动的命令。

为了处理这种情况bash shell提供了BASH_ENV环境变量。当shell 启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。默认情况下并未设置该变量,使用printenv命令只返回提示符:

正如上图所示:BASH_ENV环境变量没有设置值。这种非交互式shell 一般通过启动一个子shell来执行。如果父shell是登录shell,那么可以从/etc/profile,/etc/profiled/*.sh和$HOME/.bashrc文件中继承这些变量。如果父shell中的变量是局部变量时,那么子shell无法继承。如果不启动子shell, 变量已存在于当前shell中,就算不设置BASH_ENV,也可以使用当前的局部和全局变量。

交互式与非交互式二者区别:读取的配置文件不同,交互式bash必然读取~/.bashrc文件;非交互式bash读取的是环境变量BASH_ENV(通常情况下)所指定的配置文件。

二. 环境变量持久化

上面了解了各种shell进程对应的环境文件,找出永久性环境变量就容易多了。可以利用这些文件来创建自己的永久性全局变量或局部变量。全局变量是对所有用户都需要使用的变量,可以将新的变量或修改过的变量设置放在/etc/profile文件中,但升级了发行版该文件也会更新,所以这点要注意 (对所有用户)。

最好是在/etc/profile.d目录中创建一个以.sh结尾的文件,把所有新的变量或修改过的变量全部放在此文件中(对所有用户)。

对于存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一点适用于所有类型的shell进程(仅对当前用户)。

下面来演示给mysql工具包路径,添加到PATH全局变量中:

(1)在虚拟根目录下输入mysqldump 工具,提示未找到命令,如下图所示:

linux .net环境变量,Linux编程 系统环境变量位置, 环境变量持久化相关推荐

  1. linux之基础shell脚本编程1 基础变量赋值

    本章主要介绍函数的基础,变量赋值,逻辑运算,条件表达式,测试 linux之基础shell脚本编程1  基础变量赋值 linux之基础shell脚本编程2 if语句循环判断 linux之基础shell脚 ...

  2. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  3. qt库文件添加到环境变量linux,QT获得所有系统环境变量(包括Linux和MAC的信息)...

    系统环境变量还是挺重要的,除了QStandardPaths(感觉都是文档类型的变量,QT4使用QDesktopServices),更有QProcessEnvironment(都是真正的系统变量): Q ...

  4. linux系统默认的环境变量path,Linux编程 12 (默认shell环境变量, PATH变量重要讲解)...

    一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...

  5. Linux库概念及相关编程(动态库、静态库、环境变量)

    分文件编程: 好处:分模块编程思想,功能和责任划分清楚便与调试,main函数简洁,代码易于阅读. 编程时头文件有的是使用<>这个符号括起来的,有的是" "使用的是双引号 ...

  6. 查看当前用户的全部系统变量linux,Linux环境变量编程

    一.Linux系统环境变量的分类 按变量的生存周期来划分,Linux变量可分为两类: **环境变量**:又称为全局变量,存在于所有的Shell中:它是永久生效的,且具有继承性,即子Shell会继承父S ...

  7. Linux下的Shell编程(2)环境变量和局部变量

    Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型. 局部变量在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进 程都不能访问本地变量.这些变量与环境变量不 ...

  8. Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法

    linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...

  9. linux 时间 环境变量,Linux环境变量的修改(永久,暂时)以及修改ls显示的时间格式...

    本文转自:http://blog.sina.com.cn/s/blog_8e21864f01014u9h.html Linux修改环境变量,很简单但很重要 一.Linux的变量种类 按变量的生存周期来 ...

  10. linux crontab环境变量,Linux下crontab内环境变量与Shell环境变量的关系【转】

    crontab,总是不会缺省的从用户profile文件中读取环境变量参数 经常导致在手工执行某个脚本时是成功的,但是到crontab中试图执行时就会报错. 解决办法如下: 方法一:在shell文件中获 ...

最新文章

  1. Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
  2. 【CTF】实验吧 围在栅栏中的爱
  3. 教你搞定Android自定义ViewGroup
  4. proguard的简单配置说明
  5. RAS RC4 AES 加密 MD5
  6. Spring注释,我从来没有机会使用第1部分:@primary
  7. 阿里P8架构师谈:MongoDB、Hbase、Redis等NoSQL优劣势、应用场景
  8. java相遇问题_行程问题
  9. linux云自动化运维基础知识4(系统结构,vim,管理输入输出,正则表达式)
  10. 使用Swift触摸任意位置以关闭iOS键盘
  11. python xml etree_Python 标准库之 xml.etree.ElementTree
  12. 保障4-0618任务打卡
  13. 官网链接下载QT5 Creator
  14. CISP 考试教材《第 10 章 知识域:软件开发安全》知识整理
  15. matlab模拟塞曼图谱,塞曼效应理论与实验分析.doc
  16. 统计文章字数和全站总字数
  17. poi处理word内容的公式_Java 使用 POI 操作 XWPFDocument 中的 XWPFParagraph(段落)对象的属性略解 Wor - 链滴...
  18. codeforce 332B Maximum Absurdity
  19. 暗角教程,如何加镜头晕影暗角效果
  20. 墨天轮访谈 | 华为云温云博:从客户视角出发,GaussDB(for Redis)究竟“香”在哪里?

热门文章

  1. 基于Echarts5实现的动态排序柱状图
  2. 数据抓取的艺术(三)
  3. 自动驾驶汽车如何解决复杂交互问题?清华联合MIT提出M2I方案
  4. 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。 牛牛希望你能帮他计算一共有,,,
  5. RxJava 的基本使用
  6. vue -- v-cloak解决刷新或者加载出现闪烁(显示变量)
  7. k-means算法概述
  8. debian添加快捷启动方式
  9. unix网络编程之基本套接口编程
  10. sybase 性能监控及调优(转)