环境变量的知识
目录
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或其他相应博客。 代码也非原始代码,而是从代码里摘出来的片段,配上简单数据,以便理解。 当然&…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
