顺序理清linux下的环境变量

news2024/11/30 12:31:14

文章目录

  • 关于环境变量
    • 概念(了解)
    • 例引 环境变量
  • 查看环境变量的方法
    • echo && printenv 命令
  • 环境变量的配置
    • .bash_profile
  • 常见 环境变量
  • 通过程序获取环境变量
  • 本地变量
  • 环境变量表

关于环境变量

概念(了解)

环境变量的概念了解即可,通过后文内容,更便于理解其概念。

  1. 环境变量是计算机操作系统中的一种重要机制,用于存储并访问系统配置信息、资源路径、程序库路径和其他相关信息

    • 环境变量可以在系统启动时被设置和加载,并且可以通过脚本或命令行工具来修改和查询

    • 环境变量的名称都由大写字母组成,而变量的值可以是任何字符串,包括数字、文本、路径等等。环境变量还可以包含其他环境变量,以及特殊字符和转义字符

  2. 操作系统会使用环境变量来控制各种系统行为,例如,查找可执行文件的路径、指定默认的字符编码、指定默认的打印机等等。

  3. 应用程序也会使用环境变量来存储和访问各种配置信息,例如,Java开发工具包(JDK)会使用JAVA_HOME环境变量来指定JDK的安装目录。


例引 环境变量

我们知道,linux中,ls等大多命令本身是可执行程序,而指令后的参数为命令行参数,比如执行 ls -a -l 命令时,ls 为可执行程序,而-a -l 属于命令行参数

看下面的程序执行:

在这里插入图片描述
当直接执行我们自己实现的程序时,会弹出bash: myProc: command not found 的错误,只有使用./myProc,即加上路径后才能使用。

因为:要执行一个命令,必须找到对应的可执行程序

当我们执行ls 命令时,其具有默认搜索路径,即PATH,所以可以直接执行命令。

而这里的PATH就是环境变量用于指定可执行文件的搜索路径


查看环境变量的方法

echo && printenv 命令

echo:

Linux下,我们可以利用echo命令查看环境变量,下面用 echo $PATH 查看PATH路径

在这里插入图片描述

printenv:

printenv命令用于打印出所有的环境变量及其值

在这里插入图片描述


环境变量的配置

如何将我们的路径配置到PATH中?
通过 PATH=$PATH:/home/test命令将我们自己的路径配置到PATH中

在这里插入图片描述
此时我们执行 该路径下的程序 就不必再指明路径了:

在这里插入图片描述

如果要删除我们加上的路径
只需要PATH=/路径,即将之前的路径重新赋给PATH即可。

需要注意的是通过 PATH=$PATH:/home/test 这样的命令来修改 PATH 环境变量,仅仅在当前 shell 进程中将 PATH 变量增加了一个路径(即内存上 的修改),而没有将修改持久化到系统中。

当关闭当前 shell 进程时,修改的 PATH 环境变量也会随之被销毁
即关闭运行软件后,修改就恢复了,这是为什么?


我们知道:命令行启动的进程都是 shell/bash 的子进程子进程的命令行参数和环境变量,是父进程bash所传递的。

我们使用PATH=$PATH命令直接修改的是bash内部的环境变量信息,而重启shell进程后,父进程bash依然可以找到对应路径,父进程的环境变量信息从哪里来?

答:

  1. 每一次重新登录,系统都会形成新的bash解释器 且 新的bash解释器 会从(进程地址空间)中读取形成自己的环境变量表信息。

  2. 环境变量信息是以脚本配置文件的形式存在的 ,则上面括号内即为相应的脚本配置文件。

.bash_profile

而在linux下,在用户的主目录下会有一个隐藏文件 .bash_profile

在这里插入图片描述
下面是对上面.bash_profile文件的解释:

  1. if [ -f ~/.bashrc ]; then . ~/.bashrc fi部分代码检查是否存在 ~/.bashrc 文件,并在存在时加载该文件。这样可以将 .bash_profile 和 .bashrc 文件的配置整合在一起。

  2. 接下来,PATH=$PATH:$HOME/bin 设置了一个名为 PATH 的环境变量,将 $PATH(原始的 PATH 值)和 $HOME/bin 目录(用户的个人二进制文件目录)合并在一起。通过这个设置,系统可以在用户执行命令时搜索到 HOME/bin 目录中的可执行文件

  3. 最后,export PATH 将 PATH 环境变量导出,使其在当前 shell 会话以及新的子 shell 中可用

  • .bash_profile 文件会在用户登录时自动执行,所以当我们修改bash 的环境变量时,重启shell进程,环境变量信息又会重置。
  • 如果我们想永久修改环境变量,就需要修改.bash_profile文件。

