如何在 Linux 中将目录添加到您的 PATH如何在 Linux 中将目录添加到您的 PATH如何在 Linux 中将目录添加到您的 PATH如何在 Linux 中将目录添加到您的 PATH
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 中将目录添加到您的 PATH

PATH 是 Linux 计算机后台的无声操纵器之一。它会悄悄地影响您的用户体验,但没有什么不好的。我们将解释它的作用,以及如何调整它。

Linux 上的 $PATH 是什么,它是如何工作的?

当您在终端窗口中键入命令并按 Enter 键时,您甚至在命令执行之前就开始了相当多的活动。

Bash 是大多数 Linux 发行版的默认 shell。它解释您输入的文本行并识别与参数、管道、重定向和其他任何内容混合在一起的命令名称。然后它会找到这些命令的可执行二进制文件并使用您提供的参数启动它们。

shell 定位可执行文件的第一步是识别是否涉及二进制文件。如果您使用的命令在 shell 本身(“内置 shell”)中,则无需进一步搜索。

Shell 内置函数是最容易找到的,因为它们是 Shell 不可或缺的一部分。这就像把它们放在工具带里——它们总是和你在一起。

但是,如果您需要其他工具之一,则必须到车间翻找才能找到。它是在您的工作台上还是挂在墙上的衣架上?这就是 PATH 环境变量的作用。它包含 shell 搜索位置的列表以及它们将被搜索的顺序。

如果您想查看命令是 shell 内置命令、别名、函数还是独立的二进制文件 mv /work/unfile,您可以使用 type 命令,如下所示:

type clear
type cd

这告诉我们 clear 是一个二进制文件,路径中找到的第一个文件位于 /usr/bin。您的计算机上可能安装了多个版本的 clear,但 shell 会尝试使用这个版本。

不出所料,cd 是一个 shell 内置命令。

列出你的 $PATH

很容易看到你的路径中有什么。只需键入以下命令即可使用 echo 命令并打印 PATH 变量中保存的值:

echo $PATH

输出是冒号 (:) 分隔的文件系统位置列表。 shell 从左到右搜索路径,检查每个文件系统位置以查找匹配的可执行文件来执行您的命令。

我们可以通过列表选择我们的方式来查看将被搜索的文件系统位置,以及它们被搜索的顺序:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /usr/games
  • /usr/local/games
  • /snap/bin

可能不是很明显的一点是搜索不是从当前工作目录开始的。相反,它在列出的目录中工作,并且只在列出的目录中工作。

如果当前工作目录不在您的路径中,则不会搜索它。此外,如果您将命令存储在不在路径中的目录中,shell 将找不到它们。

为了证明这一点,我们创建了一个名为 rf 的小程序。执行时,rf 会在终端窗口中打印启动目录的名称。它位于 /usr/local/bin。我们在 /dave/work 目录中也有更新的版本。

我们键入以下 which 命令来告诉我们 shell 将找到并使用我们程序的哪个版本:

which rf

shell 报告它找到的版本是路径中目录中的版本。

我们输入以下内容来启动它:

rf

rf 的 1.0 版运行并确认我们的预期是正确的。找到并执行的版本位于 /usr/local/bin。

要在此计算机上运行任何其他版本的 rf,我们必须在命令行中使用可执行文件的路径,如下所示:

./work/rf

现在我们已经告诉 shell 在哪里可以找到我们要运行的 rf 版本,它使用版本 1.1。如果我们更喜欢这个版本,我们可以将它复制到 /usr/local/bin 目录并覆盖旧版本。

假设我们正在开发新版本的 rf。我们在开发和测试它时需要经常运行它,但我们不想将未发布的开发版本复制到实时环境中。

或者,也许我们已经下载了新版本的 rf,并希望在公开发布之前对其进行一些验证测试。

如果我们将我们的工作目录添加到路径中,我们会让 shell 找到我们的版本。而这个变化只会影响我们——其他人仍然会使用 /usr/local/bin 中的 rf 版本。

将目录添加到您的 $PATH

