Linux---环境变量

基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,通常具有全局属性。
例如:当我们在写c/c++代码时,我们并不知道所链接的动态静态库在哪里,但照样可以链接成功。这是因为有相关环境变量帮助编译器进行查找。

常见的环境变量

·PHAT*:指定命令的搜索路径
·HOME*:指定用户的主工作目录(及用户登陆到Linux系统中时,默认的目录)
·HISTSIZE*:指保存历史命令记录的条数
·SHELL*:当前的Shell,它的值通常是/bin/bash

查看环境变量的方法

[admin@localhost test]$ echo $HOME  //HOME表示你要查看的环境变量名称
/home/admin

测试PATH
先编写一个hello.c文件

#include<stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

执行代码:
这里写图片描述
我们发现我们自己编写的代码执行时要加 ./ ,而在命令行敲其他命令时并不需要。这是为什么呢?原因在于操作系统将那些我们常用的命令放在了一个指定的目录下,我们需要时就可以直接执行。

通过查看和搜索路径有关的环境变量:
这里写图片描述
可以看出这些路径以冒号隔开,那试想,我们可不可以将我们写的代码的路径添加到PATH中,让我们的代码也可以执行运行。答案是可以的。
这里写图片描述
从上图可以看出通过修改PATH环境变量可以让我们的代码直接运行了。
还有一种方法,就是将我们的可执行程序拷到PATH的任意目录下,看看可不可行:
这里写图片描述
这种操作只能切换到root用户才可以,毕竟我们写的代码有可能有风险,随意添加到系统目录中可能会造成一定的危害。所以建议大家不要随意往系统目录中添加东西。

测试HOME
通过下面的例子来对比:
在普通用户下查看HOME环境变量
这里写图片描述
root用户下查看
这里写图片描述
普通用户下进入家目录
这里写图片描述
切换到root用户执行上述操作
这里写图片描述
我们发现HOME环境变量就等同于 ~,它两内容也一样。

测试HISTSIZE
这里写图片描述
说明当前保存历史记录命令条数最大为1000条

和环境变量有关的命令

1.echo:显示某个环境变量值
2.export :设置一个新的环境变量
3.env:相似所有环境变量
4.unset:清除环境变量
5.set:显示本地定义的shell变量和环境变量

获取环境变量的方法
1.通过命令行第三个参数

#include<stdio.h>

int main(int argc,char* argv[],char* env[])
{
    int i = 0;
    for( ;env[i];i++)
    {
        printf("%s\n",env[i]);
    }
    return 0;
}

2.通过第三方变量environ获取

#include<stdio.h>
int main(int argc,char* argv[])
{
    extern char** environ;
    int i = 0;
    for( ;environ[i];i++)
    {
        printf("%s\n",environ[i]);
    }
    return 0;
}

3.通过getpath系统调用获取

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

环境变量通常具有全局属性
环境变量通常具有全局属性,可以被子进程继承下去

#include<stdio.h>

#include<stdlib.h>
int main()
{
    char *env = getenv("MYENV");
    if(env)
    {
        printf("%s\n",env);
    }
    return 0;
}

运行,发现没有结果,说明该环境变量不存在
这里写图片描述
通过export 命令修改了环境变量,这下可以执行了。说明,环境变量可以被继承。

想了解更多的,大家可以参考《UNIX环境高级编程》第7章进程环境来学习。

猜你喜欢

转载自blog.csdn.net/y6_xiamo/article/details/80148595