百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

浅谈Linux中的环境变量

liuian 2024-11-28 00:50 17 浏览

Linux和Unix的系统中,环境变量是一组动态命名值,存储在系统中,供在Shell或子Shell中启动的应用程序使用。简而言之,环境变量是具有名称和关联值的变量。

环境变量使您可以自定义系统的工作方式以及系统上应用程序的行为。例如,环境变量可以存储有关默认文本编辑器或浏览器,可执行文件的路径或系统区域设置和键盘布局设置的信息。

接下来我们将说明如何读取和设置环境变量和shell变量。

环境变量和Shell变量

变量具有以下格式:

KEY=value
KEY="Some other value"
KEY=value1:value2

有以下几点需要注意:

  • 变量名称区分大小写。按照约定,环境变量应具有大写名称。
  • 将多个值分配给变量时,它们必须用冒号分隔:。
  • 等号周围没有空格=。
  • 变量可分为两大类,环境变量和shell变量。

    环境变量是在整个系统范围内可用的变量,并由所有衍生的子进程和shell程序继承。

    Shell变量是仅适用于当前Shell实例的变量。每个shell程序(例如zsh和bash)都有自己的内部shell程序变量集。

    在linux中,有几个命令,可以列出和设置环境变量:

  • env –该命令允许您在自定义环境中运行另一个程序,而无需修改当前程序。当不带参数使用时,它将打印当前环境变量的列表。
  • printenv –该命令显示所有或指定的环境变量。
  • set –该命令设置或取消设置shell变量。当不带参数使用时,它将打印所有变量的列表,包括环境和Shell变量以及Shell函数。
  • unset –该命令删除环境变量。
  • export –该命令设置环境变量。
  • 列出环境变量

    用于显示环境变量的最常用命令是printenv。如果将变量名作为参数传递给命令,则仅显示该变量的值。如果未指定任何参数,则printenv输出所有环境变量的列表,每行一个变量。

    例如,要显示HOME环境变量的值,可以运行:

    printenv HOME

    上面命令输出将显示当前登录用户的路径:

    /home/linuxize

    您还可以将多个参数传递给printenv命令:

    printenv LANG PWD
    en_US
    /home/linuxize

    如果运行不带任何参数的printenvor env命令,它将显示所有环境变量的列表:

    printenv

    输出将如下所示:

    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;...
    LESSCLOSE=/usr/bin/lesspipe %s %s
    LANG=en_US
    S_COLORS=auto
    XDG_SESSION_ID=5
    USER=linuxize
    PWD=/home/linuxize
    HOME=/home/linuxize
    SSH_CLIENT=192.168.121.1 34422 22
    XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
    SSH_TTY=/dev/pts/0
    MAIL=/var/mail/linuxize
    TERM=xterm-256color
    SHELL=/bin/bash
    SHLVL=1
    LANGUAGE=en_US:
    LOGNAME=linuxize
    XDG_RUNTIME_DIR=/run/user/1000
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    LESSOPEN=| /usr/bin/lesspipe %s
    _=/usr/bin/printenv

    以下是一些最常见的环境变量:

  • USER -当前登录的用户。
  • HOME -当前用户的主目录。
  • EDITOR -要使用的默认文件编辑器。这是您edit在终端输入时将使用的编辑器。
  • SHELL -当前用户外壳程序的路径,例如bash或zsh。
  • LOGNAME -当前用户的名称。
  • PATH -执行命令时要搜索的目录列表。运行命令时,系统将按此顺序搜索这些目录,并使用找到的第一个可执行文件。
  • LANG -当前的语言环境设置。
  • TERM -当前的终端仿真。
  • MAIL -当前用户邮件的存储位置。
  • 该printenv和env命令只打印环境变量。如果要获取所有变量的列表,包括环境,shell和变量以及shell函数,则可以使用以下set命令:

    set
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()

    该命令将显示所有变量的较大列表,你可以使用LESS参数


    set | less 

    也可以使用echo命令来打印shell变量。例如,要打印BASH_VERSION变量的值,可以运行:

    echo $BASH_VERSION

    以上命令将输出:

    4.4.19(1)-release

    设置环境变量

    为了更好地说明Shell和Environment变量之间的区别,我们将从设置Shell Variables开始,然后继续到Environment变量。

    假设我们要创建 一个新的shell变量,名称为MY_VAR,值为Linuxize

    可以使用命令:

    MY_VAR='Linuxize'

    接下来,我们可以使用grep echo $MY_VAR来过滤set命令的输出来验证是否设置了变量:

     set | grep MY_VAR

    将输出:

    Linuxize

    使用printenv命令检查此变量是否为环境变量:

    printenv MY_VAR

    输出将为空,说明该变量不是环境变量。

    我们尝试在shell程序中打印变量,将得到一个空输出

    bash -c 'echo $MY_VAR'

    接下来,我们使用 export命令将shell变量导出为环境变量

    export MY_VAR

    然后我们用printenv检查:

    printenv MY_VAR

    将输出

    Linuxize

    这次尝试在shell中打印变量,则会在终端上显示变量名称

    bash -c 'echo $MY_VAR'

    还可以在一行命令中设置环境变量:

    export MY_NEW_VAR="My New Var"

    注意 以这种方式创建的环境变量仅在当前会话中可用。如果打开新的shell程序或注销,所有变量将丢失。

    持久性环境变量


    要使环境变量具有持久性,您需要在bash配置文件中定义这些变量。在大多数Linux发行版中,当您启动新会话时,将从以下文件中读取环境变量:

    1. /etc/environment -使用此文件来设置系统范围的环境变量。此文件中的变量以以下格式设置:
    FOO=barVAR_TEST="Test Var"

    2./etc/profile-每当输入bash登录shell时,都会加载此文件中设置的变量。在此文件中声明环境变量时,您需要使用以下export命令:

    export JAVA_HOME="/path/to/java/home"
    export PATH=$PATH:$JAVA_HOME/bin

    3.shell程序特定的配置文件。例如,如果您使用的是Bash,则可以在中声明变量~/.bashrc:

    export PATH="$HOME/bin:$PATH"

    要将新的环境变量加载到当前的shell会话中,请使用以下source命令:

    source ~/.bashrc

    如你喜欢以上内容,可以关注微信公众号:Robert的书签

    相关推荐

    GANs为何引爆机器学习?这篇基于TensorFlow的实例教程为你解惑!

    「机器人圈导览」:生成对抗网络无疑是机器学习领域近三年来最火爆的研究领域,相关论文层出不求,各种领域的应用层出不穷。那么,GAN到底如何实践?本文编译自Medium,该文作者以一朵玫瑰花为例,详细阐...

    高丽大学等机构联合发布StarGAN:可自定义表情和面部特征

    原文来源:arXiv、GitHub作者:YunjeyChoi、MinjeChoi、MunyoungKim、Jung-WooHa、SungKim、JaegulChoo「雷克世界」编译:嗯~...

    TensorFlow和PyTorch相继发布最新版,有何变化

    原文来源:GitHub「机器人圈」编译:嗯~阿童木呀、多啦A亮Tensorflow主要特征和改进在Tensorflow库中添加封装评估量。所添加的评估量列表如下:1.深度神经网络分类器(DNNCl...

    「2022 年」崔庆才 Python3 爬虫教程 - 深度学习识别滑动验证码缺口

    上一节我们使用OpenCV识别了图形验证码躯壳欧。这时候就有朋友可能会说了,现在深度学习不是对图像识别很准吗?那深度学习可以用在识别滑动验证码缺口位置吗?当然也是可以的,本节我们就来了解下使用深度...

    20K star!搞定 LLM 微调的开源利器

    LLM(大语言模型)微调一直都是老大难问题,不仅因为微调需要大量的计算资源,而且微调的方法也很多,要去尝试每种方法的效果,需要安装大量的第三方库和依赖,甚至要接入一些框架,可能在还没开始微调就已经因为...

    大模型DeepSeek本地部署后如何进行自定义调整?

    1.理解模型架构a)查看深度求索官方文档或提供的源代码文件,了解模型的结构、输入输出格式以及支持的功能。模型是否为预训练权重?如果是,可以在预训练的基础上进行微调(Fine-tuning)。是否需要...

    因配置不当,约5000个AI模型与数据集在公网暴露

    除了可访问机器学习模型外,暴露的数据还可能包括训练数据集、超参数,甚至是用于构建模型的原始数据。前情回顾·人工智能安全动态向ChatGPT植入恶意“长期记忆”,持续窃取用户输入数据多模态大语言模型的致...

    基于pytorch的深度学习人员重识别

    基于pytorch的深度学习人员重识别Torchreid是一个库。基于pytorch的深度学习人员重识别。特点:支持多GPU训练支持图像的人员重识别与视频的人员重识别端到端的训练与评估简单的re...

    DeepSeek本地部署:轻松训练你的AI模型

    引言:为什么选择本地部署?在AI技术飞速发展的今天,越来越多的企业和个人希望将AI技术应用于实际场景中。然而,对于一些对数据隐私和计算资源有特殊需求的用户来说,云端部署可能并不是最佳选择。此时,本地部...

    谷歌今天又开源了,这次是Sketch-RNN

    前不久,谷歌公布了一项最新技术,可以教机器画画。今天,谷歌开源了代码。在我们研究其代码之前,首先先按要求设置Magenta环境。(https://github.com/tensorflow/magen...

    Tensorflow 使用预训练模型训练的完整流程

    前面已经介绍了深度学习框架Tensorflow的图像的标注和训练数据的准备工作,本文介绍一下使用预训练模型完成训练并导出训练的模型。1.选择预训练模型1.1下载预训练模型首先需要在Tensorf...

    30天大模型调优学习计划(30分钟训练大模型)

    30天大模型调优学习计划,结合Unsloth和Lora进行大模型微调,掌握大模型基础知识和调优方法,熟练应用。第1周:基础入门目标:了解大模型基础并熟悉Unsloth等工具的基本使用。Day1:大模...

    python爬取喜马拉雅音频,json参数解析

    一.抓包分析json,获取加密方式1.抓包获取音频界面f12打开抓包工具,播放一个(非vip)视频,点击“媒体”单击打开可以复制URL,发现就是我们要的音频。复制“CKwRIJEEXn-cABa0Tg...

    五、JSONPath使用(Python)(json数据python)

    1.安装方法pipinstalljsonpath2.jsonpath与Xpath下面表格是jsonpath语法与Xpath的完整概述和比较。Xpathjsonpath概述/$根节点.@当前节点...

    Python网络爬虫的时候json=就是让你少写个json.dumps()

    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:登录请求地址是这个:二、实现过程这里【甯同学】给了一个提示,如下所示:估计很多小伙伴和...