Linux:环境变量的特性及获取

news2024/9/28 7:27:42

目录

一、环境变量基本概念

1.1命令行参数

1.2常见环境变量

二、环境变量相关指令

创建本地变量

三、环境变量通常是具有全局属性的


一、环境变量基本概念

环境变量(environment variables)不是一个而是一堆,彼此之间其实没有关系。本质上是为了解决不同场景下会出现的不同问题。

环境变量,一般是系统内置的具有特殊用途的变量。系统的环境变量本质就是系统自己开辟空间,给它名字和内容即可。

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
环境变量具有全局属性。
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

1.1命令行参数

81e2edc49f8d42ff89196800f9097f8f.png

c4b92f706058422d8a5793dd799207a0.png
c84125d9fcdf41d198e53c8fccabe336.png
众所周知main函数是可以带参的,即命令行参数,第一个元素argc表示argv中有几个元素,当我们在bash中命令行输入命令时,我们所输入的以空格为分隔符的字符串就会被bash解析成一个个小字串维护成指针数组存入argv(命令行参数表 )然后传给main函数。
而命令行参数存在的意义就是为了根据命令行所输入的字符串来让一个程序(指令)来根据参数的不同实现内部不同的功能。
命令行参数,是linux指令选项的基础。

1.2常见环境变量

那为什么使用系统的指令时可以直接调用,而自己写的.exe为什么需要加./才能运行呢?

PATH : 指定命令的搜索路径。

c9ebadd61808447887f581f7a74ecb43.png
因为在系统中存在一个全局的环境变量,在执行任何命令时都会去这个路径查找,当操作系统执行系统内部的命令时,就会先去这个路径下查找,查到到后直接执行。所以如果想不加./直接让操作系统执行我们写的.exe就可以将我们写的程序移到PATH所在路径。当然一般情况下不推荐使用这种方式,因为会对全局环境变量产生污染 。
可以通过 PATH=当前所在路径:PATH (注意一定要加:PATH即拷贝原来的环境变量,不然会直接覆盖掉内存中原来的环境变量)的方式将文件所在路径添加到PATH中。而想wich等指令的搜索也是去PATH下进行搜索的。
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
SHELL : 当前Shell,它的值通常是/bin/bash。

二、环境变量相关指令

1. echo: 显示某个环境变量值
2. export: 设置一个新的环境变量
3. env: 显示所有环境变量
4. unset: 清除环境变量
5. set: 显示本地定义的shell变量和环境变量

export

71933aef3bcd4568a8baaf6b9ad1cea8.png

通过export可以导出一个环境变量到环境变量中,即导出一个环境变量到当前bash环境中

env命令就可以直接查看相关环境变量信息。
同时main函数中的env也就是当前bash构造出的一个 环境变量表,而此时bash是main的父进程,所以可以得出 环境变量是可以被子进程继承下去的。环境变量具有全局属性,可以被所有的子进程继承下去。

c6a9da480e844679b6ccf10a78877548.png

所以我们在登录使用xshell时,操作系统就会将各种信息加载到环境变量中,以便操作系统识别和使用。

fe096bf3296b402bbe51d659783fa08a.png

获取环境变量的三种方式:

一:main命令行第三个参数

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
}

二:通过第三方变量environ获取

#include <stdio.h>
int main(int argc, char *argv[])
{
 extern char **environ;
 int i = 0;
 for(; environ[i]; i++){
 printf("%s\n", environ[i]);
 }
 return 0;
}

三:系统调用获取或设置环境变量getenv也可以获得具体的环境变量 

8f8ea5aa8a4a47c8991a060639e961a7.png

创建本地变量

55db1ace78c44801a2636cbdc9428668.png

 比如直接在当前目录下定义一个名为hello的本地变量,内容为bbb,此时进行查询就可以查到hello这个本地变量。

此时env里面是看不到的,此时可以用set才能看到。set即能看到env中的全局环境变量也可以看到本地变量。

三、环境变量通常是具有全局属性的

此时写一个程序通过getenv来获取刚刚创建的本地变量 hello,最终发现是不能被获取的。

