【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改

news2024/10/5 17:27:36

目录

前言

基本概念&理解

注意的点

查看环境变量的方法 

PATH环境变量 

PTAH应用系统指令 

PTAH应用用户程序

命令行参数的修改(内存级) 

配置文件的修改 

windows环境变量 


大家天天开心🙂

  • bash进程的流程。
  • 环境变量在系统指令和用户程序的应用。
  • 环境变量修改(命令行&配置文件的修改)理解。

前言

明确

  • Linux当中70%以上的命令程序都是用C语言写的
  • 执行命令程序和运行自己写的程序没有任何区别
  • 自己程序运行必须要带路径(绝对/相对都可)
  • 系统指令可带可不带(带不要瞎带)
  • 环境变量具有全局特性是可以被子进程看到的

  • 无论是全局变量还是局部变量,子进程的代码是继承父进程的,数据是拷贝的(子进程和父进程的数据是相互独立的)
  • 进程的独立性:父进程的数据是可以被子进程看到&访问(修改❌),子进程的数据是不能被父进程看到。
  • 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
  • 每开启一个终端就会有1个bash进程。
  • 一个用户也可以有多个bash进程。

回顾上篇博文

  • 登录Linux系统
  • 创建bash进程
  • 在命令行中输入参数
  • bash进程获取参数的路径&可执行程序
  1. 可执行程序是用户自己写(自己带路径)
  2. 可执行程序是系统指令(在bash进程的上下文环境变量中找)
  • 创建子进程
  • bash并把【命令行参数表】传给子进程main函数(传参)
  • 子进程接着执行自己的代码

产生这样一个问题:为什么我们自己的程序运行启动的时候需要带路径,但是系统的命令程序可带可不带路径❓

回答:在Linux当中,存在一些全局变量的设置(环境变量),告诉命令行解释器(bash进程),应该去那些路径底下去寻找这些可执行程序。

☞综下:ls不用带路径,因为ls所在的路径在环境变量当中。

 

基本概念&理解

概念&特性

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

整体理解

  • 登录Linux系统的时候,OS就把系统配置已经加载到了bash进程的上下文中(内存),系统配置就包括环境变量。
  • 当用户在命令行解释器中输入系统命令的时候,bash进程就拿到了命令行参数,根据环境变量,找到指令的可执行程序和路径,并创建指令的子进程。
  • (bash进程会根据$PATH在自己内存的上下文 配置信息中的 各种环境变量中找到对应的环境变量,并在此环境变量中找到对应的指令程序的路径和可执行程序)。

环境变量的作用
  • bash在执行命令的时候,需要先找到命令。因为要把命令所对应的二进制文件加载到内存中。
  • bash的上下文的环境变量中维护了一批指令的路径。
  • 默认这批指令的路径是bash创建子进程的搜索路径。
  1. 找到了就加载并运行
  2. 没找到就commend not fund
  • 注意❗:系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中)
  • 注意❗:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响。(后面讲)
  • 注意❗每个用户都一套的环境变量是从bash进程中拷贝的。修改A用户底下的环境变量并不会影响B用户底下的环境变量。

其中PATH就是一个典型的环境变量,☞PATH下面我们以PATH来讲解环境变量。

注意的点

  • 注意❗:系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中)。
  • 注意❗:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响。(后面讲)。
  • 注意❗每个用户都一套的环境变量是从bash进程中拷贝的。修改A用户底下的环境变量并不会影响B用户底下的环境变量。

关于在修改环境变量中:

  • 不维护在bash进程的配置文件中的环境变量中的指令路径,是不受环境变量修改的影响,随时可用。
  • 命令行中修改用户A的环境变量,是不会影响到A用户的bash进程/用户B进程/OS中的配置文件中的环境变量,只会影响当前用户当前进程。重启之后也不会影响,因为bash进程会重新读取。
  • 配置文件中修改用户A的环境变量,也不是会影响其他用户的bash进程/当前运行进程/OS中的其他用户的配置文件的环境变量,会影响当前用户的bash进程,正在运行进程和当前用户A中配置文件,重启也会影响。
  • 关键点:在重启,用户&用户,用户进程&用户进程。
  • 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
  • 每开启一个终端就会有1个bash进程。
  • 一个用户也可以有多个bash进程

 

