介绍
欢迎来到这个关于 Linux 环境变量的动手实验!环境变量是动态值,可以影响计算机上运行进程的行为。它们在系统配置和程序执行中起着至关重要的作用。通过掌握环境变量,你将获得 Linux 系统管理和软件开发的基本技能。
在本实验中,你将学习如何创建、查看、修改和删除环境变量。我们还将探讨如何使这些更改永久生效,并了解 Linux 中一些最重要的内置环境变量。无论你是初学者还是希望巩固理解,本实验都将提供宝贵的动手经验。
让我们开始吧!
欢迎来到这个关于 Linux 环境变量的动手实验!环境变量是动态值,可以影响计算机上运行进程的行为。它们在系统配置和程序执行中起着至关重要的作用。通过掌握环境变量,你将获得 Linux 系统管理和软件开发的基本技能。
在本实验中,你将学习如何创建、查看、修改和删除环境变量。我们还将探讨如何使这些更改永久生效,并了解 Linux 中一些最重要的内置环境变量。无论你是初学者还是希望巩固理解,本实验都将提供宝贵的动手经验。
让我们开始吧!
在我们深入探讨环境变量之前,让我们先从基本的 shell 变量开始。这将帮助你理解 Linux 中变量的概念。
打开你的终端。你应该在 /home/labex/project
目录中。如果不在,可以使用以下命令切换到该目录:
cd /home/labex/project
现在,让我们创建一个简单的 shell 变量。在 Linux 中,你可以通过将一个值赋给一个名称来创建变量。让我们创建一个名为 my_var
的变量:
my_var="Hello, Linux"
重要提示: 在 Bash(以及本实验中使用的 Zsh)中赋值变量时,等号(=
)周围不能有空格。my_var = "Hello, Linux"
或 my_var= "Hello, Linux"
会导致错误。
要查看变量的值,我们使用 echo
命令,并在变量名前加上 $
。$
告诉 shell 替换变量的值:
echo $my_var
你应该会看到输出:
Hello, Linux
你也可以在其他命令或赋值中使用变量。例如:
echo "The value of my_var is: $my_var"
这将输出:The value of my_var is: Hello, Linux
干得好!你刚刚创建并使用了你的第一个 shell 变量。然而,这个变量仅在当前 shell 会话中可用。如果你打开一个新的终端窗口或标签页,这个变量将不可用。这就是环境变量的用武之地。
现在我们已经理解了基本的变量,接下来让我们探索环境变量。环境变量是 shell 的任何子进程都可以访问的变量。这意味着它们可以被从该 shell 运行的脚本和程序访问。
要查看所有当前的环境变量,可以使用 env
命令:
env
这将显示一长串变量。如果你还不理解所有这些变量,不用担心——我们稍后会介绍一些最重要的变量。
最重要的环境变量之一是 PATH
。让我们来看一下它:
echo $PATH
PATH
变量列出了系统查找可执行程序的目录。每个目录之间用冒号(:
)分隔。
现在,让我们创建自己的环境变量。我们使用 export
命令来创建环境变量:
export MY_ENV_VAR="This is an environment variable"
export
命令使变量对子进程可用。这是 shell 变量和环境变量之间的关键区别。
为了说明这种区别,让我们创建一个 shell 脚本,尝试访问一个普通的 shell 变量和一个环境变量:
echo '#!/bin/bash
echo "Shell variable: $my_var"
echo "Environment variable: $MY_ENV_VAR"' > test_vars.sh
使脚本可执行:
chmod +x test_vars.sh
现在运行脚本:
./test_vars.sh
你应该会看到环境变量(MY_ENV_VAR
)是可访问的,而 shell 变量(my_var
)则不可访问。这是因为 my_var
没有被导出,所以子进程(如脚本)不知道它的存在。
为了验证 MY_ENV_VAR
现在是一个环境变量,我们可以再次使用 env
命令,但这次我们会使用 grep
过滤输出:
env | grep MY_ENV_VAR
你应该会在输出中看到你的新变量。
你也可以直接检查新环境变量的值:
echo $MY_ENV_VAR
太棒了!你现在已经创建了你的第一个环境变量,并看到了它与 shell 变量的区别。关键区别在于,使用 export
创建的环境变量对子进程可用,而 shell 变量则不可用。
环境变量和 shell 变量各自有自己的作用域。当你导出一个变量(例如,export MY_ENV_VAR="something"
),它对从该 shell 启动的任何子进程(例如,由同一 shell 运行的 shell 脚本)都可用。然而,如果你打开一个完全独立的 shell 会话,它不会继承当前 shell 的变量,除非你在启动文件(如 .zshrc
或 .bashrc
)中专门设置了它们。
换句话说:
.zshrc
)中设置的变量会应用于该 shell 的所有新会话。你无法直接读取另一个用户或另一个 shell 的变量,因为每个进程都维护自己的环境。如果你启动一个新的 shell,它会获得父 shell 导出的变量的副本,但不会获得仅在原始 shell 中设置而未使用 export
的变量。
我们将在接下来的步骤中学习如何永久设置环境变量。
PATH
变量是 Linux 中最重要的环境变量之一。它告诉系统在哪里查找可执行文件。让我们修改它,以包含一个新目录。
首先,让我们创建一个新目录,用于存储自定义脚本:
mkdir ~/my_scripts
这会在你的主目录中创建一个名为 my_scripts
的目录。~
符号是你主目录路径的快捷方式,在本实验中是 /home/labex
。
现在,让我们将这个新目录添加到你的 PATH
中。我们将使用 export
命令,但这次是修改一个现有的变量:
export PATH="$PATH:$HOME/my_scripts"
让我们分解一下:
$PATH
是当前 PATH
环境变量的值。我们使用现有值并对其进行扩展。:
用于分隔 PATH
中的目录。如果省略冒号,shell 将无法在你添加的目录中找到可执行文件。$HOME
是一个指向你主目录的环境变量(在本例中再次是 /home/labex
)。:$HOME/my_scripts
附加到现有的 PATH
中。这告诉系统在搜索原始 PATH
中的目录之后,还要在 my_scripts
中查找可执行文件。验证新目录是否已添加:
echo $PATH
你应该会在输出的末尾看到 /home/labex/my_scripts
。如果它不在末尾,你可能以不同的方式修改了它,这没关系,但你的 PATH
中仍然应该包含 /home/labex/my_scripts
路径。
为了测试这一点,让我们在新目录中创建一个简单的脚本:
echo '#!/bin/bash
echo "Hello from my custom script!"' > ~/my_scripts/hello.sh
这会在 ~/my_scripts
目录中创建一个名为 hello.sh
的 shell 脚本。第一行 #!/bin/bash
告诉系统这是一个 bash 脚本,允许它作为程序执行。
使脚本可执行:
chmod +x ~/my_scripts/hello.sh
chmod +x
命令为脚本添加执行权限,允许它作为程序运行。如果你不执行此步骤,当你尝试执行脚本时,会收到“权限被拒绝”的错误。
现在,你应该能够通过直接输入脚本名称从任何地方运行它:
hello.sh
如果一切正常,你应该会看到:Hello from my custom script!
这是因为我们将 my_scripts
目录添加到了 PATH
中。当你输入一个命令时,shell 会按顺序在 PATH
列出的每个目录中查找具有该名称的可执行文件。通过将 my_scripts
添加到 PATH
,我们告诉 shell 也要在那里查找可执行文件。
为了演示这一点,尝试切换到另一个目录并再次运行脚本:
cd /tmp
hello.sh
你会看到脚本仍然可以运行,即使你不在脚本所在的目录中。这就是 PATH
变量的强大之处——它允许你从系统中的任何地方运行可执行文件,只要它们位于 PATH
列出的目录中。
干得好!你已经成功修改了 PATH
环境变量,并创建了一个可以从任何地方运行的自定义脚本。
我们设置的环境变量会在你关闭终端时丢失。为了使它们永久生效,我们需要将它们添加到 shell 配置文件中。具体文件取决于你使用的 shell。
在本实验环境中,我们使用的是 Z shell(zsh),它是 Bourne Shell(sh)的扩展版本,具有许多改进,包括 Bash、ksh 和 tcsh 的一些功能。Zsh 越来越受欢迎,现在已成为 macOS 的默认 shell。
如果你使用的是 Bash(在许多 Linux 发行版中仍然是默认 shell),你需要修改 .bashrc
。然而,由于我们使用的是 Zsh,我们将修改 .zshrc
。使用正确的文件非常重要。如果你在使用 zsh 时修改了 .bashrc,变量将不会被设置。
使用文本编辑器打开主目录中的 .zshrc
文件。我们将使用 nano
,这是一个简单的基于终端的文本编辑器:
nano ~/.zshrc
此命令会打开 ~/.zshrc
文件,其中 ~
再次是你主目录 /home/labex
的快捷方式。如果 .zshrc
文件不存在,nano
会创建一个新文件。每次启动新的终端会话时,都会执行此文件。
滚动到文件底部(可以使用箭头键),并添加以下行:
export MY_ENV_VAR="This is an environment variable"
export PATH="$PATH:$HOME/my_scripts"
确保将这些行添加到文件的底部。确保拼写和语法正确,尤其是 =
符号周围没有空格。
保存文件并退出编辑器。在 nano 中,你可以通过按 Ctrl+X
,然后按 Y
(保存),最后按 Enter
来完成。
要在不重启终端的情况下应用这些更改,请使用 source
命令:
source ~/.zshrc
source
命令从指定的文件中读取并执行命令,并在当前 shell 环境中生效。这与使用 bash ~/.zshrc
简单地执行文件不同,后者会在新的 shell 中运行脚本,而不会影响当前的 shell。source
在当前 shell 中运行它,因此你的更改会立即生效。如果你跳过此步骤,你的更改将不会在当前终端中生效,你必须关闭并重新打开终端才能看到更改。
现在,每次打开新终端时,这些环境变量都会被设置。这对于一致地设置你的开发环境非常有用。
Linux 有几个内置的环境变量,它们对系统操作至关重要。让我们来探索其中的一些:
HOME
:指向当前用户的主目录。
echo $HOME
USER
:包含当前用户的用户名。
echo $USER
SHELL
:指定用户的默认 shell。
echo $SHELL
PWD
:代表“Print Working Directory”(打印工作目录)。它包含当前目录的路径。
echo $PWD
TERM
:指定运行 shell 时要模拟的终端类型。
echo $TERM
理解这些变量可以帮助你更好地导航和控制你的 Linux 环境。
有时,你可能需要移除一个环境变量。这可以通过 unset
命令来完成。
首先,让我们检查 MY_ENV_VAR
是否仍然设置:
echo $MY_ENV_VAR
你应该会看到我们之前设置的值。
要取消设置(移除)这个变量,使用 unset
命令:
unset MY_ENV_VAR
验证变量是否已被取消设置:
echo $MY_ENV_VAR
你应该看不到任何输出,这表明该变量已不存在。
你也可以使用 unset
的 -v
选项,以确保你取消设置的是变量而不是 shell 函数:
unset -v MY_ENV_VAR
这将与直接运行 unset MY_ENV_VAR
产生相同的结果。
请记住,如果你已将变量添加到 .zshrc
文件中,下次打开终端或重新加载 .zshrc
文件时,它将被重新创建。
恭喜你!你已经完成了这个关于 Linux 环境变量的全面实验。让我们回顾一下你所学到的内容:
export
命令在此过程中的关键作用。PATH
变量,以包含一个自定义目录,从而允许你从系统中的任何位置运行脚本,并了解了使用冒号 :
分隔条目的重要性。.zshrc
中使其永久生效,理解了 Bash 和 Zsh shell 配置之间的区别,以及使用 source
应用更改的重要性。unset
命令取消设置(移除)环境变量。这些技能对于 Linux 系统管理和软件开发至关重要。环境变量使你能够灵活地配置系统和应用程序。随着你继续使用 Linux,你会发现环境变量在脚本编写、开发和系统配置中的无数用途。
记住,熟能生巧。尝试为不同的目的创建自己的环境变量,并探索各种应用程序和脚本如何使用环境变量来控制其行为。祝你学习愉快!