b5c3142fb66d494297c12d3a1d194dbb.png

所以可以得出结论 :环境变量可以被子进程继承,而本地变量只在bash内部有效

而想要移除环境变量就需要使用unset 变量名的方式来移除环境变量或本地变量。

当前在xshell上我们所能看到的环境变量都是内存级的,即使现在给它移除或销毁,bash在下次启动时依然可以拿到环境变量,而环境变量往往是存在磁盘中的,每次启动bash时操作系统将其加载到内存。

0bcb0512d33047bb8c8accfec67707ba.png

在每个人的家目录中,都会存在一个bash_profile

a99a38ea195343c1b51847ab10f37f2b.png

这个文件就是用来导出环境变量的。用来当bash启动时来读取当前目录下的环境变量文件。

eef635af0daa4e09877adba5aff9fdda.png

我们顺着文件开头的路径再打开.bashrc,再打开/etc/bashrc

52af9bb0b5e841e7919c2bb5ecb5bad6.png

最终可以看到所有的环境变量都是从这里来的。

具象化的例子来讲,平常我们在当前路径下创建文件,操作系统会直接将所有者所属组时间家目录等信息都配置到文件属性当中,而操作系统正是通过该路径下的环境变量来获取到具体的信息的。这也是环境变量存在的意义。

每一个用户登录时都会有自己的bash_profile

bb57aee43b9d4f4b9a3bbdddedc8cdd7.png

我们也可以通过访问根目录下的bash_profile来配置一些自己想要的功能。

c50ffad8680f4d1ab931553f3ca8867a.png

这样下次再次登录xshell时,就会在开头看到打印出的信息了。 

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

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

相关文章

