• 菜鸟Linux(3):环境变量


     "Oh heiya New World!"


    一、什么是环境变量?

            谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时,启动一个进程,实质是在命令行解释器内 进行程序替换……

           环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 


    二、常见的环境变量

    (1)理解PATH

    我们在使用命令行解释器时,通常直接使用ls 、 pwd 、top 等等”命令"时 为什么不需要带"./"? 但是我们自己写的程序却需要这样呢?

    根本上不是说我们的程序 貌似更"低级",因为ls pwd top等命令也是可执行的文件,它们无非是在 用户登录时 已经就加载好了!并且能够找到该路径下的 可执行文件!

    1. //指定命令的搜索路径
    2. echo $PATH

    但那些配置的文件在哪里呢?

    1.“/etc/profile”文件,该文件配置的环境变量将应用于登录到系统的每一个用户;

    2.“/etc/bashrc”,修改该文件配置的环境变量将会影响所有用户使用的bash shell;

    3.“/etc/environment”,该文件包含与系统运行相关但与用户无关的环境变量;

    4.“~/.profile”;5、“~/.bashrc”。

    如何让自己的可执行程序 也成为系统命令那样跑?

    ①将自己的可执行文件 拷贝到 被填入进PATH里的路径下(不推荐);

     

    ②export导入该程序的路径(推荐);  

    (2)其余环境变量 

    ①HOME 

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

    ②SHELL

    SHELL : 当前Shell,它的值通常是/bin/bash 

    ③查看环境变量 

    1. //查看
    2. echo $环境变量名

    (3)定义环境变量 

    export: 设置一个新的环境变量

    env: 显示所有环境变量

    unset: 清除环境变量

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

    我们在命令行定义的变量,是本地变量;

    因此需要导入变量; 

    进行取消设置;


    三、进程内的环境变量

    上述仅仅从命令行解释器这个层面上,解释了环境变量。但是 环境变量是贯穿整个程序始终的全局变量。

    比如: 在一个受权限限制的文件,它是如何辨别谁可以对他进行什么合法操作 什么不合法?

              为什么不同的用户进行vim配置 会有对应不同的vim编辑器?

    (1)main函数的三参数

    int main(int argc,char *argv[],char *envp[])

    1. 为什么main函数会有三个参数?这三个参数是什么意思?

    2. main作为一个函数 是否应该被调用? 被谁调用呢?

    3. main函数的返回值是返回给谁的呢?

    C语言规定main函数是C程序的入口,程序中的其它函数直接或间接被main函数调用后才能被执行,如果没有被main调用,这个函数在程序中就是无用的。 

    在linux下 main函数的传参 是传给”子进程”的! 

     argc:表示运行程序的时给main函数传递参数的数量;

     argv:字符串的数组,向一个字符串,末尾为NULL结尾;

     envp:也是一个字符串的数组,以NULL结尾;

    多说无益,上来实操。

     所以,有时候我们就可以根据 传参的选项 执行不同 的代码逻辑;

    (2)环境变量 

    ①getenv 

    1. #include
    2. char *getenv(const char *name);

    ②main参数 与 全局指针environ

    命令行bash 为main创建子进程,子进程会继承父进程的环境变量。 这也是为什么 我们可以查看和 bash页面下 一样的环境变量。 

    一般推荐使用getenv 直接拿到想要的环境变量。

    ③进程内添加环境变量;

    1. #include
    2. int putenv(char *string);


    总结

    ①echo $+环境变量名 可以查看变量

    ②main的三个参数 

    ③getenv \envp[] \ char** envrion 都可以获取环境变量

  • 相关阅读:
    微服务开发系列 第五篇:Redis
    Verilog开源项目——百兆以太网交换机(二)AES加解密模块设计
    java游戏制作-拼图游戏
    webstrom 插件开发(二)
    专门为Web应用程序提供安全保护的设备-WAF
    用C#实现最小二乘法(用OxyPlot绘图)✨
    Java字符集/编码集
    英码科技推出鸿蒙边缘计算盒子:提升国产化水平,增强AI应用效能,保障数据安全
    AR眼镜_单目光波导VS双目光波导方案
    vue+echarts项目十二:使用webSocket优化项目:合并图表到一个页面并添加 切换主题和切换全屏功能
  • 原文地址:https://blog.csdn.net/RNGWGzZs/article/details/127985432