查看环境变量的方法 

  1. Linux系统登录
  2. bash进程启动,OS把配置信息加载到bash进程上下文中
  3. 输入指令echo信息
  4. bash在环境变量中找到的指令程序的路径运行(echo的程序&路劲就在bash数据段内部,不在环境变量中)
  5. 创建echo指令的子进程
  6. bash把命令行参数给echo子进程,子进程执行
  • PATH中有很多路径,这些路径以冒号:为分隔符分割,划分了路径的区域。
echo $NAME //NAME:你的环境变量名称
echo $PATH //打印环境变量PATH的内容

PATH环境变量 

  • 如果我们执行我们的系统指令程序,在命令行中不需要输入指令,因为bash进程会到环境变量中找到指令的路径从而找到指令的可执行程序。
  • 如果我们执行用户程序,环境变量中没有维护,所以我们需要在命令行输入时带上路径,以便于bash进程找到可执行程序。

综下所述:PATH环境变量是Linux环境变量中搜索可执行程序的默认路径,也是which在PATH中的搜索路径。 

PTAH应用系统指令 

  • PATH环境变量是具有全局特性的。
  • PATH变量里面保存了指令的路径。
  • 系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中),其中包括环境变量PATH。
  • bash在执行命令的时候,需要先找到命令。因为要把命令所对应的二进制文件加载到内存中。
  • bash的上下文的环境变量中维护了一批指令的路径。
  • 默认这批指令的路径是bash创建子进程的搜索路径。
  1. 找到了就加载并运行
  2. 没找到就commend not fund

PTAH应用用户程序

❓关于我们的用户程序能否和系统指令一样呢。也不用带路径就可以运行。

修改PATH环境变量:

  • 命令行修改
  • 配置文件修改

关于命令行&配置文件修改的理解(关键在重启和不同的用户)

  • 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
  • 每开启一个终端就会有1个bash进程。
  • 一个用户也可以有多个bash进程。
  • 命令行中修改用户A的环境变量,是不会影响到A用户的bash进程/用户B进程/OS中的配置文件中的环境变量,只会影响当前用户当前进程。重启之后也不会影响,因为bash进程会重新读取。
  • 配置文件中修改用户A的环境变量,也不是会影响其他用户的bash进程/当前运行进程/OS中的其他用户的配置文件的环境变量,会影响当前用户的bash进程,正在运行进程和当前用户A中配置文件,重启也会影响。
  • 命令行解释器就是bash进程
  • 关键点:在重启,用户&用户,用户进程&用户进程。

 

命令行参数的修改(内存级) 

想要在运行用户程序的时候不在加上程序路径,有两种方法

  1. 拷贝用户的可执行程序到环境变量的指定路径底下
  2. 添加用户的可执行程序的路径到环境变量中

❗注意以下:操作都是内存级别的,默认我们查到的环境变量都是内存级。内存级别的修改只是暂时的,如果我们重启Linux操作系统,那么环境变量依旧是以前的没有修改的,又会把配置文件没有任何修改的重新加载到内存中。


【方法1】
  • 安装:sudo cp 用户程序  /usr/bin/    
  • 删除:sudo rm /usr/bin/a.out
  • 将用户程序安装到bash的环境变量中环境变量中的指定路径下。
  • 不建议拷贝用户程序到环境变量中,污染指令集。
  • 这些操作本质上都是在OS中安装卸载(内存级别)。在环境变量中指定路径下的拷贝和删除用户的可执行程序。

【方法2】

  • PARH=路径(路径会覆盖以前的全部路径)
  • PATH=以前的所有路径+新添加的路径
  • PATH=$PTAH:新添加的路径(简写)
  • 把指定路径添加到环境变量里,而不是直接让新路径把环境变量覆盖了。
  • 关于覆盖:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响,即便覆盖也可以运行。

