当前位置: 首页 > news >正文

Linux 环境变量剖析

Linux环境变量

  • Linux 环境变量剖析
    • 一、环境变量基础概念
      • 1.1 什么是环境变量
      • 1.2 环境变量的作用
    • 二、环境变量的分类
      • 2.1 按生命周期分类
      • 2.2 按作用域分类
    • 三、查看环境变量
      • 3.1 使用 printenv 命令
      • 3.2 使用 env 命令
      • 3.3 使用 echo 命令查看单个变量
    • 四、设置环境变量
      • 4.1 临时设置环境变量(export 命令)
      • 4.2 永久设置环境变量
    • 五、常见环境变量解析
      • 5.1 PATH
      • 5.2 HOME
      • 5.3 SHELL
      • 5.4 LANG
    • 六、环境变量配置文件详解
      • 6.1 /etc/environment
      • 6.2 /etc/profile
      • 6.3 \~/.bash\_profile
      • 6.4 \~/.bashrc
    • 七、环境变量的应用场景
      • 7.1 软件开发与编译
      • 7.2 系统管理与维护
      • 7.3 个性化用户环境配置

Linux 环境变量剖析

一、环境变量基础概念

1.1 什么是环境变量

  环境变量是 Linux 系统中用于存储和传递配置信息的机制,以键值对形式存在。系统启动时,一系列环境变量被初始化并加载到内存,为系统及应用程序提供运行环境信息。例如,系统通过环境变量确定可执行文件搜索路径、用户主目录位置、语言环境设置等,应用程序也依赖这些变量决定运行行为 ,它是操作系统与应用程序沟通的桥梁。

1.2 环境变量的作用

  • 配置系统行为PATH环境变量定义了系统查找可执行文件的路径列表。当输入 “ls” 等命令时,系统按此列表顺序查找文件,若未找到则提示错误。LANG环境变量指定系统语言环境,影响文本信息显示语言与字符编码。

  • 共享信息:在 Linux 进程间通信中,子进程会自动继承父进程的环境变量。父进程可通过设置特定环境变量,将关键信息传递给子进程,实现进程间协同工作。

  • 简化配置:以 Java 开发为例,通过设置JAVA_HOME环境变量指向 JDK 安装目录,Java 编译器、虚拟机等工具就能据此获取 JDK 位置,避免在每个工具配置文件中单独指定,提高配置可维护性与灵活性。

二、环境变量的分类

2.1 按生命周期分类

  • 永久环境变量:设置后长期生效,通常需修改特定配置文件。系统级配置文件如/etc/environment用于设置全局环境变量,/etc/profile在用户登录时执行,可包含 Shell 脚本命令;用户级配置文件如~/.bash_profile在用户登录 Bash Shell 时执行,~/.bashrc在每次打开新 Bash Shell 时执行 。

  • 临时环境变量:仅在当前 Shell 会话期间有效,关闭 Shell 终端或会话即消失。使用export命令即可设置,适用于临时性操作需求。

2.2 按作用域分类

  • 系统级环境变量:对所有用户和进程可见且生效,在系统启动时设置,影响系统整体行为。常见的有PATHLANGSHELL等,修改通常需管理员权限。

  • 用户级环境变量:由用户根据自身需求设置,仅对当前用户及其相关进程生效。如HOME指定用户主目录,USER存储用户名,用户还可自定义变量,设置和修改在用户家目录下相关配置文件进行。

  • 进程级环境变量:由特定进程在运行中自行设置,作用范围仅限于该进程及其子进程。进程可通过编程语言函数或系统调用动态设置和修改,用于进程间通信协作 。

三、查看环境变量

3.1 使用 printenv 命令

  printenv命令用于查看当前所有环境变量及其对应值。在终端输入 “printenv”,系统会以 “变量名 = 变量值” 的格式,将所有环境变量以列表形式输出,方便全面了解系统和用户环境中的环境变量情况。

3.2 使用 env 命令

  env命令功能与printenv类似,也可输出所有环境变量及其值。此外,它还能在指定环境变量设置下运行特定命令,如 “env VARIABLE_NAME=value ls”,并且可结合grep命令快速查找特定环境变量,如 “env|grep PATH”。

3.3 使用 echo 命令查看单个变量

  echo命令结合环境变量,可方便查看单个环境变量的值。输入 “echo $VARIABLE_NAME”,即可输出对应环境变量的值,常用于脚本编写或简单变量查询。

四、设置环境变量

4.1 临时设置环境变量(export 命令)

  export命令用于临时设置环境变量,格式为 “export VARIABLE_NAME=value” 。如执行 “export TEST_VARIABLE=“Hello, World!””,该变量仅在当前 Shell 会话有效。若要修改已有变量,如向PATH变量添加目录,可执行 “export PATH=/new/path:$PATH”。

