• 每一种编程语言中,我们都会碰到变量的作用域的问题。(比如在函数中定义的变量在函数外不能使用的) BASH 中也有类似的问题,局部变量和环境变量(全局变量)。 局部变量是普通的变量,仅在创建它的Shell中有效。 ...

    每一种编程语言中,我们都会碰到变量的作用域的问题。(比如在函数中定义的变量在函数外不能使用的) 
    BASH 中也有类似的问题,局部变量和环境变量(全局变量)。 
    局部变量是普通的变量,仅在创建它的Shell中有效。 
    环境变量。我们更多的使用“环境变量”而不是“全局变量”,因为这个名称更 
    能体现它的特点。环境变量对创建它的Shell及其派生出来的子进程都有效。或者说环境变量可以继承,但它对其它与创建它的Shell没有关系的Shell并不可见。其实重启一个终端就是重新启动了一个shell 

    Linux的变量可分为两类:环境变量和本地变量 

    环境变量,或者称为全局变量,存在与所有的shell中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux的环境变量具有继承性,即子shell会继承父shell的环境变量。 
    #env 显示环境变量 
    本地变量,当前shell中的变量,很显然本地变量中肯定包含环境变量。Linux的本地变量的非环境变量不具备继承性。 
    #set显示本地变量 
    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 

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

    Java代码 

     收藏代码

    1. [root@devdb1 worksh]# env  
    2.   
    3. HOSTNAME=devdb1  
    4.   
    5. TERM=vt100  
    6.   
    7. ..........................................................  
    8.   
    9. OLDPWD=/root  
    10.   
    11. [root@devdb1 worksh]# printenv  
    12.   
    13. HOSTNAME=devdb1  
    14.   
    15. TERM=vt100  
    16.   
    17. ..........................................................  
    18.   
    19. OLDPWD=/root  
    20.   
    21. [root@devdb1 worksh]#  



        另外,env变量还有其他的功能,如下: 

    env [-i|-] [name=value] [command [argument]] 

    这里的“-i”或者“-”,都是表示忽略继承的环境变量;这里的name=value,用于指定本地变量对,可以有多组;整个命令的含义是,忽略继承的环境变量,设定多组name变量,在此基础上运行命令command。如 
     

    Java代码 

     收藏代码

    1. env -i test="test" bash -c 'echo $SHELL; env'  
    2.   
    3. /bin/bash  
    4.   
    5. PWD=/home/oracle  
    6.   
    7. test=test  
    8.   
    9. SHLVL=1  
    10.   
    11. _=/bin/env  



    很显然,这里新运行bash并没有继承环境变量,但是却设置了本地变量test。 

        set 

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

    Java代码 

     收藏代码

    1. [oracle@devdb1 oracle]$ set  
    2.   
    3. BASH=/bin/bash  
    4.   
    5. BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")  
    6.   
    7. BASH_VERSION='2.05b.0(1)-release'  
    8.   
    9. BDUMP=/opt/oracle/admin/devdb/bdump  
    10.   
    11. COLORS=/etc/DIR_COLORS  
    12.   
    13. COLUMNS=132  
    14.   
    15. DIRSTACK=()  
    16.   
    17. EUID=500  
    18.   
    19. GROUPS=()  
    20.   
    21. G_BROKEN_FILENAMES=1  
    22.   
    23. HISTFILE=/home/oracle/.bash_history  
    24.   
    25. HISTFILESIZE=1000  
    26.   
    27. HISTSIZE=1000  
    28.   
    29. HOME=/home/oracle  



    ............................. 

        set很有很多其他的选项,具体请参考man 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,因此重新登陆以后,它所设定的环境变量就消失了。如何将环境变量永久化?修改上面介绍的那几个环境变量的配置文件。 

    [oracle@devdb1 oracle]$ export myname=ilonng 

    [oracle@devdb1 oracle]$ env|grep myname 

    myname=ilonng 

    [oracle@devdb1 oracle]$ bash 

    [oracle@devdb1 oracle]$ env|grep myname 

    myname=ilonng 

    [oracle@devdb1 oracle]$ exit 

    exit 

    [oracle@devdb1 oracle]$ env|grep myname 

    myname=ilonng 

        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中不可见 

    -- 这里什么都没有输出 
        
    [oracle@dbamonitor NBU]$ source test.sh -- source命令,是脚本在当前shell中执行 

    展开全文
  • linux 查看系统变量

    2018-04-10 17:13:50
    Linux变量种类按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效。 2 临时的:使用export命令声明即可,变量在关闭shell时失效。1 在/etc/profile文件中添加变量【对...

    Linux的变量种类

    按变量的生存周期来划分,Linux变量可分为两类: 
    1 永久的:需要修改配置文件,变量永久生效。 

    2 临时的:使用export命令声明即可,变量在关闭shell时失效。

    1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】 
    用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 
    例如:编辑/etc/profile文件,添加CLASSPATH变量 
    # vi /etc/profile 

    export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

    注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。


    2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】 

    用VI在用户目录下的

    .bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。 

    例如:编辑guok用户目录(/home/guok)下的.bash_profile 
    $ vi /home/guok/.bash.profile 
    添加如下内容: 
    export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 
    注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

    3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 
    在shell的命令行下直接使用[export 变量名=变量值] 定义变量,

    该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,

    shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

    环境变量的查看

    1 使用echo命令查看单个环境变量。例如: 
    echo $PATH 
    2 使用env查看所有环境变量。例如: 
    env 
    3 使用set查看所有本地定义的环境变量。

    使用unset删除指定的环境变量

    set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下: 
    $ export TEST="Test..." #增加一个环境变量TEST 
    $ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了 
    TEST=Test... 
    unset  TEST #删除环境变量TEST 
    $ env|grep TEST #此命令没有输出,证明环境变量TEST已经删除

    常用的环境变量

    PATH 决定了shell将到哪些目录中寻找命令或程序 
    HOME 当前用户主目录 
    HISTSIZE 历史记录数 
    LOGNAME 当前用户的登录名 
    HOSTNAME 指主机的名称 
    SHELL 当前用户Shell类型 
    LANGUGE  语言相关的环境变量,多语言可以修改此环境变量 
    MAIL 当前用户的邮件存放目录 
    PS1 基本提示符,对于root用户是#,对于普通用户是$


    展开全文
  • Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。  系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量  用户级环境变量:每一个登录到系统的用户只...

    在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

                系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量
                用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量 

    自然而然地,环境变量的配置文件也相应的被分成了系统级和用户级两种。

    系统级

    /etc/profile

    在系统启动后第一个用户登录时运行,并从/etc/profile.d目录的配置文件中搜集shell的设置,使用该文件配置的环境变量将应用于登录到系统的每一个用户。

     提示:在Linux系统中,使用以下命令可以使配置文件立刻生效。

    source /etc/profile
    echo $PATH

    /etc/bashrc(Ubuntu和Debian中是/etc/bash.bashrc)

    在 bash shell 打开时运行,修改该文件配置的环境变量将会影响所有用户使用的bash shell。

    注意:这里的bash shell有不同的类别,不同的类别所使用的环境变量配置文件也有所不同。一般情况下,非登录shell不会执行任何profile文件,非交互shell模式不会执行任何bashrc文件。

    # 登录shell和非登陆shell:
    登录shell # 需要输入用户密码,例如 ssh 登录或者 su - 命令提权都会启动login shell模式
    非登陆shell # 无需输入用户密码;
    
    # 交互shell和非交互shell:
    交互shell # 提供命令提示符等待用户输入命令的是交互shell模式
    非交互shell # 直接运行脚本文件是非交互shell模式

    /etc/environment

    在系统启动时运行,用于配置与系统运行相关但与用户无关的环境变量,修改该文件配置的环境变量将影响全局。

    用户级

    ~/.profile(推荐首选)

    当用户登录时执行,每个用户都可以使用该文件来配置专属于自己使用的shell信息。

    ~/.bashrc

    当用户登录时以及每次打开新的shell时该文件都将被读取,不推荐在这里配置用户专用的环境变量,因为每开一个shell,该文件都会被读取一次,效率肯定受影响。

    ~/.bash_profile 或 ~./bash_login

    ~/.bash_profile or ~./bash_login - If one of these file exist, bash executes it rather then "~/.profile" 
    when it is started as a login shell. (Bash will prefer "~/.bash_profile" to "~/.bash_login"). 
    However, these files won't influence a graphical session by default.

    以上是ubuntu官网给出的关于~/.bash_profile 和 ~./bash_login 的说明,翻译为中文:

    ~/.bash_profile 或 ~./bash_login - 
    如果有其中的一个文件存在的话, 当启动的是一个 登录shell时,Bash 会执行该文件而不会执行~/.profile ;
    如果两个文件都存在的话,Bash 将会优先执行~/.bash_profile 而不是~/.bash_login ; 
    然而, 默认情况下,这些文件不会影响图形会话。

    ~/.bash_logout

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

    注意:Linux系统使用 $VARIABLE_NAME 访问环境变量,多个环境变量之间使用 : 分隔,Windows系统使用 %VARIABLE_NAME% 访问环境变量,多个环境变量之间使用 ; 分隔。

    一般情况下,Linux加载环境变量配置文件的执行顺序为:

    ==> /etc/profile
    ==> ~/.bash_profile | ~/.bash_login | ~/.profile
    ==> ~/.bashrc
    ==> /etc/bashrc
    ==> ~/.bash_logout

     

    展开全文
  • 在c,main函数的前两个参数argc...main的第三个参数里存的是系统变量,所以可以通过这个参数获得系统环境变量 #include int main(int argc, char** argv, char** arge) { while(*arge) { printf("%s\n", *arge++)

    在c中,main函数的前两个参数argc, argv被很多人熟悉,但main函数还有第三个参数------arge。

    main的第三个参数里存的是系统变量,所以可以通过这个参数获得系统环境变量

    #include <stdio.h>
    
    int main(int argc, char** argv, char** arge)
    {
    	while(*arge)
    	{
    		printf("%s\n", *arge++);
    	}
    	return 0;
    }


    另外,还有一个指针变量environ,它指向的是包含所有的环境变量的一个列表

    environ变量的声明如下:

    #include <stdlib.h>

    extern char** environ;

    #include <stdio.h>
    #include <stdlib.h>
    
    extern char** environ;
    
    int main(int argc, char** argv, char** arge)
    {
    	while(*environ)
    	{
    		printf("%s\n", *environ++);
    	}
    	return 0;
    }


    获取某个环境变量值可以使用getenv()函数

    #include <stdlib.h>
    char *getenv(const char *name);

    描述:getenv函数在环境列表中寻找name,并且返回对应到变量值

    返回值:如果存在返回该环境值,不存在返回NULL

    #include <stdio.h>
    #include <stdlib.h>
    
    main()
    {
    	printf("%s\n", getenv("PATH"));
    }



    设置环境变量setenv()

    #include <stdlib.h>

    int setenv(const char *name, const char *value, int overwrite);

    描述:第一个参数代表要进行赋值的环境变量的名称,第二个表示新值。

                第三个参数决定是否替代,0表示不修改原来的值,非0则修改。成功则返回0,失败返回-1.

    返回值:成功返回0,失败返回-1.


    删除环境变量unsetenv(char *name);

    函数成功则返回0,失败返回-1.


    #include <stdio.h>
    #include <stdlib.h>
    
    main()
    {
    	int r;
    	r = setenv("noexist", "noexist-value", 0); //noexist不存在,将在环境列表中创建,并且值为noexist-value
    	if(-1 == r) exit(-1);
    	printf("%s\n", getenv("noexist"));
    	sleep(2);
    	r = unsetenv("noexist");                   //删除环境变量
    	if(0 == r)
    		printf("删除环境变量成功\n");
    	
    }


    展开全文
  • linux装anaconda后发现不能用,后来知道还要添加环境变量 方法如下: 1)sh 安装包.sh 2)cd /home/tianxiaoxiao/package //先定位到当前安装包目录下 echo 'export PATH ="/home/tianxiaoxiao/anaconda3/bin:$...

    linux装anaconda后发现不能用,后来知道还要添加环境变量

    方法如下:

    1)sh  安装包.sh
    2)cd  /home/txxx/package  //先定位到当前安装包目录下
    echo 'export PATH ="/home/tianxiaoxiao/anaconda3/bin:$PATH"' >> ~/.bashrc
    
    source ~/.bashrc
    
    

    服务器装keras

    
    # 必须在python=3.6环境下
    # 2020/07/05
    pip install tensorflow-gpu==1.9
    
    conda install keras=2.2.4
    
    #测试代码路径
    /home/txx/code/20200626/test_CUDA
    

    参考博文(配置环境变量):https://blog.csdn.net/xianglao1935/article/details/80510494

    展开全文
  • 输出linux系统的所有环境变量实例: #include #include #include #include #include int main(int argc, char **argv, char **env){ printf("Hello!!!!!!!!!!!!!!!!!!!!!!\n"); int i=0; int fd = open...
  • 原理:当一个进程执行时,linux下会生成一个以pid为标志的虚拟文件系统,其中记录了大量关于这个进程的信息。其中environ便记录了环境变量。 第一步:获取进程pid ps -ef | grep 进程名 第二部:cat /proc/pid...
  • 在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误。 在Linux系统下,如果你下载并安装应用程序,很...
  • Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量,所以管理环境变量的文件也分为系统级和用户级的。...
  • linux环境变量和Windows的环境变量一样,分系统环境变量和用户环境变量系统环境变量对所有用户有效,而用户环境变量只对当前用户有效,下面以jdk为例进行两种环境变量的配置。 1.系统环境变量配置 执行 vim /etc/...
  • Linux下添加环境变量

    2018-03-30 18:45:50
    Linux下环境变量按其生存周期可以分为两类: ...Linux下两者分别由不同的文件管理,系统环境变量存储在/etc/profile文件上,而用户环境变量存储在~/.bash_profile文件(即用户目录下的.bash_profile文件)上。
  • 1, 添加临时环境变量 export PATH=$PATH:/usr/local/php/bin 2, 添加永久环境变量 用户环境变量 vim ~/.bash_profile 在文件末尾加上 export PATH=$PATH:/usr/local/php/bin 全局环境变量 vim /etc/profile...
  • Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行...
  • Linux下的环境变量

    2017-12-22 19:05:45
    一、环境变量Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。 所以管理环境变量的文件也分为系统级和...
  • 请在屏幕上面显示出您的环境变量 HOME 与 MAIL: 答: echo $HOME 或者是 echo ${HOME} echo $MAIL 或者是 echo ${MAIL}
  • Linux下使用源码安装软件的时候,通常只能在软件安装目录下使用该软件命令(使用yum命令安装的除外),这样太麻烦,我们希望全局使用,可以将软件安装路径添加到系统环境变量里。 添加环境变量有2种方法: //1,使用...
  • 本文就介绍了linux系统中的环境变量的相关知识,具体内容如下所述。 linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一...
  • Linux环境变量

    2018-07-02 23:52:59
    环境变量一般是指操作系统中指定操作系统运行环境的一些参数。它相当于一个指针,想要查看变量的值,需要加上“$”。 1.2 环境变量的分类 1.2.1 按作用的范围分 在Linux中的变量,可以分为环境变量和本地变量: ...
  • LINUX 环境变量总结

    2009-06-18 17:08:00
    我们在Linux下安装系统软件的时候,经常遇到一些系统环境变量配置的问题。什么是环境变量?如何定制环境变量?我将在下面做一些介绍。一、什么是环境变量Linux是一个多用户的操作系统。多用户意味着每个用户登录...
  • 设置变量对于一般人最实用的功能就是:不用拷贝某些dll文件到系统目录中了,而path这一系统变量就是系统搜索dll文件的一系列路径。  在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现...
1 2 3 4 5 ... 20
收藏数 581,853
精华内容 232,741