在 Linux 中设置永久和系统范围的环境变量

2023-10-17

在 Linux 中,环境变量是一个可用于提供系统不同部分的配置和数据的值。

这些变量充当数据的占位符,使应用程序和 shell 能够更顺畅地相互交互。
环境变量的一个主要优点是它们促进进程之间的值共享,从而实现对系统行为各方面的集中控制。

 

 

范围(本地与全球)

Linux 中的环境变量根据其范围可以分为两大类:本地变量和全局变量。

局部变量

局部变量仅限于当前 shell 会话。在该会话中启动的任何子 shell 或程序都可以访问这些变量,但它们在其他会话中不可用。
创建局部变量的方法如下:


variable_name="local value"
echo $variable_name
  

Output:


local value
  

在此代码中,您声明一个名为variable_name并为其分配值“本地值”。当使用echo命令打印变量,它返回分配的值。

该变量仅在当前 shell 中可用,并且在新的终端窗口或其他会话中不会被识别。

全局变量

全局变量,也称为环境变量,系统上的所有会话和用户都可以访问。

它们提供了一种在不同应用程序和 shell 会话之间共享配置设置的方法。
您可以使用以下命令创建全局变量导出命令:


export GLOBAL_VARIABLE="global value"
echo $GLOBAL_VARIABLE
  

Output:


global value
  

通过在声明前加上前缀export,你正在创建变量GLOBAL_VARIABLE系统上的所有会话和用户都可以访问。

与局部变量不同,全局变量在不同的终端会话中保留其值。

 

列出环境变量

在 Linux 中,您可以使用多种方法来列出环境变量。在这里,我们将探索不同的方法来做到这一点。

使用 printenv

The printenv命令可以列出所有环境变量或显示特定变量的值。


printenv
  

Output:


PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/home/username
...
  

通过简单地运行printenv,您将获得所有环境变量的列表。如果你想查看某个特定的变量,比如HOME, use:


printenv HOME
  

Output:


/home/username
  

上面的命令具体显示了HOME多变的。

使用环境

如同printenv, the 环境命令还可以列出所有环境变量。


env
  

Output:


SHELL=/bin/bash
USER=username
...
  

它返回系统上所有活动环境变量的完整列表。

使用回声

要打印特定环境变量的值,可以使用回显命令变量名前缀为$.


echo $USER
  

Output:


username
  

这返回的值USER变量,显示当前登录的用户名。

使用/etc/环境

在某些 Linux 发行版中,/etc/environment文件保存全局环境变量。您可以使用文本编辑器或cat命令。


cat /etc/environment
  

Output:


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  

这将显示文件的内容,包括任何定义的全局环境变量。

 

设置环境变量(永久变量)

当您想让环境变量在所有会话中以及重新启动后永久可用时,您需要将它们添加到 shell 配置文件之一。

编辑.bashrc

The .bashrcfile 是每次打开新终端窗口时运行的脚本。您可以在此处添加环境变量。
Open .bashrc使用像这样的文本编辑器nano:


nano ~/.bashrc
  

在文件末尾添加导出行:


export NEW_VARIABLE="value"
  

保存并退出文件。
现在,应用更改:


source ~/.bashrc
  

或者您可以重新启动终端。
验证:


echo $NEW_VARIABLE
  

Output:


value
  

变量NEW_VARIABLE现在已永久设置,重启后不会消失。

编辑 .bash_profile 或 .profile

一些系统使用.bash_profile or .profile用于登录 shell。该过程与.bashrc.

只需更换.bashrc with .bash_profile or .profile在上述说明中。
这些文件之间的选择取决于您的系统和个人喜好。

一般来说,.bashrc用于非登录 shell,并且.bash_profile or .profile用于登录 shell。环境变量可以放置在其中任何一个中,具体取决于您的具体需要。
通过将环境变量添加到这些配置文件中,您可以确保它们可以在不同的终端会话中以及系统重新启动后进行全局访问。

 

设置环境变量(系统范围)

系统上的所有用户都可以访问系统范围的环境变量。这些变量可以在系统启动或用户登录期间读取的特定文件中设置。

/etc/环境

The /etc/environmentfile 是一个包含键值对的简单文本文件。您可以在此处添加环境变量:


sudo echo 'GLOBAL_PATH="/new/path"' | sudo tee -a /etc/environment
  

然后,您需要注销并重新登录,或重新启动系统。
验证:


printenv GLOBAL_PATH
  

Output:


/new/path
  

The GLOBAL_PATH现在已经为系统上的所有用户设置了变量。

/etc/配置文件

或者,您可以使用/etc/profile文件来设置系统范围的环境变量。打开文件:


sudo nano /etc/profile
  

添加您的导出行:


export SYSTEM_VARIABLE="system value"
  