4.2 永久设置环境变量

  • 系统级:修改/etc/environment文件,按 “变量名 = 值” 格式添加变量,如JAVA_HOME=/usr/lib/jvm/java-11-openjdk;修改/etc/profile文件,使用export命令设置,如export PATH=$PATH:/usr/local/custom/bin,修改后需重启或让用户重新登录生效。

  • 用户级:编辑~/.bash_profile~/.bashrc文件,添加export命令行设置变量。修改后,执行source ~/.bash_profilesource ~/.bashrc使设置立即生效。

五、常见环境变量解析

5.1 PATH

  PATH是最重要的环境变量之一,它指定了系统搜索可执行文件的路径。当在终端输入命令时,系统会依次在PATH包含的目录中查找相应的可执行文件。例如,系统默认的PATH可能包含/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin等目录 。若要添加自定义目录到PATH,可通过上述设置环境变量的方法操作。

5.2 HOME

  HOME变量存储当前用户的主目录路径,用户登录系统后默认在此目录工作,用户的个人文件、配置文件等通常也存储于此。如普通用户 “user1” 的HOME目录一般为 “/home/user1” 。

5.3 SHELL

  SHELL变量指定系统默认使用的 Shell 解释器,常见值有/bin/bash/bin/sh等。用户可通过修改该变量,或修改用户配置文件中的默认 Shell 设置,来切换使用的 Shell。

5.4 LANG

  LANG变量定义系统的语言环境和字符编码。设置为 “en_US.UTF-8” 时,系统以英文显示各类提示信息,采用 UTF-8 字符编码;设置为 “zh_CN.UTF-8”,则以中文显示。

六、环境变量配置文件详解

6.1 /etc/environment

  该文件是系统级环境变量配置文件,适用于设置对所有用户生效的全局环境变量,格式简单,不使用 “export” 命令。修改后,新登录用户会自动应用这些设置。

6.2 /etc/profile

  /etc/profile在用户登录时执行,不仅能设置环境变量,还可运行 Shell 脚本命令,用于设置系统级别的环境变量和启动配置。修改后需用户重新登录或重启系统生效。

6.3 ~/.bash_profile

  针对 Bash Shell 用户,~/.bash_profile在用户登录时执行,用于设置用户个人环境变量和启动脚本。若同时存在~/.bash_profile~/.profile,系统优先读取前者。

6.4 ~/.bashrc

  ~/.bashrc在每次打开新的 Bash Shell 时执行,适合设置在每个 Shell 会话中都生效的环境变量。修改后执行source ~/.bashrc可立即生效 。

七、环境变量的应用场景

7.1 软件开发与编译

  在软件开发中,通过设置JAVA_HOMEPYTHONPATH等环境变量,能指定开发工具和库文件的路径,确保编译器、解释器找到所需资源,顺利完成编译和运行。

7.2 系统管理与维护

  系统管理员可利用环境变量统一配置系统工具的运行参数,如设置日志文件路径相关的环境变量,方便管理和维护系统日志 。

7.3 个性化用户环境配置

  用户可根据自身习惯和工作需求,在用户级配置文件中设置个性化环境变量,如自定义命令别名、调整文本编辑器默认参数等,打造专属的 Linux 操作环境。

  通过深入了解 Linux 环境变量,我们能够更好地驾驭 Linux 系统,无论是日常操作、系统管理还是软件开发,环境变量都将成为我们提升效率、优化工作流程的得力助手。掌握这些知识后,不妨在实际操作中多尝试设置和运用环境变量,探索更多 Linux 系统的强大功能 。

http://www.lqws.cn/news/567919.html

相关文章:

  • CNN, RNN, LSTM
  • 2.4 分层解耦(Spring的IOC和DI讲解)
  • Qt事件系统
  • 【innovus基础】手修drc之——金属跳层/修改线宽
  • H3C-路由器交换机-中继
  • Gemini-CLI:谷歌开源的命令行AI工具,重新定义开发者工作流
  • C++异常处理深度解析:标准库异常类与最佳实践
  • 可达性分析算法Test
  • 矩阵的逆 线性代数
  • rabbitmq springboot 有哪些配置参数
  • 打卡day57
  • WebRTC系列:(一)MacOS开发环境搭建(Vscode + Clangd)
  • Ubuntu开放mysql 3306端口
  • 现代 JavaScript (ES6+) 入门到实战(八):总结与展望 - 成为一名现代前端开发者
  • NLP随机插入
  • 复旦大学经济学院系统思考训练
  • MyBatis批量删除
  • [论文阅读]MISSRce
  • Elasticsearch 索引设计与性能优化实战指南
  • M1芯片最终oracle成功版本拉取方法及配置
  • 二叉树找到下一个中序遍历节点的思路
  • foreach、for in 和for of的区别
  • VMware报错问题解决记录
  • NAND Flash BCH和FTL
  • 聊聊横向移动中的实际技术点 ----- ResponderSMB
  • FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
  • 驱动开发系列58 - 揭开内核IRQ框架的神秘面纱
  • 对基尼指数作出的努力
  • jenkins启动报错,一直无法启动
  • 介绍Windows下的由Sysinternals开发的一些小工具