环境变量的知识

目录

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自己调用函数,或者系统调用完成)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0-1开发一个Vue3前端系统页面-9.博客页面布局

本节主要实现了博客首页界面的基本布局并完善了响应式布局,因为完善了响应式布局故对前面的页面布局有所改动,这里会将改动后的源码同步上传。 1.对页面头部的用户信息进行设计和美化 布局设计参考 :通常初级前端的布局会通过多个div划分区域…

Nginx中Server块配置的详细解析

Nginx中Server块配置的详细解析 一、Server块简介 在Nginx配置文件中,server块是非常关键的部分。它用于定义虚拟主机,一个server块就代表一个虚拟主机。这使得我们可以在一台Nginx服务器上通过不同的配置来处理多个域名或者基于不同端口的服务请求。 …

C# Winform双色纸牌接龙小游戏源码

文章目录 一、设计来源双色纸牌接龙小游戏讲解1.1 主界面1.2 游戏界面1.3 游戏界面快成功了 二、效果和源码2.1 动态效果2.2 源代码 源码下载更多优质源码分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/144419994 …

Linux环境下 搭建ELk项目 -单机版练习

前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案,ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据,尤其是在分布式系统中。下面是每个组件的概述&…

Java写URI网址唤醒APP小程序等NDEF信息

本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bvCxCPM&ftt&id615391857885 import com.sun.jna.Library ; import com.sun.jna.Native; import java.io.IOException;interface CLibrary extends Library {//DLL绝…

Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144516882 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

OpenHarmony和OpenVela的技术创新以及两者对比

两款有名的国内开源操作系统,OpenHarmony,OpenVela都非常的优秀。本文对二者的创新进行一个简要的介绍和对比。 一、OpenHarmony OpenHarmony具有诸多有特点的技术突破和重要贡献,以下是一些主要方面: 架构设计创新 分层架构…

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…

Ubuntu本地化安装MYSQL及Navicat

本教程记录一下,如何在ubuntu上安装mysql,并安装免费版的数据库图形化连接软件Navicat Linux上安装mysql首选使用docker安装,直接拉取mysql的docker镜像即可,这种方式最简单、快捷,这是linux云端服务器最常用的安装方式…

案例分享|企查查的数据降本增效之路

分享嘉宾 任何强 企查查科技股份有限公司 大数据架构负责人 关于企查查 “企查查”是企查查科技股份有限公司旗下的一款企业信用查询工具。2023年5月20日,企查查正式发布全球首款商查大模型——“知彼阿尔法”,该模型基于企查查覆盖的全球企业信用数据进…

OpenHarmony-3.HDF Display子系统(6)

Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多,各厂商的显示屏器件也各有不同,随之针对器件的驱动代码也不尽相同,往往是某一款器件驱动,只适用于某单一内核系统或 SOC,如果要迁移到其他内核或者…

【Java Web】Axios实现前后端数据异步交互

目录 一、Promise概述 二、Promise基本用法 三、async和await关键字 四、Axios介绍 4.1 Axios基本用法 4.2 Axios简化用法之get和post方法 五、Axios拦截器 六、跨域问题处理 一、Promise概述 axios是代替原生的ajax实现前后端数据交互的一套新解决方案,而…

龙迅#LT7911E适用于EDP/DP/TPYE-C转MIPIDSI应用,支持图像处理功能,内置I2C,主应用副屏显示,投屏领域!

1. 描述 LT7911E 是一款高性能 eDP 转 MIPI D-PHY 转换器,旨在将 eDP 源连接到 MIPI 显示面板。 LT7911E 集成了一个符合 eDP1.4 标准的接收器,支持 1.62Gbps 至 5.67Gbps 的输入数据,以 270Mbps 的递增步长,以及一个 2 端口 D…

selenium工作原理

原文链接:https://blog.csdn.net/weixin_67603503/article/details/143226557 启动浏览器和绑定端口 当你创建一个 WebDriver 实例(如 webdriver.Chrome())时,Selenium 会启动一个新的浏览器实例,并为其分配一个特定的…

RabbitMQ个人理解与基本使用

目录 一. 作用: 二. RabbitMQ的5中队列模式: 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化: 消息过期时间 ACK应答 四. 同步接收和异步接收: 应用场景 五. 基本使用 &#xff…

游戏何如防抓包

游戏抓包是指在游戏中,通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包,市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式,一类…

二进制分析的新兴趋势:塑造安全的移动应用

在当今快速发展的数字世界中,保障移动应用的安全性变得尤为重要。随着移动技术的广泛应用,安全性需求也日益增强。二进制分析作为确保移动应用安全和合规性的重要手段,通过对已编译的应用进行深入分析,能够发现源代码中难以察觉的…

量子通信学习路径(一)

量子通信是一门融合量子力学和通信技术的交叉学科,其核心目标是利用量子力学的特性(如叠加态和纠缠)实现信息传递和安全通信。以下是一个系统学习量子通信的完整大纲,从基础知识到实际应用逐步深入,帮助建立全面的知识…

QGIS修行记-如何使用QGIS进行换行标注

问题描述 QGIS根据指定的文字进行换行标注 项目的需要先描述一下: 需要标注的字段太长,需要进行换行标注需要换行的数据不确定有多少(适用于批量数据的操作)我需要根据指定文字进行换行 如:成山头海洋生态自然保护区…

指针的深入讲解

本章重点: 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数 我们在指针的初阶的时候主要讲了: 1.指针就是变量,用来存放地址,地址唯一标识一块内存空间 2.指针的大小是固定4个…