通俗易懂linux环境变量

如果想要清楚的了解环境变量,我觉得我们需要先大致搞清楚一个简单的事——什么是会话?

会话大致是什么?

       在这里我们的目的是更好的理解环境变量,所以适当讲解一下会话即可。通常我们都是用xshell连接远程服务器,都会打开一个会话,我们这次xshell连接之后所运行的所有进程都在这次连接所打开的会话里。如下图所示

  1. 操作系统会为每个连接都创建一个会话,即使是来自同一个用户的每次连接。
  2. 操作系统会为每个会话创建一个伪终端,此时大家可以将自己眼前的xshell的页面看做这个伪终端,就仿佛就是远程服务器上的伪终端一样。而大家可以把伪终端当做真正的终端一样,之所以叫做伪终端,是因为毕竟是服务器虚拟出来的,不是真实的物理终端而已。
  3. 每个伪终端都会关联一个bash,当在伪终端中执行诸如“ls" "cd"等命令时,伪终端会把命令交给bash去执行
  4. 本次连接中启动运行的所有进程都是在其对应的会话中运行的
  5. 当xshell关闭连接,该会话中的所有进程(除了守护进程,初学者就当做所有进程即可)都会收到一个退出信号,进而所有进程都会退出,伪终端和bash也会推出,会话结束。

什么是环境变量?

       大家需要对环境变量有个感性的认识。当我们在执行程序时,一般需要给出程序完整的路径名如“/home/tom/exe”;可是对于一些程序如“ls" "cd"等程序,我们却可以直接运行,而无需添加完整的路径名。这个过程中操作系统肯定使用了某种策略:当输入“ls"后,操作系统发现当前目录下没有这个程序,它会给"ls"程序添加正确的路径名,这个正确的路径名当然对应的就是“ls"真实所在的目录名。那么它如何添加的呢?操作系统中有一个文件,文件里面有一个变量,这个变量大概长这样:PATH="/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/heng/.local/bin:/home/heng/bin"
PATH是变量名,后面是冒号分割的变量值。
        它是这样添加的:输入“ls"后,发现不在当前目录,于是它就去操作系统中找一个特定的文件,然后在文件查找PATH这个变量,然后拿着冒号分隔开的变量值一个一个去试,终于得到正确的”ls“路径名。”ls"运行成功。PATH就是环境变量,就是众多环境变量其中的一员,用于实现正确启动程序这个特定的用途。

环境变量可以在哪?

  1. 在系统级配置文件中
  2. 在用户级配置文件中
  3. 在当前会话临时文件中

       这三个地方都什么意思:以PATH这个环境变量来举例,它可以在这三个地方中的任何一个地方;如果在系统级配置文件中,每个用户都可以看到,每个用户都可以使用;如果在用户级环境变量中,只有该用户可以看到,只有该用户可以使用;如果在当前会话临时文件中,只有此次会话可以看到,下次连接就看不到了。接下来,会详细给大家解释。

会话与环境变量加载

  • 假设系统级配置文件的文件名叫做A。
  • 假设tom这个用户的用户级配置文件叫做tomB,xu这个用户的用户级配置文件叫做xuB。
  • 假设tom第一次会话的临时文件叫做tomC1,xu此次会话的临时文件叫做xuC1。
  • 假设tom第二次会话的临时文件叫做tomC2。

      xhsell进行连接时,会话第一步加载系统级配置文件,第二步加载用户级配置文件,而会话中的临时文件是会话中自己定义的环境变量,马上就说。所以在系统级配置文件中的环境变量每个用户都可以使用,而对于在用户级配置文件中的环境变量由于tom只能加载自己的用户级配置文件tomB,不能加载xu的用户级配置文件xuB,所以tom只能看到自己用户级配置文件中的环境变量,也就是说定义在用户级配置文件中的环境变量,只能被该用户看到。接下来,会实操给大家看。

如何创建、查看等操作环境变量?

如何查看环境变量?

        echo $环境变量名--->用于查看指定的环境变量

        用env命令查看当前用户全部的环境变量

如何创建环境变量?

        export用于创建环境变量,接下来我们创建一个变量名为test_var,值为hello的环境变量

        在终端命令行输入export test_var="hello"所创建的环境变量,处在当前会话临时文件中,只在当前会话可见。我们让tom创建这个环境变量,然后再打开一个会话,做个测试。

        可以看到在第二个连接创建的会话中,无法查看其他会话中的环境变量。