保存并退出。
要应用更改,请重新启动系统或运行:


source /etc/profile
  

验证:


echo $SYSTEM_VARIABLE
  

Output:


system value
  

The SYSTEM_VARIABLE现在为所有用户全局设置。
这两种方法都允许您设置所有用户都可以访问的环境变量,从而确保整个系统的环境一致。

 

/etc/environment 与 bashrc

Aspect /etc/environment ~/.bashrc
Scope System-wide (all users) User-specific
Type of sessions All types (including GUI like KDE and GNOME) Interactive non-login shells
Syntax key=value pairs only Shell scripting syntax
Effect Variables loaded upon login Variables loaded on new shell
Suitable for Setting environment variables for all users and sessions Setting user-specific aliases, functions, and shell variables
Impact on GUI applications Variables available Variables are not be available
Requires shell restart No (changes apply at next login) Yes (for changes to take effect in current session)
Accepts scripting No Yes

 

取消设置环境变量

有时您可能想要删除环境变量,无论是出于测试目的还是为了清除不必要或不正确的设置。

The unset命令可以让你做到这一点。
以下是取消设置环境变量的方法:


export VARIABLE_TO_UNSET="value"
echo $VARIABLE_TO_UNSET
  

Output:


value
  

上面的代码首先设置了一个名为VARIABLE_TO_UNSET值为“值”。现在,您将取消它:


unset VARIABLE_TO_UNSET
echo $VARIABLE_TO_UNSET
  

Output:


(blank line)
  

该变量已被删除,因此尝试echo它返回一个空行。
如果该变量是在 shell 配置文件或系统范围文件之一中设置的,则需要从文件中删除相应的行并使用以下命令重新加载文件source或重新启动会话。

 

特殊环境变量

Linux 定义了几个特殊的环境变量来控制系统行为的各个方面。了解这些可以帮助您进行系统配置和脚本编写。

PATH

The PATH变量定义系统查找可执行文件的目录。


echo $PATH
  

Output:


/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  

这显示了系统搜索可执行文件的目录,允许您运行命令而无需指定其完整路径。

HOME

The HOME变量指向当前用户的主目录。


echo $HOME
  

Output:


/home/username
  

这提供了用户主目录的路径,在需要引用用户特定文件或目录的脚本或命令中很有用。

USER

该变量包含当前登录的用户名。


echo $USER
  

Output:


username
  

SHELL

The SHELL变量定义用户的默认 shell。


echo $SHELL
  

Output:


/bin/bash
  

HOSTNAME

该变量包含系统的主机名。


echo $HOSTNAME
  

Output:


your-hostname
  

LANG

The LANG变量设置系统的语言和区域设置。


echo $LANG
  

Output:


en_US.UTF-8
  

PS1

(提示字符串 1):这是定义主提示字符串的环境变量。是终端等待输入时显示的字符串。


echo $PS1
  

Output:


[\u@\h \W]\$
  

阅读更多内容Linux PS1提示定制.

PS2

(提示字符串 2):这是当命令需要更多输入才能完成时显示的辅助提示。

例如,如果您输入echo "不关闭报价并按 Enter,第二个提示(>默认情况下)将出现在下一行。

这是向您表明该命令尚未完成,正在等待结束报价。


echo $PS2  

Output:


>  

PWD

The PWD变量包含当前工作目录。


echo $PWD
  

Output:


/home/username/directory
  

The PWD当创建 shell 会话时,环境变量不存储在物理文件中,而是存储在系统内存中。

HISTSIZE

The HISTSIZE变量定义命令历史记录的大小。


echo $HISTSIZE
  

Output:


1000
  

EDITOR, BROWSER

可以设置这些变量来定义默认的文本编辑器和 Web 浏览器。


echo $EDITOR
  

Output:


/usr/bin/vim
  

 

在 Bash 脚本中使用环境变量

这是一个基本示例,说明如何在bash脚本:
创建一个名为example.sh:


#!/bin/bash

MY_NAME="John"
export MY_OS="Linux"
echo "Hello, $MY_NAME. Welcome to $MY_OS!"
  

现在,使脚本可执行:


chmod +x example.sh
  

运行脚本:


./example.sh
  

Output:


Hello, John. Welcome to Linux!
  

Here, MY_NAME and MY_OS是脚本中设置的环境变量。

The export命令使MY_OS可用于任何子流程。然后在 echo 语句中使用它们来打印欢迎消息。
您甚至可以在运行脚本时从命令行传递环境变量。这对于根据输入更改脚本的行为很有用。


MY_NAME="Alice" ./example.sh
  

Output:


Hello, Alice. Welcome to Linux!
  