您可以使用 export 命令将目录添加到 PATH。然后该目录包含在 shell 搜索的文件系统位置列表中。当 shell 找到匹配的可执行文件时,它会停止搜索,因此您要确保它先搜索您的目录,然后再搜索 /usr/local/bin。

这很容易做到。对于我们的示例,我们键入以下内容以将我们的目录添加到路径的开头,因此它是搜索的第一个位置:

export PATH=/home/dave/work:$PATH

此命令将 PATH 设置为等于我们要添加的目录 /home/dave/work,然后是整个当前路径。

第一个 PATH 没有美元符号 ($)。我们设置了 PATH 的值。最后的 PATH 有一个美元符号,因为我们正在引用存储在 PATH 变量中的内容。另外,请注意新目录和 PATH 变量名称之间的冒号 (:)。

让我们看看路径现在是什么样的:

echo $PATH

我们的 /home/dave/work 目录被添加到路径的开头。我们提供的冒号将它与路径的其余部分分开。

我们键入以下内容以验证我们的 rf 版本是第一个找到的版本:

which rf

布丁中的证明是运行rf,如下图:

rf

shell 找到版本 1.1 并从 /home/dave/work 执行它。

要将我们的目录添加到路径的末尾,我们只需将其移动到命令的末尾,如下所示:

export PATH=$PATH:/home/dave/work

使更改永久化

正如 Beth Brooke-Marciniak 所说,“成功很好,但成功转瞬即逝。”在您关闭终端窗口的那一刻,您对 PATH 所做的任何更改都将消失。要使它们永久存在,您必须将 export 命令放入配置文件中。

当您将 export 命令放入您的 .bashrc 文件时,它会在您每次打开终端窗口时设置路径。与您必须登录的 SSH 会话不同,这些会话称为“交互式”会话。

过去,您会将 export 命令放入您的 .profile 文件中,以设置用于登录终端会话的路径。

但是,我们发现如果我们将 export 命令放在 .bashrc 或 .profile 文件中,它会正确地设置交互路径并登录终端会话。您的体验可能会有所不同。为了处理所有可能发生的情况,我们将在两个文件中向您展示如何操作。

在 /home 目录中使用以下命令编辑 .bashrc 文件:

gedit .bashrc

gedit 编辑器打开并加载了 .bashrc 文件。

滚动到文件底部,然后添加我们之前使用的以下导出命令:

export PATH=/home/dave/work:$PATH

保存文件。接下来,要么关闭并重新打开终端窗口,要么使用 dot 命令读取 .bashrc 文件,如下所示:

<代码>。 .bashrc

然后,键入以下 echo 命令来检查路径:

echo $PATH

这会将 /home/dave/work 目录添加到路径的开头。

将命令添加到 .profile 文件的过程是相同的。键入以下命令:

gedit .profile

gedit 编辑器启动时加载了 .profile 文件。

将 export 命令添加到文件底部,然后保存。关闭并打开新的终端窗口不足以强制重新读取 .profile 文件。要使新设置生效,您必须注销并重新登录或使用 dot 命令,如下所示:

. .profile

为每个人设定路径

要为使用系统的每个人设置路径,您可以编辑/etc/profile 文件。

您需要使用 sudo,如下所示:

sudo gedit /etc/profile

当 gedit 编辑器启动时,将导出命令添加到文件底部。

保存并关闭文件。更改将在其他人下次登录时生效。

安全注意事项

确保您没有不小心在路径中添加前导冒号“:”,如下所示。

如果这样做,这将首先搜索当前目录,这会带来安全风险。假设您下载了一个存档文件并将其解压缩到一个目录中。您查看这些文件并看到另一个压缩文件。您再次调用 unzip 以提取该存档。

如果第一个存档包含一个名为 unzip 的可执行文件,它是一个恶意可执行文件,您会不小心启动该文件而不是真正的 unzip 可执行文件。发生这种情况是因为 shell 会首先在当前目录中查找。

因此,在键入 export 命令时一定要小心。使用 echo PATH 来查看它们并确保它们是您希望的样子。

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

©2015-2025 艾丽卡 support@alaica.com