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

环境变量的知识

目录

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 天&#xff0c;p1-p8 总结&#xff0c;总计 8 页。 一、技术总结 1.Intel 8088 microprocessor(微处理器)&#xff0c; 1979-1988。 2.MS-DOS Microsoft Disk Operating System的缩写&#xff0c;是一个操作系统(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 开发包&#xff08;包括头文件和动态库文件&#xff09;&#xff0c;并处理最新版本MySQL初始自动生成的用户名和密码&#xff0c;可以通过官方的APT包管理器轻松完成。以下是详细的步骤指南&#xff0c;包括从官方仓库和MySQL官方…...

Java 优化springboot jar 内存 年轻代和老年代的比例 减少垃圾清理耗时 如调整 -XX:NewRatio

-XX:NewRatio 是 Java Virtual Machine (JVM) 的一个选项&#xff0c;用于调整 年轻代&#xff08;Young Generation&#xff09;和 老年代&#xff08;Old Generation&#xff09;之间的内存比例。 1. 含义 XX:NewRatioN 用于指定 老年代 与 年轻代 的内存比例。 N 的含义&…...

嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏

eDP是嵌入式显示端口&#xff0c;具有高数据传输速率&#xff0c;高带宽&#xff0c;高分辨率、高刷新率、低电压、简化接口数量等特点。现大多数笔记本电脑都是用的这种接口。整个eDP是很复杂的&#xff0c;这里我们不讲底层原理&#xff0c;我们先掌握如何用泰山派来驱动各种…...

在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。

在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。以下是关于这两种方法的详细解释: 一、虚方法(Virtual Method) 定义:虚方法是指在运行时由实例的实际类型决定的方法。在Java中,所有的非私有、非静态、非final方法都是虚方法。当调用一个虚方法时,JVM会根据实…...

【windows】sonarqube起不来的问题解决

1. 现象与本质 因JDK的问题&#xff08;比如版本太低或者太高,推荐JDK17&#xff09;或者其他环境因素&#xff0c;导致sonarqube启动后自动关闭了。 从日志来看&#xff0c;根本看不出来什么&#xff0c;只有警告&#xff0c;没有ERROR&#xff0c;警告也不是本质问题&#…...

golang异常

panic如果不处理会导致应用进程挂掉 defer recover可以处理这种情况 一个recover只处理自己协程 产生panic的情况 空指针 数组越界 空map中添加键值对 错误&#xff0c;error接口&#xff0c;不严重 error.wrapof解决嵌套问题或者error.unwrap erroe.is方法&#xff0c;判断是…...

搭建MongoDB

title: 搭建MongoDB date: 2024-11-30 23:30:00 categories: - 服务器 tags: - MongoDB - 大数据搭建MongoDB 环境&#xff1a;Centos 7-2009 1. 创建MongoDB的国内yum源 # 下载Centos7对应最新版7.0.15的安装包 cat >> /etc/yum.repos.d/mongodb.repo << &quo…...

Android中坐标体系知识超详细讲解

说来说去都不如画图示意简单易懂啊&#xff01;&#xff01;&#xff01;真是的&#xff01; 来吧先上张图&#xff01; &#xff08;一&#xff09;首先明确一下android 中的坐标系统&#xff1a; 屏幕的左上角是坐标系统原点&#xff08;0,0&#xff09; 原点向右延伸是X轴正…...

不需要服务器,使用netlify快速部署自己的网站

Netlify简介 1.1 Netlify的功能与特点 Netlify 是一个功能强大的静态网站托管平台&#xff0c;它不仅提供了简单的网站部署功能&#xff0c;还集成了许多现代化的开发工具和服务&#xff0c;帮助开发者更高效地构建、部署和管理网站。Netlify 的核心功能包括&#xff1a; 自动…...

Swin transformer 论文阅读记录 代码分析

该篇文章&#xff0c;是我解析 Swin transformer 论文原理&#xff08;结合pytorch版本代码&#xff09;所记&#xff0c;图片来源于源paper或其他相应博客。 代码也非原始代码&#xff0c;而是从代码里摘出来的片段&#xff0c;配上简单数据&#xff0c;以便理解。 当然&…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

汇编语言学习(三)——DoxBox中debug的使用

目录 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 二、debug是什么 三、debug中的命令 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 链接&#xff1a; https://pan.baidu.com/s/1IbyJj-JIkl_oMOJmkKiaGQ?pw…...