【Linux】环境变量(environment variables)


来源:https://blog.csdn.net/qq_43442524/article/details/100077111

https://blog.csdn.net/jiangyanting2011/article/details/78875928


一、概述

一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息,相当于给系统或用户应用程序设置的一些参数。。

例如Windows和DOS操作系统中的path环境变量。
当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。
用户通过设置环境变量,来更好的运行进程。

DWORD GetEnvironmentVariable(LPCSTR lpName, LPSTR lpBuffer, DWORD dSize)

lpName是要求查询的环境变量的名;
lpBuffer是返回所指定的环境变量的值;
dSize是告诉函数lpBuffer可以存放多少个字节

分析本地故障时原因很可能就是因为环境变量中的默认路径被删除的结果。
默认路径一经设置,当前系统如有程序运行时需要某些DLL或EXE文件,以及Active控件时就会到所有默认路径中去查找。
如果在这些目录中查找到相应的程序则自动加载,查找不到则报告缺少某某文件的错误信息。



二、Linux系统

1、需要了解的

shell环境依赖于多个文件的设置。当shell被调用时,它从两个初始文件读取命令。

/etc/profile包含了系统变量,它由系统管理员维护,由系统管理员设置本地系统变量和特殊命令。
普通用户的启动信息文件($HOME/.bash_project)由各用户自己维护,该文件可以被修改以实现任何特定的系统初始化。

只有在特定的情况下才读取profile文件,确切的说是在用户登陆的时候。

当运行shell脚本或subshell以后,就无须再读profile。
虽然所有profile都可选的,但是基本上所有系统都有/etc/profile。

Linux中环境变量包括系统级和用户级。

用户级的环境变量则是该用户使用系统时加载的环境变量。

(1)系统级

1)/etc/environment

是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。

系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE。
因此文件中如果要定义PATH环境变量,只需加入一行形如PATH=$PATH:/xxx/bin的代码即可。

2)/etc/profile

是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。

该文件一般是调用/etc/bash.bashrc文件。

/etc/bash.bashrc:系统级的bashrc文件,为每一个运行bash shell的用户执行此文件。此文件会在用户每次打开shell时执行一次。

注意:/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。 这两个文件修改后一般都要重启系统才能生效。

(2)用户级(这些文件处于home目录下)

系统级的环境变量是每个登录到系统的用户都要读取的系统变量。

1)~/.profile: 是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。

每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方。

2)~/.bashrc: 是对应当前登录用户的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。平时设置这个文件就可以了。

几个文件的执行先后顺序应当是:
/etc/enviroment –>/etc/profile –>~/.profile –>/etc/bash.bashrc–> ~/.bashrc


如果定义了变量ENV且已经传递到环境中,则所有的bash shell都要读取并调用由这个变量制定的文件所包含的命令。
这个文件用来定义所有bash shell的特征,而不仅仅是登陆到shell。这个文件的典型的名字是$HOME/,bashrc。


2、设置

(1)临时

在linux下设定环境变量时,如果只是临时用一下,可以直接在shell下用set或export命令设定环境变量。
只能在当前shell脚本下可用.,切换到另一个终端就会失效。

PYTHONPATH设置为该路径:

export PYTHONPATH=/home/yanting/learning/ssd-caffe/python  #export的意思就是将局部变量设置为环境变量

这几个环境变量已经有一些默认值了,不过我们可以追加内容,比如修改PATH:

PATH = /abc/def:$PATH         #冒号的意思是并列

(2)如果希望此环境变量每次开机或打开shell时自动设定而无须每次都手动设定,那么需要将export命令写入以上的系统文件中。

1)打开当前用户环境变量:
终端输入:sudo gedit ~/.bashrc,输入用户密码,则会打开.bashrc文件,
在其末尾添加:

export PYTHONPATH=/home/yanting/learning/caffe/python:$PYTHONPATH  # path采用:来分隔,冒号左右不需要空格.

:$PYTHONPATH 在后面:新添加的path优先搜索;
$PYTHONPATH: 在前面:新添加的path后面搜索;

不加代表新路径设置为PYTHONPATH路径。

在终端执行:source ~/.bashrc ,使其立即生效,或者重启电脑即可。


2)在终端使用 sudo gedit /etc/profile 打开环境变量的文件,然后将自己的环境变量加入到文件之后,用export 执行。

在终端里面使用source /etc/profile 来更新环境变量。


3)采用export添加新的路径到环境变量PATH中

export PATH=$PATH:/home/cc/path1:/home/cc/path2  #添加搜索路径path2到PATH中,采用:来分隔,冒号左右不需要空格

#若需要将路径放在优先搜索位置,将$PATH放在后面

export PATH=/home/cc/path1:/home/cc/pck:$PATH



3、查看

查看全部,使用env命令即可。

查看单个,可以使用echo:

echo $PYTHONPATH


4、常用系统变量

$ HOME、$ SHELL、$USER等

$USER 可以直接查看当前user



三、Java

PATH是操作系统用的,用来指定操作系统需要使用到的可执行程序的位置。

对于Java来说,通常需要把JDK的bin目录添加进入PATH中,这样你就可以在任意目录下使用bin下面的可执行程序,如javac.exe、java.exe等。
这个变量一定要保证将JRE/JDK的bin纳入其中。

JDK,JRE,JVM三者之间的关系:
JDK = JRE + Java的开发工具(javac.exe,java.exe,javadoc.exe)
JRD = JVM + Java核心类库

/*******相与枕藉乎舟中,不知东方之既白*******/
原文地址:https://www.cnblogs.com/Mars-0603/p/14984670.html