【方法1】

安装:sudo cp 用户程序  /usr/bin/    
删除:sudo rm /usr/bin/a.out


【方法2】

PARH=路径(路径会覆盖以前的全部路径)
PATH=以前的所有路径+新添加的路径
PATH=$PTAH:新添加的路径(简写)

配置文件的修改 

问题又出现了,想要让修改的内容永久有效怎么办?

  • 最开始的环境变量不是在内存中,而是在磁盘系统的对应的配置文件中。
  1. 登录Linux操作系统的时,磁盘中的配置文件会加载到内存的OS中。
  2. OS会创建一个bash进程。
  3. bash进程会读取内存中OS的配置文件。
  4. bash进程会把配置文件的环境变量拷贝一份到自己的进程数据中。
  • 每个进程使用的环境变量都是 bash/用户 内部的数据。(不同的用户使用的是自己/home/xxx的配置文件,每个用户都有一套)
  • 每次登录都要重新读取 bash/用户自己底下 配置文件。

如果想要修改的环境变量永久有效,那么就要修改 用户底下/bash 的配置文件中的环境变量,那么这些配置文件在哪里呢?

  • 每个用户(包括root)目录下 /home/xxxx 存在2个隐藏的配置文件
  •  .bash_profile 
  •  .bashrc
  • bash进程读取配置文件:文件操作fopen等(目前在命令行中查找环境变量都是内存级,存在bash的上下文中)
  • 修改配置文件中的环境:在.bash_profile里面加上可执行程序的路径即可
  • vim .bash_profile
  • 添加新的路径到.bash_profile旧的路径后面,以冒号:为分割
-rw-r--r--.  1 tangsiqi tangsiqi  193 Aug  2  2017 .bash_profile
-rw-r--r--.  1 tangsiqi tangsiqi  231 Aug  2  2017 .bashrc

【.bashrc】

.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。 在bash每次启动时都会加载.bashrc文件中的内容,并根据内容定制当前bash的配置和环境。 

vim .bashrc

【.bash_profile】 

bash_profile 只对单一用户有效,文件存储位于 ~/.bash_profile ,该文件是一个用户级的设置,可以理解为某一个用户的 profile 目录下。 这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。 和 profile 文件类似,bash_profile 也会在用户登录(login)时生效,也可以用于设置环境变理。 

vim .bash_profile

windows环境变量 

  • cls是清屏&dir 是查看目录 
  • 系统的配置文件&用户的配置文件
  • windows底下也是有命令行解释器的cwd

🙂感谢大家的阅读,若有错误和不足,欢迎指正。

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

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

相关文章

实战经验,公众号选题方向大盘点!

公众号是重要的内容传播平台,每个品牌都有自己的公众号,公众号选题选得好不好,直接决定你这篇文章是否会爆,公众号的选题决定了文章的阅读量和粉丝增长数量。一个好的选题带来的利益是多方面的。 选题是每个品牌和企业绞尽脑汁去…

background背景图参数边渐变CSS中创建背景图像的渐变效果

