【Linux】环境变量相关笔记

echo $PATH

是用来查环境变量的

export

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

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

和环境变量相关的命令

  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[]是个指针数组,它存储的是个环境变量表,
在这里插入图片描述

  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 }

在这里插入图片描述

在这里插入图片描述

上面的图片和代码也就是说明了,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 }

在这里插入图片描述

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 }

在这里插入图片描述

在这里插入图片描述

su与su - 的区别:

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

export

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

在这里插入图片描述
添加到环境变量表中,
环境变量是可以被相关的子进程继承的,环境变量具有全局属性。
在这里插入图片描述

  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的作用就是将本地变量添加到环境变量表当中。
在这里插入图片描述

 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
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值