常见 环境变量

  • PATH:指定可执行文件的搜索路径

  • HOME:指定当前用户的主目录路径,常用于指定某些应用程序的默认工作目录。

  • USER(或USERNAME):指定当前登录用户的用户名。

  • TEMP(或TMP):指定临时文件的存储路径,某些应用程序会将临时文件存放在该路径下。

  • SHELL:指定当前用户所使用的shell程序的路径。


通过程序获取环境变量

在C++中,我们可以通过getenv() 函数获取环境变量的值。

getenv()函数的原型如下:

// name参数是要获取的环境变量的名称,返回值是一个指向字符串的指针,表示该环境变量的值。如果环境变量不存在,则返回空指针。
char* getenv(const char* name);

我们用下面的示例代码,演示如何获取环境变量:

#include <iostream>
#include <cstdlib>

int main() {
    const char* path = getenv("PATH");
    
    if (path != nullptr) { // 检测是否获取成功
        std::cout << "PATH environment variable: " << path << std::endl;
    } else {
        std::cout << "PATH environment variable does not exist." << std::endl;
    }
    
    return 0;
}

当我们执行程序后,发现环境变量PATH被正确输出

在这里插入图片描述


本地变量

linux下,在命令行中用下面的方法声明本地变量

variable_name=value

如果要使用本地变量,需要在变量名前加上 $ 符号。例如,在 Bash Shell 中输入以下命令:

my_var="Hello, World!"
echo $my_var

命令行下创建的本地变量的作用域是有限的,通常仅在当前 Shell 会话中有效。这意味着在当前 Shell 中定义的本地变量不能被其他 Shell 或子进程访问。

如果要在子 Shell(如子进程或命令替换)中使用本地变量,应该使用 export 命令将其导出为环境变量,例如:

my_var="Hello, World!"
export my_var

这样,在子 Shell 中就可以使用 $my_var 访问该变量的值了。

如果要删除本地变量,则可使用 unset 命令,例如:

unset my_var

环境变量表

  1. 环境变量表操作系统中存储环境变量的数据结构,它是一个键值对的集合,用于存储各种系统级和用户级的配置信息

  2. Linux下,环境变量表是通过名为环境变量列表(Environment Variables List)的数据结构来实现的!该列表是一个字符串数组,每个字符串都包含一个环境变量的定义。

  3. 环境变量表中的每个元素都是以 key=value 的形式表,可以使用 env 或 printenv 命令来查看当前环境变量表中的所有环境变量。你也可以使用 echo $VAR_NAME 命令来检索特定环境变量的值

下面的图片展示了使用env命令,打印出环境变量表信息

在这里插入图片描述

下面的例子展示了,本地变量的相关操作
在这里插入图片描述

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

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

相关文章

有什么进销存软件,比较适合零售行业日常开单要求及库存记录?

本文将为大家总结一下对于进销存软件要求&#xff1a; 基础功能&#xff1a;可以日常开单、退换货处理、出入库进阶功能&#xff1a;电脑、手机数据同步&#xff0c;保障数据安全&#xff0c;可进行数据分析 其实无论是小型创业公司&#xff0c;还是一家大型企业&#xff0c;…

为什么SSL证书会有序列号

SSL证书中的序列号是为了唯一标识该证书。他是用于识别和跟踪证书的唯一标识符。以确保每个证书都具有唯一的值。 有序列号的原因如下&#xff1a; 唯一性&#xff1a;通过序列号&#xff0c;可以确保每个ssl证书都有一个独特的标识符。这对于区分不同的证书非常重要。 跟踪和…

tsconfig.json无法写入文件“XXXX“因为它会覆盖输入文件

在开发ts项目的时候&#xff0c;包错提示无法写入文件&#xff1a; tsconfig.json无法写入文件"XXXX"因为它会覆盖输入文件 这是tsconfig.json文件配置问题&#xff0c;需要加入下面的配置就好了&#xff1a; {"compilerOptions": {"outDir": …

教育案例分享 | 安全狗云安全体系为高校提升立体化纵深防御能力

一、客户情况 某高校有服务器500台&#xff0c;对外站点200个&#xff0c;核心交换流量20G。 二、客户痛点 校园网系统分类较多&#xff0c;并且每类网站中安全级重要程度又各不相同&#xff0c;同时有多个网络出口(如&#xff1a;教育网、电信网、移动网等)&#xff0c;二级学…

常见JMeter面试题

1、什么是JMeter&#xff1f; JMeter是一种开源的性能测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;如Web应用程序、数据库、FTP服务器等。 2、JMeter可以测试哪些类型的应用&#xff1f; JMeter可以测试各种类型的应用程序&#xff0c;包括Web应用程序、数…

【知网会议征稿】第三届社会科学与人文艺术国际学术会议 (SSHA 2024)

