当前位置: 首页 > 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;以便理解。 当然&…...

信息安全概论

文章目录 预测题重要考点1.遇到什么威胁有什么漏洞怎么缓解分析题2.网络安全现状分析 2.网络安全亮点 时间信息安全概论期末简答题软件学院实验室服务器安全风险分析与PDRR策略 1.1 信息时代的特点1.2 信息安全威胁1.3信息安全趋势1.4 研究网络与信息安全的意义2.1安全风险分析…...

2024年12月16日Github流行趋势

项目名称&#xff1a;PDFMathTranslate 项目维护者&#xff1a;Byaidu reycn hellofinch Wybxc YadominJinta项目介绍&#xff1a;基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#xff0c;提供 CLI/GUI/Docker。项目star数…...

Go 1.24即将到来!

Go 1.24 尚未发布。以下是正在撰写中的发布说明&#xff0c;预计 Go 1.24 将于 2025 年 2 月发布。 语言改进 Go 1.24 现在全面支持 泛型类型别名&#xff1a;类型别名可以像定义类型一样被参数化。详情请参阅语言规范。目前&#xff0c;可通过设置 GOEXPERIMENTnoaliastypep…...

FFmpeg库之ffplay

文章目录 FFmpeg环境搭建ffplay使用通用选项视频选项音频选项快捷键使用滤镜直播拉流 FFmpeg环境搭建 FFmpeg官网 FFmpeg环境搭建 ./configure \--prefix"$HOME/ffmpeg" \--extra-cflags"-I$HOME/ffmpeg/include" \--extra-ldflags"-L$HOME/ffmpeg…...

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息&#xff0c;匹配到对应的类// 注意&#xff1a;// 1 匹配的时候&#xff0c;case class的属性个数要对上// 2 属性名不需…...

WebRTC搭建与应用(一)-ICE服务搭建

WebRTC搭建与应用(一) 近期由于项目需要在研究前端WebGL渲染转为云渲染&#xff0c;借此机会对WebRTC、ICE信令协议等有了初步了解&#xff0c;在此记录一下&#xff0c;以防遗忘。 第一章 ICE服务搭建 文章目录 WebRTC搭建与应用(一)前言一、ICE是什么&#xff1f;二、什么…...

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

Kafka学习篇

Architecture 系统间解耦&#xff0c;异步通信&#xff0c;削峰填谷 Topic 消息主题&#xff0c;用于存储消息 Partition 分区&#xff0c;通过扩大分区&#xff0c;可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道&#xff1a…...

冬日养仓鼠小指南:温暖与陪伴同行

随着冬日的脚步悄然来临&#xff0c;家中可爱的小仓鼠也需要我们给予更多的关怀与呵护。仓鼠虽小&#xff0c;但它们的冬日养护却大有学问&#xff0c;关乎着这些小生命能否健康快乐地度过寒冷季节。 保暖是冬季养仓鼠的首要任务。我们可以为仓鼠的小窝增添一些保暖材料&#…...

【计算机视觉基础CV】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用

引言 在上一篇文章中&#xff0c;我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型&#xff0c;特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤&#xff0c;读…...