将环境变量创建到配置文件中

        前面讲到 “xhsell进行连接时,会话第一步加载系统级配置文件,第二步加载用户级配置文件” 。那么用于处理环境变量的系统级配置文件和用户级配置文件究竟是那个文件呢,或者说是那些文件呢?

  • 用户级别环境变量定义文件:~/.bashrc~/.profile(部分系统为:~/.bash_profile
  • 系统级别环境变量定义文件:/etc/bashrc/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment

        我们将test_var="hello"创建到用户级配置文件~/.bashrc中,然后source ~/.bashrc加载使其生效,最后看看在第二个终端中能不能看到,按照我们之前所讲,用户级环境变量在这个用户所登录的任何一个会话中都是可以看到的。
        在第一个会话中,在home/tom目录下使用:vim .bashrc(~/.bashrc和~/.profile都是环境变量的用户级配置文件,在任意一个文件中添加环境变量都可以,效果一样,后续系统级配置文件同理)

        然后在第二个会话中使用source ~/.bashrc加载使其生效

        确实正如我们所预料。
        至于测试在环境变量的系统级配置文件中添加环境变量,然后会使所有用户都看到的测试实验,对于大家来说,已经是很简单了,不再赘述。

常见的环境变量都有哪些?

        了解常见的环境变量都有哪些,有助于大家进一步感性认识环境变量。

  • PATH:决定了 shell 将到哪些目录中寻找命令或程序
  • HOME:当前用户主目录(就是用户登录linux系统中时,默认的目录
  • USER:当前用户的用户名。
  • HISTSIZE:历史记录数
  • LOGNAME:当前用户的登录名
  • HOSTNAME:指主机的名称

        还有很多常见的环境变量,这里举出这几个是为了稍加讲解让大家进一步认识环境变量。
        PATH这个环境变量肯定在系统级配置文件里,当然了也可以同时在用户级配置文件里,更可以同时在会话的临时文件里。那么假如系统级配置文件里test_val="111",用户级配置文件里test_val="222",而会话临时文件里test_val="333",当你执行echo $test_val时会输出什么呢?答案是:333。加载步骤为:系统级配置文件--->用户级配置文件--->会话临时文件,这个过程采用覆盖策略。
·        HOME这个环境变量,逻辑上来讲是不是完全可以在用户级配置文件里呀。其实究竟在哪里并不重要,重要的是大家理解这个逻辑即可。

        环境变量还有很多细节问题,如各个配置文件如何执行,如何在编写代码时获取使用环境变量。在大家总体上理解好环境变量的基础上,剩下的事已经很简单了,大家用到时查阅相关资料即可。

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

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

相关文章

【补题】Codeforces Round 715 (Div. 2) C. The Sports Festival

题意:给你一个序列,你可以对它重新排序,然后使每个i,max(a0,a1……ai)-min(a0,a1……ai)最小。问答案是多少 思路: C. The Sports Festival(区间DP)-CSDN博客 区间dp,完全没想到…

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…

SIFT算法详细原理与应用

SIFT算法详细原理与应用 1 SIFT算法由来 1.1 什么是 SIFT? SIFT,全称为 Scale-Invariant Feature Transform(尺度不变特征变换),是一种用于图像特征检测和描述的经典算法。它通过提取图像中的局部关键点,…

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…

Go字符串切片操作详解:str1[:index]

在Go语言中,return str1[:index] 是一个​​字符串切片操作​​,它截取字符串的一部分。让我们深入解析这个操作的含义和原理: 基本语法和含义 str1:原始字符串[:index]:切片操作符str1[:index]: ​​起始…

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析 摘要 NVIDIA Dynamo是一个革命性的高吞吐量、低延迟推理框架,专为在多节点分布式环境中服务生成式AI和推理模型而设计。本文将深入分析Dynamo的架构设计、核心特性、代码实现以及实际应用示例&…

408第一季 - 数据结构 - 栈与队列的应用

括号匹配 用瞪眼法就可以知道的东西 栈在表达式求值运用 先简单看看就行,题目做了就理解了 AB是操作符,也是被狠狠加入后缀表达式了,然后后面就是*,只要优先级比栈顶运算符牛逼就放里面,很显然,*比牛逼 继续前进&#…

Ubuntu 下开机自动执行命令的方法

Ubuntu 下开机自动执行命令的方法(使用 crontab) 在日常使用 Ubuntu 或其他 Linux 系统时,我们常常需要让某些程序或脚本在系统启动后自动运行。例如:启动 Clash 代理、初始化服务、定时同步数据等。 本文将介绍一种简单且常用的…

jpackage 打包 jar包 为exe可执行程序

jpackage --input target/ --main-jar note.jar --runtime-image H:/Dpanbeifeng/apps/finalshell/jre --type app-image --dest output/ --main-class com.textmanager.Main --icon logo2.png --name 猫咪快笔记 jpackage 打包指令详细介绍 jpackage 概述 jpackage 是…

H5移动端性能优化策略(渲染优化+弱网优化+WebView优化)

一、渲染优化:首屏速度提升的核心​​ ​​1. 关键页面采用SSR或Native渲染​​ ​​适用场景​​:首页、列表页、详情页等强内容展示页面 ​​优化原理​​: ​​SSR(服务端渲染)​​:在服务端生成完整…

Matlab | matlab中的图像处理详解

MATLAB 图像处理详解 这里写目录标题图像处理 MATLAB 图像处理详解一、图像基础操作1. 图像读写与显示2. 图像信息获取3. 图像类型转换二、图像增强技术1. 对比度调整2. 去噪处理3. 锐化处理三、图像变换1. 几何变换2. 频域变换四、图像分割1. 阈值分割2. 边缘检测3. 区域分割五…

keysight是德科技N9923A网络分析仪

keysight是德科技N9923A网络分析仪 简  述:N9923A 是一款使用电池供电的便携式射频矢量网络分析仪,其中包括全 2 端口网络分析仪、电缆和天线测试仪、故障点距离测试仪、功率计以及 1 通道和 2 通道矢量电压表。 主要特性与技术指标 网络分析仪 * 2…

idea不识别lombok---实体类报没有getter方法

介绍 本篇文章,主要讲idea引入lombok后,在实体类中加注解Data,在项目启动的时候,编译不通过,报错xxx.java没有getXxxx()方法。 原因有以下几种 1. idea没有开启lombok插件 2. 使用idea-2023…

本地主机部署开源企业云盘Seafile并实现外部访问

Seafile是一个开源、专业、可靠的云存储平台;解决文件集中存储、共享和跨平台访问等问题。这款软件功能强大,界面简洁、操作方便。 本文将详细的介绍如何利用本地主机部署 Seafile,并结合nat123,实现外网访问本地部署的 Seafile …

【从0-1的CSS】第1篇:CSS简介,选择器以及常用样式

文章目录 CSS简介CSS的语法规则选择器id选择器元素选择器类选择器选择器优先级 CSS注释 CSS常用设置样式颜色颜色名称(常用)RGB(常用)RGBA(常用)HEX(常用)HSLHSLA 背景background-colorbackground-imagebackground-size 字体text-aligntext-decorationtext-indentline-height 边…

SpringBoot+MySQL家政服务平台 设计开发

概述 基于SpringBootMySQL开发的家政服务平台完整项目,该系统实现了用户预约、服务管理、订单统计等核心功能,采用主流技术栈开发,代码规范且易于二次开发。 主要内容 系统功能架构 本系统采用前后端分离架构,前端提供用户交互…

3.1 HarmonyOS NEXT分布式数据管理实战:跨设备同步、端云协同与安全保护

HarmonyOS NEXT分布式数据管理实战:跨设备同步、端云协同与安全保护 在万物互联的时代,数据的跨设备流转与安全共享是全场景应用的核心需求。HarmonyOS NEXT通过分布式数据管理技术,实现了设备间数据的实时同步与端云协同,为开发…

高保真组件库:数字输入框

拖入一个文本框。 拖入一个矩形,作为整个数字输入框的边框,边框颜色为灰色DCDEE2,圆角半径为4。 拖入一个向上的箭头图标作为增加按钮,再拖入一个矩形,将向上箭头图标放入矩形内。矩形:18x15,边框颜色DCDEE2,边框左下可见,箭头图标:8x5,矩形置底,组合在一起命名”增…

【力扣链表篇】19.删除链表的倒数第N个节点

题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]…

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…