何为环境变量
环境变量(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;
}