$PATH是Linux计算机后台的静默操纵器之一。它会悄悄地影响你的用户体验,但这并没有什么不好的地方。我们将解释它的作用,以及如何调整它。
当您在终端窗口中键入一个命令并按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。
很容易看出你的道路上有什么。只需键入以下内容即可使用echo命令并打印$PATH变量中的值:
echo $PATH输出是以冒号(:)分隔的文件系统位置列表。shell从左到右搜索路径,检查每个文件系统位置是否有匹配的可执行文件来执行命令。
我们可以在列表中选择要搜索的文件系统位置,以及它们的搜索顺序:
可能不是很明显的一点是,搜索没有在当前工作目录中启动。相反,它通过列出的目录工作,并且只通过列出的目录。
如果当前工作目录不在您的路径中,则不会对其进行搜索。另外,如果命令存储在不在路径中的目录中,shell将找不到它们。
为了演示这一点,我们创建了一个名为rf的小程序。执行时,rf打印在终端窗口中启动该目录的名称。它位于/usr/local/bin中。我们在/dave/work目录中也有一个新版本。
我们键入以下命令来显示shell将查找和使用的程序版本:
which rfshell报告它找到的版本是路径中目录中的版本。
我们键入以下命令来启动它:
rf版本1.0的射频运行和确认我们的期望是正确的。找到并执行的版本位于/usr/local/bin中。
要在此计算机上运行任何其他版本的rf,我们必须使用命令行上可执行文件的路径,如下所示:
./work/rf现在我们已经告诉shell在哪里可以找到我们想要运行的rf版本,它使用的是版本1.1。如果我们喜欢这个版本,我们可以将它复制到/usr/local/bin目录并覆盖旧的。
假设我们正在开发rf的新版本。在开发和测试它时,我们需要经常运行它,但我们不想将未发布的开发构建复制到实时环境中。
或者,也许我们已经下载了一个新版本的rf,并想在它公开之前做一些验证测试。
如果我们将工作目录添加到路径中,我们会使shell找到我们的版本。而这个改变只会影响我们其他人仍然会使用rf-in/usr/local/bin版本。
您可以使用export命令将目录添加到$PATH。然后,该目录将包含在shell搜索的文件系统位置列表中。当shell找到匹配的可执行文件时,它将停止搜索,因此您需要确保它首先搜索您的目录,在/usr/local/bin之前。
这很容易做到。对于我们的示例,我们键入以下内容将目录添加到路径的开头,以便它是第一个搜索的位置:
export PATH=/home/dave/work:$PATH此命令将$PATH设置为等于我们正在添加的目录,/home/dave/work,然后设置整个当前路径。
第一条路径没有美元符号($)。我们设置路径的值。最后的$PATH有一个美元符号,因为我们引用的是PATH变量中存储的内容。另外,请注意新目录和$PATH变量名之间的冒号(:)。
让我们看看现在的路径是什么样子:
echo $PATH我们的/home/dave/work目录被添加到路径的开头。我们提供的冒号将它与路径的其余部分分开。
我们键入以下内容以验证我们的rf版本是第一个找到的版本:
which rf布丁中的证明是运行rf,如下所示:
rfshell找到版本1.1并从/home/dave/work执行它。
要将目录添加到路径的末尾,只需将其移动到命令的末尾,如下所示:
export PATH=$PATH:/home/dave/work正如Beth Brooke Marciniak所说,“成功是美好的,但成功是转瞬即逝的。”当你关闭终端窗口的那一刻,你对$PATH所做的任何更改都消失了。要使它们永久化,必须将export命令放在配置文件中。
在.bashrc文件中放入export命令时,每次打开终端窗口时,它都会设置路径。与SSH会话不同,SSH会话需要登录,它们被称为“交互式”会话。
过去,您会将export命令放在.profile文件中,以设置登录终端会话的路径。
但是,我们发现,如果我们将export命令放在.bashrc或.profile文件中,它就可以正确地设置交互和登录终端会话的路径。你的经历可能不同。为了处理所有可能发生的情况,我们将向您展示如何在这两个文件中执行此操作。
在/home目录中使用以下命令编辑.bashrc文件:
gedit .bashrcgedit编辑器打开并加载.bashrc文件。
滚动到文件底部,然后添加前面使用的以下导出命令:
export PATH=/home/dave/work:$PATH保存文件。接下来,关闭并重新打开终端窗口,或者使用dot命令读取.bashrc文件,如下所示:
. .巴什尔
然后,键入以下echo命令以检查路径:
echo $PATH这会将/home/dave/work目录添加到路径的开头。
将命令添加到.profile文件的过程是相同的。键入以下命令:
gedit .profilegedit编辑器启动时加载了.profile文件。
将export命令添加到文件的底部,然后保存它。关闭和打开新的终端窗口不足以强制重新读取.profile文件。要使新设置生效,必须注销和返回或使用dot命令,如下所示:
. .profile相关:如何使用gedit在Linux上以图形方式编辑文本文件
要为使用系统的每个人设置路径,可以编辑/etc/profile文件。
您需要使用sudo,如下所示:
sudo gedit /etc/profile当gedit编辑器启动时,将export命令添加到文件的底部。
保存并关闭文件。这些更改将在其他人下次登录时对其生效。
确保不要意外地在路径中添加一个前导冒号“:”,如下所示。
如果您这样做,这将首先搜索当前目录,这将带来安全风险。假设您下载了一个存档文件并将其解压缩到目录中。您可以查看这些文件,然后看到另一个压缩文件。您再次调用解压缩以提取该存档。
如果第一个存档包含一个名为unzip的可执行文件,它是一个恶意的可执行文件,那么您可能会意外地触发该文件,而不是真正的unzip可执行文件。这是因为shell将首先查看当前目录。
因此,键入导出命令时一定要小心。使用echo$PATH检查它们并确保它们是您想要的方式。
... 今天我们将介绍如何在Windows、Mac和Linux上将命令的输出发送到bashshell中的文本文件。 ...
... 但不一定要这样。是时候学习如何只使用别名通过SSH高效登录、传输单个文件或目录、执行远程SSH命令以及轻松地将远程服务器装载到本地目录了。 ...
...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...
...加密了数据,并使与其他人共享文件变得容易。下面介绍如何使用PowerShell压缩和解压文件。 如何使用powershell压缩文件 让我们首先使用Compress-archive cmdlet将一些文件压缩到ZIP文件存档中。它获取要压缩的任何文件的路径。多个...
...小又简单。 在使用Linux计算机的第一个小时内,您将学习如何使用Bash和其他shell附带的cd命令。也许您以前有在其他操作系统上使用它的经验,不需要解释。它会改变当前的工作目录,对吗?还有什么要知道的? 好吧,比你想象...
...在shell中的,因此Bash不必费劲地查找这些命令。 但是Bash如何定位其他命令、程序和外部独立二进制文件呢?Bash使用路径,实际上是一组路径,每个路径指向一个目录。然后,它在每个目录中搜索与您试图运行的命令或程序匹配...
...是一个文本文件,其中列出了相应的详细信息。 相关:如何在Linux上使用Git安装软件 创建.desktop文件 在这台测试计算机上,我们有一个没有.desktop文件的程序。 首先要做的是检查应用程序是否运行。如果没有,你也无法让它与.d...
...能够还原这些文件的唯一方法就是从备份中进行还原。 如何使用rm删除文件 最简单的情况是删除当前目录中的单个文件。键入rm命令、空格,然后键入要删除的文件名。 rm file_1.txt 如果文件不在当前工作目录中,请提供文件位...