Transformer的前世今生 day10(Transformer编码器

前情提要 ResNet&#xff08;残差网络&#xff09; 由于我们加更多层&#xff0c;更复杂的模型并不总会改进精度&#xff0c;可能会让模型与真实值越来越远&#xff0c;如下&#xff1a; 我们想要实现&#xff0c;加上一个层把并不会让模型变复杂&#xff0c;即没有它也没关系…

【JavaWeb】Day24.Web入门——SPringBootWeb入门

什么是SPring&#xff1f; 我们可以打开Spring的官网(Spring | Home)&#xff0c;去看一下Spring的简介&#xff1a;Spring makes Java simple。Spring的官方提供很多开源的项目&#xff0c;我们可以点击上面的projects&#xff0c;看到spring家族旗下的项目&#xff0c;按照流…

数据库是怎么做到事务回滚的呢?

数据库实现事务回滚的原理涉及到数据库管理系统&#xff08;DBMS&#xff09;如何维护事务的一致性和持久性。 基本原理&#xff1a; ACID属性&#xff1a;事务的原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Iso…

Elasticsearch从入门到精通-07ES底层原理学习

Elasticsearch从入门到精通-07ES底层原理和高级功能 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES底层原理包括集群原理、路由原理、分配控制、分配原理、文档分析原理、文档并发安全原理以及一些高…

【热门话题】ECMAScript vs JavaScript:理解两者间的联系与区别

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 ECMAScript vs JavaScript&#xff1a;理解两者间的联系与区别1. ECMAScript&am…

创建一个vue3 + ts + vite 项目

vite 官网&#xff1a; https://cn.vitejs.dev/guide/ 兼容性注意 Vite 需要 Node.js 版本 18&#xff0c;20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 安装项目 1. 使用n…

【Redis主从架构。主从工作原理psync、bgsave、部分数据复制、主从复制风暴解决方案】【Redis哨兵高可用架构。sentinel】

Redis主从架构 Redis主从工作原理数据部分复制 Redis哨兵高可用架构client连接哨兵规则主节点挂了&#xff0c;集群从新选择主节点&#xff0c;并且同步给sentinel 转自图灵课堂 redis主从架构搭建&#xff0c;配置从节点步骤&#xff1a; 1、复制一份redis.conf文件2、将相关…

基于java+springboot+vue实现的成都旅游网系统(文末源码+Lw+ppt)23-358

摘 要 人类现已迈入二十一世纪&#xff0c;科学技术日新月异&#xff0c;经济、资讯等各方面都有了非常大的进步&#xff0c;尤其是资讯与网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等各方面都有了极大的影响。 利用电脑网络的这些便利&#xff0c;发展一套成…

Linux系统使用Docker部署MongoDB数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

Linux Php 连接 SAP Hana数据库客户端

下载地址 : SAP Development Tools https://tools.hana.ondemand.com/#hanatools 进入hanaclient-2.19.21-linux-x64 无需编译&#xff0c;运行 ./hdbinst 提示没有权限&#xff0c;执行chmod x * 有个子目录里面的也是没有权限&#xff0c;进入那个子目录 执行chmod …

通过测量扭矩和转角法评估紧固件的连接质量——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 扭矩转角法是一种用于测量材料力学性能和评估紧固件连接质量的重要方法。其原理基于材料在受到扭矩作用时产生的弹性变形和塑性变形&#xff0c;通过测量施加在紧固件上的扭矩和对应的转角关系&#xff0c;来推断材料的…

浅模仿小米商城布局(有微调)

CSS文件 *{margin: 0;padding: 0;box-sizing: border-box; }div[class^"h"]{height: 40px; } div[class^"s"]{height: 100px; } .h1{width: 1528px;background-color: green; } .h11{background-color:rgb(8, 220, 8); } .h111{width: 683px;background-c…

PLC/FA 电机信号隔离控制模拟信号数据隔离采集变换分配器0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性: >>精度等级&#xff1a;0.1级、0.2级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;5V/12V/15V/24VDC&#xff08;范围10%&#xff09; >>国际标准一路信号输入:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等 >>…

【详细讲解React 快速入门教程】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

稀碎从零算法笔记Day26-LeetCode:跳跃游戏

断更多天&#xff0c;懒狗ex 题型&#xff1a;数组、模拟、类似双指针&#xff1f; 链接&#xff1a;55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组…

JAVA批量下载

环境&#xff1a; JDK:1.7.0_80 tomcat:7.0.47 工程截图&#xff1a; 1.布署到tomcat 2.在浏览器中访问 启用数据库支持 启用数据库后下载信息将会保存在数据库中。在关闭重启浏览器后仍然可以继续下载。 将“DataBase”配置为true则为启用数据库支持 使用mysql文件夹下的脚…

【算法刷题】链表笔试题解析(1)

一、链表分割 题目描述&#xff1a; 链接&#xff1a;链表分割 题目分析&#xff1a; 这题直接处理并不好做&#xff0c;我们可以构建前后两个链表&#xff0c;将小于x值的结点放在链表a内&#xff0c;将其它结点放在链表b内&#xff0c;这样将原链表遍历完后&#xff0c;原链…

FKSS型煤层注水封孔器向光而行

要保持自己喜欢的样子 不要随波逐流 也不要过度失落 温柔的人 会有一个好的结局 结构特点 封孔器是由注水喷头、固定螺母管芯、单向阀、膨胀胶管、扣压外套、扣压芯子、注水连接体组成。 水分注入煤体&#xff0c;能湿润和破碎煤体&#xff0c;释放部分瓦斯&#xff0c;降低煤…

TreeMap集合 -java学习笔记

TreeMap TreeMap (由键决定特点):按照键的大小默认升序排序、不重复、无索引特点:不重复、无索引、可排序(按照键的大小默认升序排序&#xff0c;只能对键排序&#xff09;原理:TreeMap跟TreeSet集合的底层原理是一样的&#xff0c;都是基于红黑树实现的排序 TreeSet&#xff…

zabbix分布式部署

基于zabbix-proxy的分布式监控 1.1 分布式监控的作用 1&#xff09;分担 server 的集中式压力&#xff1b; 2&#xff09;解决多机房之间的网络延时问题。 1.2 数据流向 agent --> proxy --> server 1.3 构成组件 zabbix-server&#xff1a;整个监控体系中最核心的组…