在终端键入命令时,实质是在告诉Shell运行指定可执行文件的名称。在Linux,这些可执行文件可以是lsfindfile等命令。

通常在你的系统会默认设置几个不同的目录。这些目录中存储着具有可执行权限的二进制文件,这些二进制文件都可以在任何目录中运行。

常见目录是/bin/sbin/usr/sbin/usr/local/bin/usr/local/sbin

当您在终端运行命令时,shell程序会在$PATH环境变量包含的目录中搜索命令的可执行文件。

本教程介绍如何在Linux 设置PATH环境变量。要查看PATH环境变量可以使用echo命令或者printenv命令打印当前的$PATH环境变量。

什么是 PATH 环境变量

$PATH环境变量是由冒号分隔的目录列表,告诉shell哪些目录是用于搜索命令的可执行二进制文件。

您可以使用printenvecho命令查看$PATH包含的目录。两个命令都有相同的输出。

如果您在两个不同的目录中有两个共享相同名称的可执行文件,则Shell将运行从$PATH搜索到的第一个目录执行该文件。

printenv PATH
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

将目录添加 PATH 环境变量

在某些情况下,您可能需要添加其他目录$PATH环境变量。例如,某些程序可能安装在不同的目录。

但是为了在不指定可执行文件绝对路径运行它。因此,您需要将目录添加到$PATH环境变量。

假设家目录中有一个bin的目录,要将目录添加到$PATH环境变量,请运行命令export PATH="$HOME/bin:$PATH"

现在,您只需键入可执行二进制文件的名称即可运行应用。但是,此更改只是临时的,仅在当前的Shell会话中有效。

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

持久化PATH

export命令用于设置环境变量,使用export命令设置环境变量仅在当前的shell会话可用。要使更改永久生效,您需要在PATH配置文件设置$PATH环境变量。

在大多数Linux发行版中,当系统启动时,将从/etc/environment/etc/profile以及~/.bashrc文件中读取环境变量。

全局的配置文件是/etc/environment/etc/profile。如果要为系统所有用户设置$PATH环境变量,请在这两个文件中修改。

当你为指定的用户设置$PATH环境变量时,请在~/.bashrc文件修改$PATH变量,如果使用的是Zsh,则文件是~/.zshrc

在本教程中,我们将在/etc/environment文件设置PATH环境变量,也就是为所有用户设置。

命令echo PATH="$HOME/bin:$PATH" | sudo tee -a /etc/environment将会把目录$HOME/bin添加到PATH环境变量,使用echo命令tee命令

echo PATH="$HOME/bin:$PATH" | sudo tee -a /etc/environment

现在我们已经持久化PATH环境变量,如果你还没有使用export命令设置PATH,那么当前shell会话PATH环境变量并不会被修改。

你可以运行source命令将加载环境变量到当前的shell会话。当然也可以使用export命令设置PATH环境变量。

要确定是否正确设置PATH环境变量,可以运行命令echo $PATH查看当前$PATH环境变量的值。

source /etc/environment
echo $PATH

结论

在在Linux 设置PATH环境变量非常简单。这使您可以在任何目录运行你的命令或者应用,且不需要键入可执行文件的完整路径。

相同的说明适用于任何Linux发行版,包括Ubuntu,CentOS,RHEL,Debian和Linux Mint。如有任何疑问,请随时发表评论。