通过在脚本运行前加上前缀MY_NAME="Alice",你暂时覆盖了MY_NAME脚本中的变量,允许自定义输出。
在脚本编写中使用环境变量可以让您编写动态、可重用的代码。

 

Systemd 和环境变量

systemd是一个初始化系统,用于引导用户空间并管理所有后续进程。

使用以下命令为特定服务设置环境变量systemd,您通常会编辑服务的单元文件。
这是一个例子:


sudo systemctl edit my-service.service  

Add an [Environment]部分:


[Service]
Environment="MY_VARIABLE=my value"  

Reload systemd并重新启动服务:


sudo systemctl daemon-reload
sudo systemctl restart my-service.service  

变量MY_VARIABLE现在可供my-service服务,以“我的价值”为价值。
您还可以使用专用的环境文件:

创建文件/etc/my-service.env内容:


MY_VARIABLE=my value  

在服务的单元文件中引用此文件:


[Service]
EnvironmentFile=/etc/my-service.env  

像以前一样重新加载并重新启动。

这允许完全分离配置,这对于复杂的服务特别有用。

 

从文件加载环境变量

以下是实现这一目标的两种常见方法:

使用源码

The 源命令在当前 shell 环境中读取并执行给定文件名的命令。
创建一个名为variables.sh包含以下内容:


export VAR1="value1"
export VAR2="value2"
  

要加载这些变量,请运行:


source variables.sh
  

验证:


echo $VAR1
echo $VAR2
  

Output:


value1
value2
  

这些变量现在在您当前的 shell 中可用。

使用 dotenv

dotenv是一个可以从a加载变量的工具.env文件到环境中。您需要先安装它。
创建一个名为.env包含以下内容:


VAR1=value1
VAR2=value2
  

使用加载这些变量dotenv:


dotenv
  

按照之前的方法进行验证。
Output:


value1
value2
  

 

F.A.Q

问:如何使用export设置默认编辑器的命令?

A:使用以下命令设置默认编辑器export命令,需要修改EDITOR环境变量。例如,如果您想设置vim作为默认编辑器,您可以使用以下命令:


export EDITOR=vim  

如果您想使其永久化,请将以上行添加到您的 shell 配置文件中(~/.bashrc, ~/.bash_profile, or ~/.profile),然后保存并关闭文件。要使更改生效,您可以使用source命令:


source ~/.bashrc  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 中设置永久和系统范围的环境变量 的相关文章

  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • Linux 中有没有一种轻量级的方法来获取当前进程数?

    我希望我的 基于 C C 的 程序显示一个数字指示器 指示本地系统上当前有多少个进程 将经常查询正在运行的进程数值 例如每秒一次 以更新我的显示 有没有一种轻量级的方法来获取该数字 显然我可以调用 ps ax wc l 但我不想强迫计算机生
  • 在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

    我有一个 dotnet SDK sln and a build proj with
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub

