Linux环境变量

何为环境变量

  环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

Linux环境变量

  Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。在Linux中,环境变量一般用大写加下划线命名。环境变量相当于一个指针,查看指针指向值时需要解引用,所以查看环境变量的值时需在前面加上 $ 相当于解引用。
  Linux环境变量是一种全局变量,存在所有的shell中,一旦登录该系统就有了系统定义的环境变量。Linux环境变量具有继承性,即子进程会继承父进程的环境变量,Linux的本地变量的非环境变量不具有继承性。

Linux环境变量分类

  • 按照生命周期来分,Linux环境变量可以分为两类:
    1、永久的:需要用户修改相关的配置文件,变量永久生效。
    2、临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

  • 按照作用域来分,Linux环境变量可以分为:
    1、系统环境变量:系统环境变量对该系统中所有用户都有效。
    2、用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。

Linux环境变量使用

 1. Linux中常见的环境变量有:

  • PATH:指定命令的搜索路径

    描述

    如:当执行一个可执行程序时,系统会在这些目录中查找,找到之后执行程序,若未找到则不执行程序。

  • HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

    普通用户下:

    描述

    root用户下:

    描述

    随着用户的不同,环境变量的值不同。

  • HISTSIZE:指保存历史命令记录的条数

    描述

  • LOGNAME:指当前用户的登录名

    描述

  • HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的

    描述

  • SHELL:指当前用户用的是哪种Shell。

    描述

  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

    描述

    当前环境所用编码集是utf8,支持中文输入法。

  • MAIL:指当前用户的邮件存放目录

    描述

    (上述变量名字不固定)

 2.Linux下和环境变量相关的命令:

  • echo 显示某个环境变量值 ,如:echo $PATH
  • export 设置一个新的环境变量 ,如:export HELLO=”hello” (可以无引号)

    描述

  • env 显示所有环境变量,如:env | grep PATH

    描述

  • set 显示本地定义的shell变量和环境变量

    描述

  • unset 清除环境变量 ,如:unset HELLO

    描述

 3.系统调用获取或设置环境变量的函数:

  • getenv()返回一个环境变量。
  • setenv()设置一个环境变量。
  • unsetenv()清除一个环境变量。
#include <stdio.h>
#include <stdlib.h>

int main(){
    printf("%s\n",getenv("PATH"));
    return 0;
}

描述

此时需要./env才能执行程序,若想直接执行,则需要修改环境变量。

描述

因此时将PATH环境变量的值修改了,所以执行env后的结果也会发生变化。

通过代码获取环境变量

  • 命令行第三个参数
#include <stdio.h>

int main(int argc, char *argv[], char *env[]){
    (void)argc;
    (void)argv;
    int i = 0;
    for(; env[i]; ++i){
        printf("%s\n", env[i]);
    }
    return 0;
}
  • 通过第三方变量environ获取
#include <stdio.h>

int main(int argc, char *argv[]){
    (void)argc;
    (void)argv;
    extern char** environ;     //libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明
    int i = 0;
    for(; environ[i]; ++i){
        printf("%s\n", environ[i]);
    }
    return 0;
}

描述

猜你喜欢

转载自blog.csdn.net/adorable_/article/details/80208432