当前位置: 首页 > news >正文

Linux —— 环境变量

在这里插入图片描述

在这里插入图片描述


🎁个人主页:工藤新一¹

🔍系列专栏:C++面向对象(类和对象篇)

🌟心中的天空之城,终会照亮我前方的路

🎉欢迎大家点赞👍评论📝收藏⭐文章


文章目录

  • 环境变量
    • 一、概念介绍
      • 1.1 命令行参数
      • 1.2 环境变量
      • 1.3 认识更多的环境变量
      • 1.4 获得环境变量的方法
      • 1.5 环境变量的特性

环境变量

一、概念介绍

  • 环境变量(environment variables)⼀般是指在 OS中⽤来指定 OS运行环境的⼀些参数
  • 如:我们在编写 C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相 关环境变量 帮助编译器进行查找
  • 环境变量通常具有某些特用途,还有在系统当中通常具有全局特性

1.1 命令行参数

本质:使程序通过选项,实现不同子功能

  • argc:有效子串个数
  • argv[ ]:指针数组

在这里插入图片描述

./code:命令行参数的第一个参数


在这里插入图片描述


在这里插入图片描述


进程启动时,默认拥有一张表:argv,用来支持实现选项功能!


1.2 环境变量

执行命令之前[进程],必须要先找到它(由 bash 通过 环境变量[PATH] 进行查找工作)

PATH:默认存在于系统当中,系统搜索指令的默认搜索路径

系统当中存在环境变量(PATH),用来标识一串路径,以帮助我们找到目标二进制文件

在这里插入图片描述


在这里插入图片描述


我们自己写的二进制文件,没有经过测试的检验,强行放入系统路径下可能会污染系统原本的指令池

在这里插入图片描述


在这里插入图片描述


PATH:内存级别变量,关掉系统后自动恢复(相当于内部 malloc一段内存空间:将PATH的内容和字符串保存起来)

在这里插入图片描述


在这里插入图片描述


如何理解环境变量?存储角度?

首先环境变量由名称&&内容构成,但最终环境变量的值被 bash 存储;当我们登陆时,系统就会为我们创建 bash进程bash会从系统当中读取环境变量信息,并在 bash进程 内部形成一张 环境变量表


在这里插入图片描述


bash 内部有两张表:argv[]表 && 环境变量表

环境变量:key-val的常字符串

环境变量存储在 bash进程的上下文中(变量a在进程的上下文中)


环境变量的来源(来自于哪儿?)

来源:系统的相关配置文件

配置文件中会直接/间接包含所有环境变量中的数据内容,当 bash启动时会从配置文件中读取所有环境变量的值,并在自己内部创建环境变量表

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


最后,如果Linux系统中同时有10个用户登陆呢?所以此时存在几个 bash呢?

我们运行的系统命令的父进程都是 bash,那么Linux中有10个用户登陆就要存在10个bash!这10个bash 每一个都要从配置文件中读到自己的 bash上下文中,那么每个 bash中也都要存在两张表:命令行参数表 && 环境变量表

指令的查找工作也是由 bash自己完成的


1.3 认识更多的环境变量

在这里插入图片描述


在这里插入图片描述


**环境变量:**在 OS中⽤来指定 OS运行环境的⼀些参数

在这里插入图片描述


1.4 获得环境变量的方法

指令:

在这里插入图片描述


代码段:

方法一:

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


获取父进程(bash)的环境变量,且环境变量可以被子进程继承

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

在这里插入图片描述


那环境变量为什么可以被子进程继承?

方法二:getenv();系统调用

在这里插入图片描述


在这里插入图片描述


需求:定制一个只有我能执行的程序(哪怕是root都不行)

在这里插入图片描述


核心机制:环境变量的继承

答:因为我们可以将与环境变量相关的信息让子进程继承下去,子进程就可以结合环境变量来做个性化操作。比如:“定制一个只能让自己执行的程序

通过环境变量,我们可以做一些 “进程级的数据传递和控制”,进而可以控制我们子进程的控制逻辑

环境变量数据貌似,默认是被我们共享的,单有一方子进程想更改环境变量的数据会发生写实拷贝


方法三:全局指针environ

在这里插入图片描述
每个程序都会收到⼀张环境表,环境表是⼀个字符指针数组,每个指针指向⼀个以’\0’结尾的环境
字符串


在这里插入图片描述


在这里插入图片描述


推荐方法二,因为一三获取的是环境变量列表,而我们需要的实际是具体某一个环境变量方便我们操作


1.5 环境变量的特性

  • 环境变量具有全局性

本地变量:
在这里插入图片描述


环境变量在 bash 本地内部具有一定的功能性
在这里插入图片描述


在这里插入图片描述


环境变量其实是系统特定的全局变量,这些全局变量有特殊的用处,用来记录系统相关的信息(如:主机名?用户是谁?历史命令多少条?库/指令的所属路径是什么?)

所以,我们就理解了这些环境变量为什么能被我们的工具继承(gcc/g++),gcc/g++ 就可以拿着系统的环境变量去寻找动静态库,去做 C/C++ 的动态链接…


🌟 各位看官好我是工藤新一¹呀~

🌈 愿各位心中所想,终有所致!
在这里插入图片描述

http://www.xdnf.cn/news/1457605.html

相关文章:

  • mysql中find_in_set()函数的使用, ancestors字段,树形查询
  • AI视频画质提升效果实用指南:提升清晰度的完整路径
  • [论文阅读] 软件工程 | REST API模糊测试的“标准化革命”——WFC与WFD如何破解行业三大痛点
  • 【论文阅读】-《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》
  • AutoLayout与Masonry:简化iOS布局
  • (E题|AI 辅助智能体测)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 解密llama.cpp:Prompt Processing如何实现高效推理?
  • Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
  • Scikit-learn Python机器学习 - 特征预处理 - 归一化 (Normalization):MinMaxScaler
  • 孩子学手机里的坏毛病,怎样限制他打开某些APP?
  • Flutter 3.35.2 以上版本中 数字转字符串的方法指南
  • 机器学习基础-day05-深度学习框架PyTorch的tensor及PyTorch进行线性回归
  • 猫头虎AI 荐研|腾讯开源长篇叙事音频生成模型 AudioStory:统一模型,让 AI 会讲故事
  • 数据结构 之 【哈希的相关概念】
  • npm/pnpm软链接的优点和使用场景
  • 2025精选榜:4款好用的企业即时通讯软件推荐!安全有保障
  • 【Proteus仿真】AT89C51单片机中断系列仿真——INT0中断控制LED小灯/INT0和INT1中断控制数码管
  • 小白也能看懂,HTTP中的文件上传与下载到底发生了什么?
  • Spring 框架(IoC、AOP、Spring Boot) 的必会知识点汇总
  • 2025 年高教社杯全国大学生数学建模竞赛C 题 NIPT 的时点选择与胎儿的异常判定 完整成品思路模型代码分享,全网首发高质量!!!
  • 【笔记】AI Agent发展趋势
  • PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先
  • 异地多活架构:从“机房炸了”到“用户无感”的逆袭之路
  • Linux里面安装Genetic Algorithm Toolbox for MATLAB R2023b
  • unittest自动化测试框架详解
  • c# .net中using的使用
  • vue3入门- script setup详解下
  • (C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 信息化安全性测试中漏洞扫描的定义与核心目的
  • 【DINOv3教程2-热力图】使用DINOv3直接生成图像热力图【附源码与详解】