随机推荐

  • 如何在 CentOS 8 上安装 Anaconda

    Anaconda 是最流行的 Python R 数据科学和机器学习平台 它用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带 1 500 多个开源数据包 它还包括conda命令行工具和称为 Anaconda Navigat
  • 如何在 Ubuntu 18.04 上安装 Magento 2

    Magento是基于开源技术构建的领先企业级电子商务平台 将强大的功能与灵活性和用户友好的界面相结合 凭借引人入胜的购物体验 灵活的模块化架构以及企业级可扩展性和性能等功能 Magento 是大多数在线商家的首选平台 在本教程中 我们将向您
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype是世界上最流行的通信应用程序之一 它是跨平台的 可在 Windows Linux 和 macOS 上使用 通过 Skype 您可以免费进行在线音频和视频通话 以及拨打世界各地的手机和固定电话的国际电话 Skype 不是开源应用程序
  • 如何使用 .htaccess 强制使用 HTTPS

    如果您为域安装了 SSL 证书 则下一步应该是将应用程序配置为通过 HTTPS 提供所有 Web 流量 与以明文形式发送和返回请求和响应的 HTTP 不同 HTTPS 使用 TLS SSL 来加密客户端和服务器之间的通信 相对于 HTTP
  • 如何在 CentOS 8 上安装和配置 NFS 服务器

    网络文件系统 NFS 是一种分布式文件系统协议 允许您通过网络共享远程目录 使用 NFS 您可以在系统上挂载远程目录并像使用本地文件一样使用远程计算机上的文件 NFS 协议默认不加密 并且与 Samba 不同 它不提供用户身份验证 对服务器
  • 如何检查 Bash 中文件或目录是否存在

    很多时候 在编写 Shell 脚本时 您可能会发现自己处于需要根据文件是否存在来执行操作的情况 在Bash中 可以使用test命令来检查文件是否存在并判断文件的类型 测试命令采用以下语法形式之一 test EXPRESSION EXPRES
  • 如何在 Python 中分割字符串

    使用字符串时 日常操作之一是使用给定的分隔符将字符串拆分为子字符串数组 在这篇文章中 我们将讨论如何在Python中分割字符串 split 方法 在Python中 字符串被表示为不可变的str对象 这str类附带了许多字符串方法 允许您操作
  • 如何在 Ubuntu 18.04 上安装和配置 Samba

    Samba 是一个免费且开源的重新实现SMB CIFS网络文件共享协议那 允许最终用户访问文件 打印机和其他共享资源 本教程介绍如何在 Ubuntu 18 04 上安装 Samba 并将其配置为独立服务器 以通过网络在不同操作系统之间提供文
  • 如何在 CentOS 7 上安装和使用 Docker Compose

    Docker 组合是一个允许您定义和运行多容器 Docker 应用程序的工具 使用 Compose 您可以在单个 YAML 文件中定义应用程序的服务 网络和卷 然后使用单个命令启动您的应用程序 Compose 可用于不同的目的 例如单主机应
  • 在 Debian 9 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费开放的证书颁发机构 如今 Let s Encrypt 颁发的证书几乎受到所有浏览器的信任 在本教程中 我们将解释如何使用 Certbot 工具为 Debian 9 上的
  • 如何在 Ubuntu 18.04 上安装和配置 GitLab

    GitLab 是一个基于网络的开源Git存储库管理器编写为Ruby包括 wiki 问题管理 代码审查 监控以及持续集成和部署 它使开发人员能够创建 审查和部署他们的项目 GitLab 提供三种不同版本 社区版 CE 企业版 EE 和 Git
  • 如何在 Ubuntu 18.04 上安装 Steam

    Steam是由 Valve 公司开发的用于购买和玩视频游戏的跨平台娱乐平台 它使您可以访问数千种游戏并结识新朋友 在本教程中 我们将向您展示如何在 Ubuntu 18 04 上安装 Steam 相同的说明适用于 Ubuntu 16 04 和
  • Python 中的列表与元组:综合指南

    Python 提供了多种内置数据类型 其中两个是列表和元组 了解这些数据结构的细微差别对于编写高效且有效的 Python 代码至关重要 在本教程结束时 您将能够就何时使用列表以及何时选择元组做出明智的决定 从而提高您在 Python 中处理
  • 使用 to_pickle() 函数将 Pandas DataFrame 导出到 Pickle 文件

    The to pickle函数于Pandas允许您将 DataFrame 或 Series 对象序列化 pickle 为 pickle 文件格式 当您想要保存 DataFrame 或 Series 的当前状态并稍后检索它而不丢失任何数据或元
  • 掌握 Samba:创建强大的 Linux 文件服务器

    Linux 文件服务器是功能强大的服务器之一 可帮助您与基于 Windows 的 PC 和其他操作系统共享文件和打印机 在我们讨论使用 Samba 作为文件服务器之前 我们先讨论一些基础知识 目录 hide 1 Linux Samba Wi
  • Linux Sed 分支:条件文本处理

    分支于sed允许您在 sed 脚本中创建条件工作流程 根据输入或特定条件 sed 可以选择执行一组命令而不是另一组命令 它类似于编程中的 if then else 结构 让我们深入研究一些示例来了解 sed 中的分支机制 目录 hide 1
  • 使用 read_pickle 读取 Pandas 中的 Pickle 文件

    read pickle in Pandas允许您加载腌制的 Pandas 对象 它可以加载数据 例如数据框和使用保存的系列熊猫 to pickle method 在本教程中 我们将揭示其语法 将 pickle 文件加载到 DataFrame
  • 在 Linux 上恢复已删除的文件(初学者教程)

    您是否曾经错误地删除过重要文件 谁不呢 好的 但是我可以恢复它们吗 在这篇文章中 您将了解如何使用不同文件系统上的各种程序在 Linux 上恢复已删除的文件 您将了解如何从 SD 卡 HDD 和不同分区上的已删除分区恢复已删除的文件Linu
  • 掌握 seq 命令:Linux 中的序列生成

    The seqLinux 中的命令用于生成数字序列 如果您想生成一个简单的增量列表或具有特定格式的复杂序列 seq可以做到这一点 让我们深入了解它的强大功能 目录 hide 1 生成从 1 到指定数字的序列 2 生成两个数字之间的序列 3
  • 在 Linux 中设置永久和系统范围的环境变量

    在 Linux 中 环境变量是一个可用于提供系统不同部分的配置和数据的值 这些变量充当数据的占位符 使应用程序和 shell 能够更顺畅地相互交互 环境变量的一个主要优点是它们促进进程之间的值共享 从而实现对系统行为各方面的集中控制 目录