环境变量的知识
目录
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或其他相应博客。 代码也非原始代码,而是从代码里摘出来的片段,配上简单数据,以便理解。 当然&…...
【开题答辩全过程】以 基于JSP框架的医疗管理系统为例,包含答辩的问题和答案
个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...
如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题?
如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题? 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcode.co…...
别再让C盘爆红了!Windows 11上Ollama安装与模型存储路径修改保姆级教程
Windows 11上Ollama安装避坑指南:彻底解决C盘空间焦虑 每次看到C盘飘红,就像看到手机电量只剩5%一样让人焦虑。特别是当你兴冲冲地安装Ollama准备体验本地大模型时,却发现默认安装路径无情地吞噬着宝贵的C盘空间。本文将带你从零开始…...
找不到api-ms-win-core-path-l1-1-0.dll的官方解决方法(2026更新)
我是一名企业的IT桌面支持,平时处理得最多的就是员工电脑上五花八门的软件报错。最近,api-ms-win-core-path-l1-1-0.dll缺失的工单量激增,尤其在Windows 7系统的电脑上。很多同事第一反应是去网上搜这个文件下载,但这恰恰是IT运维…...
告别SSH断连焦虑:用Tmux会话持久化拯救你的远程工作
远程开发者的救星:Tmux实战指南与高阶会话管理技巧 凌晨三点,服务器上的关键编译任务刚执行到一半,突然网络抖动导致SSH连接中断——这种令人抓狂的场景,每一位远程开发者都深有体会。传统终端会话的脆弱性让我们不得不反复重做工…...
DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块
DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块 1. 开篇:语音情感识别的技术革新 语音情感识别技术正在改变我们与机器交互的方式。想象一下,你的智能助手不仅能听懂你说什么,还能理解你说话…...
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中处理3D打印文件却苦于格式转换&…...
STM32一键下载电路设计与CH340应用
STM32一键下载电路设计与实现1. 项目概述1.1 功能需求STM32系列微控制器在开发过程中,通常需要通过串口进行程序下载。传统下载方式需要手动操作BOOT0和RESET引脚,过程繁琐且容易出错。本项目设计了一种基于CH340芯片的自动下载电路,通过软件…...
Qt6 QML自定义控件实战:手把手教你做一个Material Design风格的Switch开关
Qt6 QML实战:打造Material Design风格Switch开关的完整指南 在移动端和桌面端应用开发中,开关控件(Switch)是最常用的交互元素之一。一个精致的开关不仅能提升用户体验,还能体现应用的整体设计水准。本文将带你从零开始,用Qt6 QML…...
结合AI改写技术与五个技巧,快速优化论文查重率至合格范围
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