效果:可以看到灰色边边很难受,希望和背景融为一体 原理: 可以使用线性渐变(linear-gradient)或径向渐变(radial-gradient)。以下是一个使用线性渐变作为背景图像 代码: background: linear-gradient(to top, rgba(255,255,255,0)…

【Unity每日一记】如何从0到1将特效图集制作成一个特效

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Flink常见面试问题(附答案)

目录 基础篇1. 什么是Apache Flink?2. Flink与Hadoop的区别是什么?3. Flink中的事件时间(Event Time)和处理时间(Processing Time)有什么区别?4. Flink的容错机制是如何实现的?5. 什…

Myelsa的Python函数之旅(高铁直达)

一、函数的定义: 函数(Function)是一段可重复使用的代码块,用于执行特定的任务或计算,并可以接受输入参数和返回输出结果。函数可以将复杂的问题分解为更小的子问题,提高代码的可读性和可维护性。 二、函数的组成: 在…

设计模式总结-适配器模式

适配器模式 模式动机模式定义模式结构适配器模式实例与解析实例一:仿生机器人实例二:加密适配器 总结 模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下,客户端可以通过目标类的接口访问它所提供的…

Redis性能瓶颈与安全隐患排查验证纪实

在写《Redis怎样保证数据安全?》这篇文章,我是有对redis设置密码需要哪些步骤,设置密码的性能损耗有验证的。这就涉及到要对redis的配置做修改。 开始时我是打算采用直接使用redis配置文件的方式。所以我从redis官网下载了一个默认的配置文件…

java实现运行脚本文件

在最近的项目中,有一个需求是前端传给我一个脚本文件,然后我需要运行脚本文件后将结果进行返回,那接下来就让我们看看是怎么做的吧! public R runScripts(Integer id) {ScriptsInfo scriptsInfo this.baseMapper.selectById(id);…

影响力营销与AI的结合:Kompas.ai在搭桥角色中的独特价值

在数字化营销的新时代,影响力营销已经成为品牌建立信任和提升市场影响力的有效手段。通过与关键意见领袖(KOL)的合作,品牌能够利用KOL的信誉和影响力来扩大其市场覆盖范围和提升品牌认知度。然而,寻找与品牌价值观相契…

汇编语言:寻址方式在结构化数据访问中的应用——计算人均收入

有一年多没有在CSDN上发博文了。人的工作重心总是有转移的,庆幸一直在做着有意义的事。   今天的内容,是为汇编语言课程更新一个实验项目。      本方案修改自王爽编《汇编语言》第4版P172“实验7寻址方式在结构化数据访问中的应用” …

科普|老隋分享的人力资源项目怎么样?可不可以赚钱?

近年来,随着市场竞争的加剧和企业对人才需求的不断提升,人力资源项目逐渐成为了创业者和投资者关注的焦点。老隋作为一位在人力资源领域深耕多年的专业人士,经常分享关于人力资源项目的见解和经验。那么,老隋分享的人力资源项目究…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

截稿倒计时 CCF-B 推荐会议EGSR’24论文摘要4月9日提交

会议之眼 快讯 第35届EGSR 2024 (Eurographics Symposium on Rendering)即欧洲图形学渲染专题讨论会将于 2024 年 7月3日-5日在英国伦敦帝国理工学院举行!在EGSR之前,将有一个全新的联合研讨会,即材料外观建模(MAM)和…

【如何写论文】解决方案——删除脚注里多余的回车换行,标题的段前磅数消失问题、图像显示不完整、被截断、浮动问题

目录 一、脚注里多余的回车换行无法删除问题1.1、问题描述1.2、解决方案 二、标题前的段前磅数消失问题2.1、问题描述2.2、解决方案 三、图像显示不完整、被截断、浮动问题3.1、问题描述3.2、解决方案 一、脚注里多余的回车换行无法删除问题 1.1、问题描述 一般论文要求需要有…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时, 1,Toggle初始时默认会有一个被勾选(ison为true),可以自己打勾指定 2,不能取消勾选 Allow Switch Off属性值为true时, 1,Toggl…

无监督学习简介

无监督学习简介 一、定义和核心概念 无监督学习的定义 无监督学习是机器学习的一个关键分支,它涉及到从未标注数据中学习和提取信息。不同于其他学习类型,无监督学习的数据集没有提供任何显式的输出标签或结果。因此,这种学习方法的主要任务…

js计算器实现

文章目录 1. 演示效果2. 分析思路3. 代码实现 1. 演示效果 2. 分析思路 给每个按钮添加点击事件&#xff0c;使用eval()进行计算。 3. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&q…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

Codigger Desktop:用户体验与获得收益双赢的革新之作(一)

上周&#xff0c;我们介绍了Codigger Desktop凭借其强大的功能、稳定的性能以及人性化的设计&#xff0c;成为了广大开发者的得力助手。Codigger Desktop除了是开发者的利器外&#xff0c;它以其出色的用户体验和创新的收益模式&#xff0c;为用户提供了一个全新的选择。Codigg…