环境变量的知识
目录
1. 环境变量的概念
2. 命令行参数
2.1
2.2 创建 code.c 文件
2.3 对比 ./code 执行和直接 code 执行
2.4 怎么可以不带 ./
2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了
2.4.2 把我们自己的路径添加到环境变量里
3. 认识PATH
3.1 PATH 指定命令的搜索路径
env
环境变量是一个变量
怎么可以看一个环境变量的内容?
4. 多方面了解环境变量
4.1 从存储的角度理解环境变量
4.1.2 环境变量的值是bash保存起来的
4.2 环境变量的组织方式:
4.3 环境变量,最开始从哪里来的?
4.4 如果Linux系统中有10个用户登陆?
5. 认识更多环境变量
HOME
SHELL :
HISTSIZE
HOSTNAME
PWD
6. 获取环境变量的方法
6.1 操作:
6.2 代码获取环境变量
6.2.1 方法1:main 函数获取环境变量
6.2.2 方法2: getenv 可以获得指定环境变量的内容
6.2.3 方法3:通过第三方变量 environ 获取
7.理解环境变量的特性
7.1 环境变量具有全局特性
7.1.1 环境变量可以被子进程继承
7.1.2 环境变量可以被子进程继承 ,为什么?
7.1.2.1 我们这里写一个程序只允许我们自己执行
7.2 补充:
7.2.1 : 本地变量
7.2.1.1 本地变量在bash内部具有一定的功能性
7.2.1.2 eg:续行
7.2.2 可以export导出为环境变量,env就可以显示了
7.2.2.1 内建命令
1. 环境变量的概念
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
2. 命令行参数
2.1



2.2 创建 code.c 文件


有选项?
main 函数是可以带命令行参数的,所以可以让我们的各种指令带选项
我们的命令行参数最终就是一个指针数组,所有的命令都是通过我们的main函数参数实现的
2.3 对比 ./code 执行和直接 code 执行
执行我们的命令的时候要带上 ./ ,执行系统命令的时候不需要带 ./ ?
-->
执行我们的命令的时候要带上 ./ :
我们要执行一个程序必须要先找到它
要找到它所以我们运行我们自己的程序时我们要 ./
表明我们要执行的程序在当前路径下
执行系统命令的时候不需要带 ./ :
因为系统当中存在环境变量,来帮助我们找到目标二进制文件
./ 告诉我们路径,不带 ./ 就是在环境变量里面找
2.4 怎么可以不带 ./
2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了


这样就可以不带路径让我们的程序运行了
2.4.2 把我们自己的路径添加到环境变量里
把我们自己的路径添加到环境变量里,我们是不是就不用拷贝二进制文件了?二进制文件运行时就能直接被找到了
-->
怎么添加?
-->
如果我们直接给PATH赋值的话,是覆盖的,只会剩下我们赋值的路径,系统路径就没有了
用 :分割的一个一个的子路径就是用来查找可执行程序所对应的路径,把路径一个一个地去遍历查找
-->
怎么添加不会覆盖?
-->
类似于+=

3. 认识PATH
3.1 PATH 指定命令的搜索路径
我们这里看一个环境变量 ,这个环境变量叫做PATH
-->
在系统下是存在的,用来标识一串路径
告诉系统去那些路径下去找二进制文件
env
罗列系统当中所有的环境变量
环境变量是一个变量
-->构成?
名字=内容

怎么可以看一个环境变量的内容?
根据名字来获得环境变量的内容
也可以是 echo $XXX

所以把我们的code拷贝到 usr/bin 路径下就可以直接被找到了
4. 多方面了解环境变量
4.1 从存储的角度理解环境变量
4.1.2 环境变量的值是bash保存起来的
环境变量的值是bash保存起来的,我们执行命令时也是bash来找我们的命令的
一旦我们登陆的时候,系统就会给我们创建一个bash进程,bush必须从系统当中去读取我们的环境变量的信息,然后在bash进程内部形成一张表 ---> 环境变量表(就是一个指针数组的样子)