第三届社会科学与人文艺术国际学术会议 (SSHA 2024) 2024 3rd International Conference on Social Sciences and Humanities and Arts 第三届社会科学与人文艺术国际学术会议 (SSHA 2024)于2024年3月1-3日在中国福州举行。会议旨在为从事“社会科学”与“人文艺术”研究的专…

【C++&数据结构】二叉树(结合C++)的经典oj例题 [ 盘点&全面解析 ](24)

前言 大家好吖&#xff0c;欢迎来到 YY 滴数据结构系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴 数据结构 专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.二叉树创建字符串1…

.NET 7 创建Android项目 (拥有原生的界面设计能力,比MAUI更好的性能)

vs2022默认移动开发使用的是maui项目模板&#xff0c;maui确实有很多亮点&#xff0c;就是对比android原生项目性能还需要优化&#xff0c;特别是启动app时无法达到秒开。后来发现vs2022中依然可以直接创建android项目&#xff0c;性能和原生Android基本一致。 1、搜索模板 dot…

办理的流量卡怎么判断是否激活成功?看实名认证还是看充值?

很多朋友可能都会有一个疑问&#xff0c;在网上购买的流量卡怎么才算是激活成功呢&#xff1f;是实名之后就算激活成功&#xff0c;还是需要充值使用才算激活成功呢&#xff1f;这篇文章带大家一块儿来了解一下。 ​  可能很多朋友都会有一个疑问&#xff0c;当你收到流量卡&…

Python开源项目GPEN——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

无论是自己、家人或是朋友、客户的照片&#xff0c;免不了有些是黑白的、被污损的、模糊的&#xff0c;总想着修复一下。作为一个程序员 或者 程序员的家属&#xff0c;当然都有责任满足他们的需求、实现他们的想法。除了这个&#xff0c;学习了本文的成果&#xff0c;或许你还…

Leetcode刷题详解——被围绕的区域

1. 题目链接&#xff1a;130. 被围绕的区域 2. 题目描述&#xff1a; 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["…

漏洞分析 | 漏洞调试的捷径:精简代码加速分析与利用

0x01前言 近期&#xff0c;Microsoft威胁情报团队曝光了DEV-0950&#xff08;Lace Tempest&#xff09;组织利用SysAid的事件。随后&#xff0c;SysAid安全团队迅速启动了应急响应&#xff0c;以应对该组织的攻击手法。然而&#xff0c;在对漏洞的分析和复现过程中&#xff0c…

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…

语音识别芯片NRK3301在智能茶吧机的应用

传统的饮水机传大多只能提供热水和冷水&#xff0c;而智能茶吧机则是一款集合了热饮水机、煮茶器、泡茶壶等多种功能于一体的多功能生活电器。它不仅具备了传统饮水机的所有功能&#xff0c;还可以根据不同的需求&#xff0c;提供多种水温的饮水方式&#xff1b;还具备了煮茶和…

打开IE浏览器

原文地址&#xff1a;https://www.xiaoheiwoo.com/windows-11-internet-explorer/#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows11%20%E4%B8%AD%E5%90%AF%E7%94%A8%20IE%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%843%E7%A7%8D%E6%96%B9%E6%B3%95%201%20%E6%96%B9%E6%B3%95%E4%B8%80…

系列九、对象的生命周期和GC

一、堆细分 Java堆从GC的角度还可以细分为&#xff1a;新生代&#xff08;eden【伊甸园区】、from【幸存者0区】、to【幸存者1区】&#xff09;和老年代。 二、MinorGC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区&#xff0c;年龄1 首先&#xff0c;当eden区…

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5)

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5) 前面分析过一个调试的属性,在这里分析另外一个属性,这个属性就是RenderDebugState,它就是用来显示渲染的信息。 跟前面的分析规则可知,属性都是有一个信息类和操作类组成。 在这里信息类叫RenderDebugStateInfo…

指针数组和数组指针的理解(个人理解版)

指针数组和数组指针的形式 int *p[3] // 指针数组 int (*p)[3] // 数组指针指针数组和数组指针的理解 1.指针数组 int *p[3] 首先找到变量p&#xff0c; &#xff08;1&#xff09;先与[]结合看&#xff08;因为[]优先级比*高&#xff09;&#xff0c;也就是p[3]&#…

2023亚太杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

抖音小程序开发:疫苗预约系统的技术实现

在疫苗接种的背景下&#xff0c;借助抖音小程序&#xff0c;可以更好地整合用户社交信息和提供便捷的疫苗预约服务。 一、疫苗预约系统的需求分析 在开发抖音小程序疫苗预约系统之前&#xff0c;首先需要进行详细的需求分析。系统应该具备用户注册、疫苗信息展示、预约功能、…