良许Linux教程网 干货合集 Linux中向$PATH添加目录详细步骤

Linux中向$PATH添加目录详细步骤

大家有没有想过一个问题,在Linux系统中为什么ls命令可以在任何目录下?这和$PATH有着极大的关系$PATH是Linux计算机后台的无声操纵器之一。 它会悄悄地影响您的用户体验,但是没有什么阴暗的地方。 我们将解释它的作用以及如何调整它。

Linux中向$PATH添加目录详细步骤

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

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

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

Shell定位可执行文件所采取的第一步是确定是否包含二进制文件。 如果您使用的命令在外壳程序本身( “外壳程序内置” )中,则无需进一步搜索。

Shell内置程序最容易找到,因为它们是Shell不可或缺的。 就像将它们放在工具带中一样-它们始终与您同在。

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

如果要查看命令是内置Shell,别名,函数还是独立的二进制mv / work / unfile ,则可以使用type命令,如下所示:

 type clear
 type cd

The "type clear" and "type cd" commands in a terminal window.

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

毫不奇怪, cd是内置的shell。

## 列出您的PATH)

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

 echo $PATH

The "echo $PATH" command in a terminal window.

输出是结肠的列表( : )分隔的文件系统中的位置。 Shell通过路径从左到右搜索,检查每个文件系统位置是否有匹配的可执行文件来执行命令。

我们可以通过清单选择方法,以查看将要搜索的文件系统位置以及搜索顺序:

  • /usr/local/sbin

    /usr/local/sbin

  • /usr/local/bin

    /usr/local/bin

  • /usr/sbin

    /usr/sbin

  • /usr/bin

    /usr/bin

  • /sbin

    /sbin

  • /bin

    /bin

  • /usr/games

    /usr/games

  • /usr/local/games

    /usr/local/games

  • /snap/bin

    /snap/bin

可能不会立即显而易见的是搜索不在当前工作目录中开始。 而是通过列出的目录(仅列出的目录)工作。

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

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

我们键入以下which命令, 以向我们展示外壳程序将找到并使用哪个程序版本

 which rf

The "which rf" command in a terminal window.

外壳程序报告找到的版本是路径中目录中的版本。

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

 rf

The "rf" command in a terminal window.

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

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

 ./work/rf

The "./work/rf" command in a terminal window.

既然我们已经告诉Shell在哪里可以找到我们要运行的rf版本,它就使用1.1版。 如果希望使用此版本,可以将其复制到/usr/local/bin目录中并覆盖旧版本。

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

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

如果将工作目录添加到路径,则使外壳程序找到我们的版本。 而且此更改只会影响我们,其他人仍将使用/usr/local/binrf版本。

将目录添加到您的PATH)

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

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

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

The "export PATH=/home/dave/work:$PATH" command in a terminal window.

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

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

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

 echo $PATH

The "echo $PATH" command in a terminal window.

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

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

 which rf

The "which rf" command in a terminal window.

布丁中的证明正在运行rf ,如下所示:

 rf

The "rf" command in a terminal window.

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

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

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

永久进行更改 (Making the Changes Permanent)

正如Beth Brooke-Marciniak所说:“成功很好,但成功却是短暂的。” 关闭终端窗口后,对$PATH所做的任何更改都将消失。 要使它们永久存在,必须将export命令放在配置文件中。

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

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

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

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

 gedit .bashrc

The "gedit .bashrc" command in a terminal window.

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

The gedit editor with the ".bashrc" file loaded.

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

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

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

 . .bashrc
 . .bashrc

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

 echo $PATH

The ". .bashrc" and "echo $PATH" commands in a terminal window.

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

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

 gedit .profile

The "gedit .profile" command in a terminal window.

gedit编辑器将在加载.profile文件后启动。

The gedit editor with the ".profile" file loaded.

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

 . .profile

## 为所有人设定道路 (Setting the Path for Everyone)

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

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

 sudo gedit /etc/profile

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

The gedit editor with the "/etc/profile" file loaded.

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

安全注意事项 (A Note on Security)

确保不要在路径中意外添加冒号“ : ”,如下所示。

The "echo $PATH" command with a colon highlighted in a terminal window.

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

如果第一个档案包含一个名为unzip的可执行文件,它是一个恶意可执行文件,则您可能会意外地启动该文件而不是真正的unzip可执行文件。 发生这种情况是因为外壳程序将首先在当前目录中查找。

因此,键入export命令时请务必小心。 使用echo $ PATH查看它们,并确保它们符合您的期望。

以上就是良许教程网为各位朋友分享的Linux系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!

137e00002230ad9f26e78-265x300

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部