全都是这同样结构的表所对应的字符串
bash在启动的时候,它会想办法去帮我们在自己bash内部newmalloc出一段空间,然后再给每个环境变量newmalloc出一段空间形成一个二维数组,然后再把环境变量字符串依次拷贝到这个表里面,bash就在内部维护了这张表,所以我们env查的时候就打印了这张表的内容
4.2 环境变量的组织方式:
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以 ’\0‘ 结尾的环境字符串

4.3 环境变量,最开始从哪里来的?
是从系统的配置文件中来的

4.4 如果Linux系统中有10个用户登陆?
10个bash
这10个bash进程每一个都要从配置文件中读到自己的bash上下文里
所以每一个bash里面都存在两张表
指令的查找工作是由bash自己完成的
执行一个程序要先找到它-->bash找-->通过 PATH(环境变量)来找
5. 认识更多环境变量
HOME
其他环境变量 HOME
当前用户所对应的家目录
bash所形成的环境变量表里面就有一个环境变量叫做HOME

SHELL :
当前Shell,通常是/bin/bash

HISTSIZE
记录1000条我们对应的环境变量

HOSTNAME
我们当前主机的主机名

PWD

6. 获取环境变量的方法
6.1 操作:
env 查看所有环境变量
echo $XXX 查看某个环境变量的内容
export 设置一个新的环境变量
export 变量名=值
unset 清除环境变量
unset 变量名
6.2 代码获取环境变量
6.2.1 方法1:main 函数获取环境变量


6.2.2 方法2: getenv 可以获得指定环境变量的内容



6.2.3 方法3:通过第三方变量 environ 获取

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


7.理解环境变量的特性
7.1 环境变量具有全局特性
7.1.1 环境变量可以被子进程继承
环境变量在系统中通常具有全局特性
导出为环境变量(导入到父进程)


7.1.2 环境变量可以被子进程继承 ,为什么?
因为我们可以把环境变量的相关信息让子进程继承下去,子进程就可以结合环境变量来做个性化操作
7.1.2.1 我们这里写一个程序只允许我们自己执行
想写一个程序只允许我们一个人使用 ,怎么做?
只有bash知道我们当前的登陆用户是谁



7.2 补充:
7.2.1 : 本地变量
本地变量不会被子进程继承,只在bash内部被使用

env不会显示本地变量

set 会显示环境变量和本地变量
bash 会记录两套变量,环境变量和本地变量
7.2.1.1 本地变量在bash内部具有一定的功能性
很多本地变量在bash内部具有一定的功能性,按照我们的期望输出一些格式
7.2.1.2 eg:续行

因为 我们 set 之后,可以找到这个本地变量的
![]()
![]()
unset 变量名

7.2.2 可以export导出为环境变量,env就可以显示了
-->
7.2.2.1 内建命令
我们的环境变量是在bash里面,bash里的环境变量可以由子进程继承
我们export怎么可以给bash?
export是一个特殊命令 --> 内建命令 这种命令执行时不需要创建子进程,而是让bash自己执行(bash自己调用函数,或者系统调用完成)

