环境变量的知识

news2024/12/22 1:01:33

目录

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.coloradmin.cn/o/2263511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【时时三省】(C语言基础)通讯录1

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 通讯录 1 .通讯录中能够存放1000个人的信息 每个人的信息: 名字年龄性别电话地址 2、增加人的信息 3、删除指定人的信息 4、修改指定人的信息 5,查找指定人的信…

Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Redis 4.x/5.x 主从复制导致的命令执行 Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。 Redis未授权访问在4.x/5.0.5以…

【PGCCC】Postgresql Varlena 结构

前言 postgresql 会有一些变长的数据类型,存储都是采用 varlena 格式的(除了 cstring 类型),通过语句 SELECT typname FROM pg_type WHERE typlen -1就可以看到所有采用 varlena 格式的数据类型,比如常见的 text &am…

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…

LeetCode:144.前序遍历

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1&#x…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令,用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时,你会看到类似以下的输出: origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…

Gin-vue-admin(4):项目创建前端一级页面和二级页面

目录 创建一级页面创建二级页面 创建一级页面 view目录下新建一个my&#xff0c;Index.vue <template></template><script> export default {name:My, } </script><script setup> import {ref} from vue const myNameref("name") &…

数据结构漫游记:初识vector

​ 嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的…

R语言混合模型回归GBTM群组轨迹模型绘图可视化研究

全文链接&#xff1a;https://tecdat.cn/?p38581 在回归分析的广袤领域中&#xff0c;面对具有多条未知函数线的复杂数据时&#xff0c;传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生&#xff0c;其在处理此类复杂情境时展现出独特的优势与潜力&#xff08…

uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点

兼容H5、安卓App、微信小程序 实现逻辑&#xff1a;给默认选中节点的所有子节点添加一个disabled属性&#xff0c;以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…

水仙花数(流程图,NS流程图)

题目&#xff1a;打印出所有的100-999之间的"水仙花数"&#xff0c;并画出流程图和NS流程图。所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#…

【C++读写.xlsx文件】OpenXLSX开源库在 Ubuntu 18.04 的编译、交叉编译与使用教程

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-17 …

Kioptix Level 2靶场练习保姆级---春不晚

1.将靶机导入至vm中 首先将靶机的网络设置为nat模式&#xff0c;然后在kali中使用arp-scan命令查找靶机ip 靶机ip为&#xff1a;61.139.2.130 arp-scan -l 2.使用nmap扫描目标ip的端口 nmap -p- 61.139.2.130 3.对存在端口进行服务版本和、系统版本、默认脚本检测 nmap -p…

电子元器件与电路之-MOS管的介绍和作用

一、基本概念 MOS 管&#xff0c;或MOSFET&#xff0c;全称是Metal-Oxide-Semiconductor Field-Effect Transistor&#xff08;金属 - 氧化物 - 半导体场效应晶体管&#xff09;。和三极管利用电流控制电流不同&#xff0c;它是一种利用电场效应来控制电流的半导体器件。和三级…

异地组网最简单的方法

01、使用硬件路由器的VPN功能 这是一种相对简单且常用的异地组网方法。你需要有支持VPN功能的路由器&#xff0c;如华硕、中兴等品牌。在主站点的路由器上配置VPN服务器&#xff0c;并在异地设备上通过操作系统自带的VPN连接功能添加一个VPN连接&#xff0c;输入主站点路由器的…

【GO环境安装】mac系统+GoLand使用

文章目录 下载安装包环境配置GoLandGo Modules 下载安装包 地址&#xff1a;GO下载地址 下载好后直接进行安装&#xff1a; 进入terminal&#xff0c;查看是否安装成功&#xff1a; 环境配置 在文稿下面创建工作目录&#xff1a; 在文稿下新建Go_Works文件夹&#xff0c;在…

点击数字层级从 admin.vue 跳转到 inviter-list.vue 组件

文章目录 1、admin.vue2、inviter-list.vue 1、admin.vue 好的&#xff0c;我们来分析一下代码中“层级”这一列的逻辑&#xff0c;并探讨它与后端的关联。 “层级” 列的逻辑 在您的代码中&#xff0c;“层级”列的渲染逻辑如下&#xff1a; <el-table-columnalign&quo…

LabVIEW实时信号采集与频谱分析

系统通过LabVIEW与PXIe硬件结合&#xff0c;实现高精度模拟信号的实时采集、频谱分析与可视化显示。核心功能包括采样率配置、快速傅里叶变换&#xff08;FFT&#xff09;、功率谱图生成及动态缩放调整&#xff0c;同时支持信号平均与噪声抑制。系统设计灵活&#xff0c;适用于…

【ComfyUI + 铅笔素描画风】艺术家DaTou发布了的彩色铅笔素描风格生成(真实感超强)

发布时间&#xff1a;2024年12月09日 项目主页&#xff1a;https://hf-mirror.com/Datou1111/shou_xin 基础模型&#xff1a;flux.1-dev comfyui工作流下载&#xff1a;https://pan.baidu.com/s/1FrLQ4o8ldckKwhIrN1Pv7g?pwd1220 自己测试 官方效果 生成猫猫 shou_xin, a m…

洛谷 B3644 【模板】拓扑排序 / 家谱树 C语言

题目&#xff1a; https://www.luogu.com.cn/problem/B3644 题目描述 有个人的家族很大&#xff0c;辈分关系很混乱&#xff0c;请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列&#xff0c;使得每个人的后辈都比那个人后列出。 输入格式 第 1 行一个整数 …