> 文章列表 > 【Linux】环境变量相关笔记

【Linux】环境变量相关笔记

【Linux】环境变量相关笔记

文章目录

      • echo $PATH
      • export
      • 环境变量相关的命令
      • main(int argc,char* argv[],char *env[])三个参数介绍
      • getenv()通过系统调用获取
      • su与su - 的区别:
      • export
      • source 和 .
      • 优先级

echo $PATH

是用来查环境变量的

export

从下面的图片当中可以看到,的确是将文件test的路径添加到环境变量当中了。也是能不用使用./来执行文件了,也可以向ls命令一样直接使用了,但是这里出现了问题就是别的命令并不能使用了。因为使用了export是将环境变量里的路径进行覆盖,并不是进行添加在后面。解决的办法就是将自己的xshall完全退出重新登陆。

【Linux】环境变量相关笔记
下面的图片就是将自己的路径添加到环境变量当中,并不是覆盖。
这样之后就不需要在使用./也可以像ls指令一样进行使用,
当然并不只是添加路径唯一的方法,也可以将自己的可执行程序进行mv到环境变量的路径下。
在windows中安装软件的的过程就是将可执行文件,配置文件全都拷贝到系统的特定路径下
【Linux】环境变量相关笔记
查看用户名
【Linux】环境变量相关笔记
查看系统的环境变量
env
【Linux】环境变量相关笔记

和环境变量相关的命令

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

main(int argc,char* argv[],char *env[])三个参数介绍

在平时写代码时,main的参数是隐藏的char* env[]==char *env
char
env[]是个指针数组,它存储的是个环境变量表,
【Linux】环境变量相关笔记

  1 #include<stdio.h>2 #include<unistd.h>3 4 int main()5 {6   extern char **environ;7   for(int i=0;environ[i];i++)8   {9     printf("environ[%d]=%s\\n",i,environ[i]);                                                                                                                                                 10   }11 12   return 0;13 }

environ也是可以直接使用man指令查的,man environ

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 6 int main(int argc,char* argv[])7 {8   for(int i=0;i<argc;i++)9   {10     printf("argv[%d]->%s\\n",i,argv[i]);                                                                                                                                                      11   }12   return 0;13 }

【Linux】环境变量相关笔记

【Linux】环境变量相关笔记

上面的图片和代码也就是说明了,argc当中存放的是参数的个数和可执行程序的个数,
而argv当中存放的是可执行程序的地址,和参数的地址。

下面是参数的意义

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 void Usage(const char *name)6 {7     printf("\\nUsage: %s -[a|b|c]\\n\\n", name);8     exit(0); // 终止进程9 }10 int main(int argc, char *argv[])11 {12 13     if(argc != 2) Usage(argv[0]);14 15     if(strcmp(argv[1], "-a") == 0) printf("打印当前目录下的文件名\\n");16     else if(strcmp(argv[1], "-b") == 0) printf("打印当前目录下的文件的详细信息\\n");17     else if(strcmp(argv[1], "-c") == 0) printf("打印当前目录下的文件名(包含隐藏文件)\\n");18     else printf("其他功能,待开发\\n");                                                                                                                                                       19     return 0;20 }

【Linux】环境变量相关笔记

getenv()通过系统调用获取

man同样是可以查到它的用法

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 6 #define NAME "zzm"7 8 int main()9 {15   char *own=getenv("USER");                                                                                                                                                                  16   if( strcmp (own,NAME) == 0)17   {18     printf("当前程序已经执行");19   }20   else{21     printf("当前用户非法%s",own);22   }23   return 0;24 }

【Linux】环境变量相关笔记

【Linux】环境变量相关笔记

su与su - 的区别:

所以su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。

export

这里可以理解export把环境变量添加到内存当中,毕竟当我们重启时添加的环境变量就消失了。

【Linux】环境变量相关笔记
添加到环境变量表中,
环境变量是可以被相关的子进程继承的,环境变量具有全局属性。
【Linux】环境变量相关笔记

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 6 #define NAME "zzm"7 8 int main()9 {10   printf("myenv=%s",getenv("hello"));                                                                                                                                                        24   return 0;25 }

而当我们并不使用export的时候,并没有将hello1添加到环境变量表当中,只是添加到了本地。
本地变量只对shell内部有效,
所以export的作用就是将本地变量添加到环境变量表当中。
【Linux】环境变量相关笔记

 1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 #include<string.h>5 6 #define NAME "zzm"7 8 int main()9 {10   printf("myenv=%s",getenv("hello1"));                                                                                                                                                        24   return 0;25 }

source 和 .

source是和.是一样的。

..bash_profile==source .bash_profile
是让bash_profile中的环境变量立刻生效

优先级

PRI的起始值是80,NI是修正值,当NI=-5,PRI=75,NI=15,PRI=95
NI的范围是在-20-19
PRI的范围60-99
【Linux】环境变量相关笔记