【Linux】环境变量相关笔记

news2024/9/19 21:44:37

文章目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu 20.04设置开机自启动脚本

1 建立开机启动服务 在 路径下 /lib/systemd/system/rc-local.service 的 rc-local.service 的脚本&#xff0c;内容规定了 rc.local 的启动顺序和行为 这行代码规定了这个service在开机启动时所执行的命令是&#xff1a;/etc/rc.local start。即运行 /etc/rc.local 脚本。不过…

《面试1v1》HashMap

没有人比中国人更懂 HashMap 我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a;HashMap 是Java程序员用得最频繁的集合之一,可以给我简单介绍一下它的内部实现机制吗? 候选人&#xff1a; Hash…

C++ -3- 类和对象 (中) | 拷贝构造函数 赋值运算符重载

文章目录 4.拷贝构造函数什么是拷贝构造函数&#xff1f;应用——示例&#xff1a;日期计算器什么情况下需要自己实现拷贝构造函数&#xff1f; 5.赋值运算符重载运算符重载&#xff08;重要&#xff09;赋值运算符重载 拷贝构造函数和赋值重载函数 4.拷贝构造函数 什么是拷贝…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16格式位深度的图像保存(C++)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16位深度的图像保存&#xff08;C&#xff09; Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1&#xff1a;引用合适的类文件2&#xff1a;BGAPI SDK在图像回调中联合OpenCV保…

Effective C++条款条款42:了解typename的双重意义(Understand the two meanings of typename)

Effective C条款条款42&#xff1a;了解typename的双重意义&#xff08;Understand the two meanings of typename&#xff09; 条款42&#xff1a;了解typename的双重意义1、从属名称和非从属名称2、typename在traits机制中的运用3、牢记 总结 《Effective C》是一本轻薄短小的…

1.17 从0开始学习Unity游戏开发--场景切换

前面的所有文章我们都在一个固定的游戏场景内进行开发&#xff0c;在最开始介绍场景这个概念的时候就已经提及&#xff0c;这个场景可以是一张地图&#xff0c;或者是一个对战房间等等&#xff0c;所以显然这个场景可以有多个&#xff0c;并且可以从一个场景切换到另外一个场景…

Collection接口

文章目录 1. Java集合框架概述2. Collection接口中15个方法的使用3. Iterator(迭代器)接口4. Connection子接口一&#xff1a;List4.1 List的实现类4.2 源码分析4.2.1 ArrayList源码分析4.2.2 LinkedList源码分析4.2.3 Vector源码分析 4.3 List接口中的常用方法 5. Collection子…

死锁---银行家算法例题

1、知识点 1.银行家算法使用的四个必要的数据结构是: 可用资源向量Available&#xff0c;最大需求矩阵Max&#xff0c;分配矩阵Allocation&#xff0c;需求矩阵Need。 2.银行家算法是不是破坏了产生死锁的必要条件来达到避免死锁的目的&#xff1f;若是&#xff0c;请简述破…

【数字 IC / FPGA】 有关建立/保持时间计算的思考

引言 最近准备一些数字IC的机试&#xff0c;刷到了一些有关静态时序分析的题目。有一些比较经典的题目&#xff0c;在这里整理分享一下。 有什么疑问可以在评论区交流~互相进步 双D触发器典型电路 假设时钟周期为Tcycle,Tsetup,Thold分别为触发器建立保持时间&#xff0c;为…

Mac OS挂载ext4硬盘

一、安装macFUSE Home - macFUSE 如下载macfuse-4.4.3dmg安装 安装过程可能会遇到“若要要启用系统扩展,您需要在恢复环境中修改安全性设置”的提示&#xff0c;如下图&#xff1a; 解决&#xff1a; 关机&#xff0c;直到键盘灯全灭了&#xff01; 再按住开机键&#xff0c…

机器视觉技术分享-彩色图像处理 含c++ ,python代码说明

彩色图像处理是指对彩色图像进行数字处理和分析的过程&#xff0c;其目的是提取图像的有用信息&#xff0c;改善图像质量&#xff0c;实现图像的增强、复原、分割、匹配、识别等功能。 针对彩色图像处理&#xff0c;可以采用以下一些常见的方法&#xff1a; 1. 颜色空间转换&…

简简单单认识一下Inscode

CSDN最新推出的Inscode服务是一个在线编程工具&#xff0c;旨在为开发者提供一个便捷的编写、运行和分享代码的环境&#xff0c;让开发者无需在本地搭建编程环境&#xff0c;即可快速编写和运行代码。 Inscode支持多种编程语言&#xff0c;包括Java、Python、C等&#xff0c;同…

C语言进阶之回调函数详解分析方法

一、函数指针 在讲回调函数之前&#xff0c;我们需要了解函数指针。 我们都知道&#xff0c;C语言的灵魂是指针&#xff0c;我们经常使用整型指针&#xff0c;字符串指针&#xff0c;结构体指针等。 int *p1; char *p2; STRUCT *p3; // STRUCT为我们定义的结构体 但是好像我…

PlumGPT【告别梯子,拥抱AI】

相信很多人苦于没有openai账号或者有着种种原因至今还没有使用过chatgpt&#xff0c;今天向大家推荐一个网站&#xff0c;在国内也可以任意方便使用&#xff0c;让你的办公效率最大化。 那就是PlumGPT&#xff1a;https://plumgpt.com/ PlumGPT&#xff08;国内版的chatgpt&a…

Mybatis分页实现

1. Rowbounds Rowbounds将所有符合条件的数据加载到内存&#xff0c;然后再实现逻辑切割。 Override public List<User> getAllUser() {RowBounds rowBounds new RowBounds(1, 2);return userMapper.getAllUser(rowBounds); }查询sql&#xff08;没有任何分页逻辑&…

【Redis】常用命令、各种数据结构及命令

目录 一、常见数据结构 二、常用命令 1、查询符合的所有key 2、删除key 3、判断key是否存在 4、给key设置过期时间 5、查看key的剩余过期时间 三、不同数据类型的操作命令 1、String 1.set 2.get 3.mset 4.mget 5.incr 6.incrby 7.incrbyfloat 8.setnx 9.se…

C++——内存分配与动态内存管理

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;C/C内存分布&#x1f33a;牛刀小试&#x1f33a;C语言动态内存管理&#x1f337;C动态内存管理&#x1f33a;对于内置类型&#x1f33a;对于自定义类型&#x1f337;operator new与operator delete函数&#x…

便携式明渠流量计有哪几种呢?

便携式明渠流量计有几种&#xff1f; 目前来说市面上是有两种&#xff0c;但最终的作用或者说是功能都是用来和明渠在线流量计做液位和流量比对的一种装置。 这两种有什么区别呢&#xff1f; 一种就是便携式明渠流量计磁致伸缩流量计&#xff0c;另一种就是便携式明渠超声波…

浅析EasyCVR基于B/S架构的技术特点与能力应用

EasyCVR基于云边端协同&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台兼容性强、拓展度高&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等功能。 EasyCVR视频融合平台采用…

【MyBatis Plus】004 -- MyBatis Plus高级(AR、MP插件、自定义全局操作、自动填充、逻辑删除、枚举、代码生成器)

目录 1、ActiveRecord 1.1 开启AR之旅&#xff08;根据主键 id 进行查询&#xff09; 1.2 新增数据 1.3 更新操作 1.4 删除操作 1.5 根据条件查询 2、Oracle 主键 Sequence 2.1 部署Oracle环境 2.2 创建表以及序列 2.3 jdbc驱动包 2.4 修改application.properties 2.5 配置序列…