Linux中环境变量

ops/2024/10/19 1:50:06/

基本概念

环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。

我们在编写C、C++代码时候,在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊属性。还有在系统中通常具有全局特性。

main函数的参数

根据代码实例观察幂函数参数以及命令行参数列表之间的关系。可以想一想计算机的发展历史,Linux其实底层就是用c语言写的。那么各种指令也是要通过c语言写的,所以在命令行解释器中输入在命令行输入的一些指令。指令的选项,那么底层也是要通过Linux内核的指令可执行程序的main函数进行运行。

所以main函数参数:

  • 第一个参数:是一个整数,表示命令行参数的个数,包括程序名本身。
  • 第二个参数,参数向量是一个字符指针数组。argv[0]表示程序名,argv[1]表示第一个命令行参数,以此类推。
  • 第三个参数,envp环境变量指针数组部分系统存在。是一个字符串指针数组用来传递环境变量的信息,每一个字符串指向以'\0'结尾的字符串表示环境变量。

main函数参数存在的原因。同一个程序可以根据命令行参数根据选项的不同表现出不同的功能。

main函数参数是谁传递的

输入的指令就是字符串shell命令行解释器拿到字符串。按照空格打算形成一张argv表和元素个数argc表。argv整个表示以null结尾的命令行启动的程序。附近全都是shell启动的命令与shell命令行是父子关系。父子进程具有独立性,子进程继承父进程的代码数据各自私有一份,尤其是数据只是只读子进程也能看到。

编译器,操作系统,加载器不是互相割裂的,彼此是有关系的。

常见环境变量

Path指定命令的搜索路径。

为什么系统中的指令可以直接执行,不需要带路径,但是我们写的二进制程序就需要带路径才能执行。这是因为系统的指令所在的路径。是存在于环境变量中的path路径中的。

Home指定用户的主工作目录。即用户登录到Linux系统中时默认目录。

Shell当前shell它的值通常是/bin/bash。

查看环境变量方法

echo $环境变量名称

 

和环境变量相关的命令

Echo显示某个环境变量值。

echo $PATH

Export设置一个新的环境变量。

export a

 

更改环境变量

如果想要更改的环境变量永久存在,那么就要在配置文件中更改。

env显示所有环境变量。

Unset清除环境变量。

Set设置本地的shell变量和环境变量。

环境变量的组织方式

  • 环境变量最开始都是在系统的配置文件中的。
  • 登录系统启动一个shell进程操作系统读取用户和系统相关的环境变量的配置文件。
  • 但是自己形成环境变量表,然后由子进程进行读取。
  • 每个程序都会收到一张环境变量表,环境变量表是一个字符串指针数组,每一个指针指向以`/0´结尾的环境字符串。

通过代码如何获取环境变量

 命令行第三个参数

#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;
}

通过第三方变量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;
}

libc中定义的全局变量,environ指向环境变量表environ没有包含在任何头文件中,所以要使用时要加上extern声明。

通过系统调用获取设置环境变量

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

常用getenvputenv函数来访问特定的环境变量。 

环境变量通常是具有全局性的

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

环境变量可以被所有bash之后的进程全部看到,所以进全局环境变量具有全局属性。系统的配置信息,尤其是指导性的配置信息环境变量是系统配置起效的一种表现。进程具有独立性,环境变量可以用来进程之间传递数据。

  •  直接查看,发现没有结果,说明该环境变量根本不存在。
  • 导出环境变量
  • export MYENV="hello world" 再次运行程序,发现结果有了!说明环境变量是可以被子进程继承下去的! 

http://www.ppmy.cn/ops/122081.html

相关文章

linux性能分析常用工具和方法

查看程序信息 ulimit -c unlimited #记录 core top -Hp pid #查询进程pid每个线程的CPU占比ps p [pid] -L -o pcpu,pid,tid,time,tname,stat,psr |sort -n -k1 -r #查看进程内线程CPU占用率&#xff0c;包含tid pstack [pid] #查看进程内线程调用栈&#xff0c;可用上一步查到…

单目三d重建学习笔记2024

从单目视频生成动态多物体场景 已经开源&#xff1a; https://github.com/dreamscene4d/dreamscene4d 2021年&#xff1a; 浙大团队研发NeuralRecon&#xff0c;首个基于学习的实时单目三维重建系统 https://github.com/zju3dv/NeuralRecon https://github.com/zju3dv/Neura…

鸿蒙HarmonyOS之选择相册文件(照片/视频)方法

一、新建文件工具类FileUtil.ets 包含&#xff1a;选择照片方法、获取文件类型方法、去除后缀、获取后缀方法 import { BusinessError, request } from kit.BasicServicesKit; import photoAccessHelper from ohos.file.photoAccessHelper; import bundleManager from ohos.b…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

Hive数仓操作(八)

一、Hive中的分桶表 1. 分桶表的概念 分桶表是Hive中一种用于提升查询效率的表类型。分桶指的是根据指定列的哈希值将数据划分到不同的文件&#xff08;桶&#xff09;中。 2. 分桶表的原理 哈希分桶&#xff1a;根据分桶列计算哈希值&#xff0c;对哈希值取模&#xff0c;将…

Kafka快速实战与基本原理详解

笔记:https://note.youdao.com/ynoteshare/index.html?id=b0357bdb4821ed2e35ecdbdacd65aa06&type=note&_time=1727570043631 启动kafka之前先启动zookper 看看ZK里面都有什么数据 : 刚开始什么数据都没有 接下来启动kafka,启动好后,日志在这里看: 启动好了kaf…

Linux的基本指令(1)

前提&#xff1a; a&#xff1a;博主是在云服务器上进行操作的 b&#xff1a;windows上普通文件在Linux中也叫作普通文件&#xff0c;但是windows上的文件夹&#xff0c;在Linux中叫作目录 c&#xff1a;文件 文件内容 文件属性(创建时间&#xff0c;修改时间&#xff0c;…

[Docker学习笔记]利用Dockerfile创建镜像

Dockerfile 指令 指令作用from继承基础镜像maintainer镜像制作者信息(可缺省)run用来执行shell命令expose暴露端口号cmd启动容器默认执行的命令entrypoint启动容器真正执行的命令volume创建挂载点env配置环境变量add复制文件到容器copy复制文件到容器workdir设置容器的工作目录…