相关文章:
环境变量的知识
目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…...
ATECLOUD测试平台有哪些功能?
测试方案搭建 可视化拖拽编程:采用零代码的图文拖拽形式,用户通过鼠标拖拽节点和连线,即可可视化地构建测试模型,无需懂得代码开发,15 分钟左右就能快速搭建项目,大大降低了上手门槛。 子项目多层嵌套&am…...
使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘
环境:windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui ,main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错,运行报错。 错误如下: 解决方法:pyinstaller -Fw main.py --paths. 使…...
搭建分布式Spark集群
title: 搭建分布式Spark集群 date: 2024-11-29 12:00:00 categories: - 服务器 tags: - Spark - 大数据搭建分布式Spark集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、scala-2.11.5、Spark-3.2.1 功能规划 MasterSlave1Slave2主节点…...
Django基础 - 01入门简介
一、 基本概念 1.1 Django说明 Django发布于2005年, 网络框架, 用Python编写的开源的Web应用框架。采用了MVC框架模式,也称为MTV模式。官网: https://www.djangoproject.com1.2 MVC框架 Model: 封装和数据库相关…...
简单的bytebuddy学习笔记
简单的bytebuddy学习笔记 此笔记对应b站bytebuddy学习视频进行整理,此为视频地址,此处为具体的练习代码地址 一、简介 ByteBuddy是基于ASM (ow2.io)实现的字节码操作类库。比起ASM,ByteBuddy的API更加简单易用。开发者无需了解class file …...
【服务端】Redis 内存超限问题的深入探讨
在 Java 后端开发中,Redis 内存超限是一个常见的问题,可能由多种原因引起。理解这些原因以及如何处理已经超出限制的数据对于保持系统的稳定性和性能至关重要。 一、Redis 内存超限的原因分析 Redis 是一个高性能的内存键值对存储系统,它在…...
Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)
全部配置 logback.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><property name"LOG_HOME" value"log"/><property name"LOG_NAME" value"admin"/&g…...
《计算机组成及汇编语言原理》阅读笔记:p1-p8
《计算机组成及汇编语言原理》学习第 1 天,p1-p8 总结,总计 8 页。 一、技术总结 1.Intel 8088 microprocessor(微处理器), 1979-1988。 2.MS-DOS Microsoft Disk Operating System的缩写,是一个操作系统(operating system)。…...
【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现
一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…...
在 Ubuntu 上安装 MySQL 的详细指南
在Ubuntu环境中安装 mysql-server 以及 MySQL 开发包(包括头文件和动态库文件),并处理最新版本MySQL初始自动生成的用户名和密码,可以通过官方的APT包管理器轻松完成。以下是详细的步骤指南,包括从官方仓库和MySQL官方…...
Java 优化springboot jar 内存 年轻代和老年代的比例 减少垃圾清理耗时 如调整 -XX:NewRatio
-XX:NewRatio 是 Java Virtual Machine (JVM) 的一个选项,用于调整 年轻代(Young Generation)和 老年代(Old Generation)之间的内存比例。 1. 含义 XX:NewRatioN 用于指定 老年代 与 年轻代 的内存比例。 N 的含义&…...
嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏
eDP是嵌入式显示端口,具有高数据传输速率,高带宽,高分辨率、高刷新率、低电压、简化接口数量等特点。现大多数笔记本电脑都是用的这种接口。整个eDP是很复杂的,这里我们不讲底层原理,我们先掌握如何用泰山派来驱动各种…...
在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。
在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。以下是关于这两种方法的详细解释: 一、虚方法(Virtual Method) 定义:虚方法是指在运行时由实例的实际类型决定的方法。在Java中,所有的非私有、非静态、非final方法都是虚方法。当调用一个虚方法时,JVM会根据实…...
【windows】sonarqube起不来的问题解决
1. 现象与本质 因JDK的问题(比如版本太低或者太高,推荐JDK17)或者其他环境因素,导致sonarqube启动后自动关闭了。 从日志来看,根本看不出来什么,只有警告,没有ERROR,警告也不是本质问题&#…...
golang异常
panic如果不处理会导致应用进程挂掉 defer recover可以处理这种情况 一个recover只处理自己协程 产生panic的情况 空指针 数组越界 空map中添加键值对 错误,error接口,不严重 error.wrapof解决嵌套问题或者error.unwrap erroe.is方法,判断是…...
搭建MongoDB
title: 搭建MongoDB date: 2024-11-30 23:30:00 categories: - 服务器 tags: - MongoDB - 大数据搭建MongoDB 环境:Centos 7-2009 1. 创建MongoDB的国内yum源 # 下载Centos7对应最新版7.0.15的安装包 cat >> /etc/yum.repos.d/mongodb.repo << &quo…...
Android中坐标体系知识超详细讲解
说来说去都不如画图示意简单易懂啊!!!真是的! 来吧先上张图! (一)首先明确一下android 中的坐标系统: 屏幕的左上角是坐标系统原点(0,0) 原点向右延伸是X轴正…...
不需要服务器,使用netlify快速部署自己的网站
Netlify简介 1.1 Netlify的功能与特点 Netlify 是一个功能强大的静态网站托管平台,它不仅提供了简单的网站部署功能,还集成了许多现代化的开发工具和服务,帮助开发者更高效地构建、部署和管理网站。Netlify 的核心功能包括: 自动…...
Swin transformer 论文阅读记录 代码分析
该篇文章,是我解析 Swin transformer 论文原理(结合pytorch版本代码)所记,图片来源于源paper或其他相应博客。 代码也非原始代码,而是从代码里摘出来的片段,配上简单数据,以便理解。 当然&…...
御坂翻译器:5分钟快速上手,让Galgame翻译不再困扰你
御坂翻译器:5分钟快速上手,让Galgame翻译不再困扰你 【免费下载链接】MisakaTranslator 御坂翻译器—Galgame/文字游戏/漫画多语种实时机翻工具 项目地址: https://gitcode.com/gh_mirrors/mi/MisakaTranslator 你是否曾因语言障碍而错过精彩的Ga…...
如何用baidupankey工具实现百度网盘提取码10秒智能查询
如何用baidupankey工具实现百度网盘提取码10秒智能查询 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要提取码的资源,都要在多个网站间来回搜索&a…...
嵌入式扫码模组:POS机核心部件技术解析与选型指南
1. 项目概述:固定式POS机里的“眼睛”与“大脑”如果你拆开过一台超市、便利店或者餐厅里常见的固定式POS机,可能会发现一个有趣的现象:那个用来扫商品条码的“窗口”或“枪口”,其内部结构远比我们想象的要精密。它不是一个简单的…...
Vue2项目里,如何用DHTMLX Gantt实现任务搜索、今日线定位和视图切换?这些实用功能我帮你搞定了
Vue2项目中DHTMLX Gantt三大进阶功能实战:搜索、今日线与视图切换 在项目管理工具的开发中,甘特图作为核心可视化组件,其交互体验直接决定了用户的使用效率。本文将聚焦三个高频需求场景,手把手教你如何在已有DHTMLX Gantt集成的V…...
网盘下载新革命:一劳永逸的直链解析方案
网盘下载新革命:一劳永逸的直链解析方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云…...
实战-Spine动画与UI元素的层级穿插艺术
1. Spine动画与UI层级穿插的核心挑战 在2D游戏开发中,角色动画和UI元素的视觉层级管理是个高频痛点。我遇到过最典型的场景是:当角色装备武器时,武器需要插入到手臂和身体之间;释放技能时,特效又要在特定骨骼层级间动态…...
强化学习在双摆控制中的应用与挑战
1. 双摆控制中的强化学习挑战双摆系统是控制理论中经典的欠驱动非线性系统,由两个通过关节连接的刚性杆组成,仅有一个关节可施加驱动力。这种系统表现出丰富的动力学特性,包括混沌行为和高度敏感性,使其成为测试控制算法的理想平台…...
Codex 小步迭代详解与操作指南
1. 文档目标 这份文档的目标,是帮助你从“一步到位思维”切换到“小步迭代思维”。 读完之后,你应该能够: 理解为什么 Codex 更适合小步迭代,而不是一次性大改掌握一套稳定的小步迭代操作流程知道每一步应该让 Codex 做多大范围的…...
离开Meta后田渊栋官宣创业,估值达46.5亿美元;17个小时谈判破裂,三星电子5万名员工或将罢工;微软纳德拉官宣MDASH框架 | 极客头条
「极客头条」—— 技术人员的新闻圈!CSDN 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:zhanghycsdn.net)整理 | 郑丽媛出品 | CSDN(I…...
别再手动写CSS了!用Vue3 + Tailwind CSS 5分钟搞定一个响应式卡片组件
用Vue3与Tailwind CSS极速构建响应式卡片组件的实战指南 前端开发领域正在经历一场效率革命。过去需要数小时才能完成的UI组件开发,如今借助现代工具链可以在几分钟内实现。本文将带你体验如何通过Vue3的单文件组件特性与Tailwind CSS的实用优先(Utility-First)方法…...
