linux下如何使用which命令

Linux which命令标识在向shell发出命令时启动的可执行二进制文件。如果您的计算机上有同一程序的不同版本,您可以使用哪个来确定shell将使用哪个版本。...

Linux which命令标识在向shell发出命令时启动的可执行二进制文件。如果您的计算机上有同一程序的不同版本,您可以使用哪个来确定shell将使用哪个版本。

二进制文件和路径

当您试图从终端窗口运行程序或命令时,shell(通常是现代发行版上的Bash)必须找到该命令并启动它。有些命令(如cd、history和pwd)是内置在shell中的,因此Bash不必费劲地查找这些命令。

但是Bash如何定位其他命令、程序和外部独立二进制文件呢?Bash使用路径,实际上是一组路径,每个路径指向一个目录。然后,它在每个目录中搜索与您试图运行的命令或程序匹配的可执行文件。当它找到一个时,Bash启动它并放弃搜索。

可以使用echo检查$PATH环境变量并查看路径中的目录。为此,请键入以下内容,然后按Enter键:

echo $PATH

linux下如何使用which命令

输出列表用冒号(:)分隔每条路径。在我们使用的计算机上,Bash将按以下顺序搜索以下目录:

  • /usr/本地/**in
  • /usr/本地/bin
  • /usr/**in公司
  • /usr/箱
  • /斯宾
  • /垃圾箱
  • /用户/游戏
  • /usr/本地/游戏
  • /快照/bin

文件系统中有许多名为/**in和/bin的文件夹,这可能会导致一些混乱。

小心那些路

假设我们有一个名为htg的程序的更新版本。它位于当前目录中,我们可以通过键入以下命令来运行它:

/htg公司

linux下如何使用which命令

它不是什么程序,只是打印版本号,然后关闭。新版本是1.2.138。

要在当前工作目录中运行程序,必须在程序名前面键入“./”,以便Bash知道在哪里可以找到它。

因为我们想从任何目录运行这个特定的程序,所以我们要将可执行文件移到/usr/bin目录中。Bash将在路径中找到该程序并为我们运行它。

我们不需要当前目录中的可执行文件,也不需要在程序名前键入“./”,如下所示:

sudo mv htg /usr/bin

linux下如何使用which命令

现在,让我们通过键入以下命令来运行程序:

htg

linux下如何使用which命令

有些东西在运行,但它不是我们新的更新程序。相反,它是旧版本1.2.105。

which命令

我们上面演示的问题是为什么要设计which命令。

在本例中,我们将使用which并将正在调查的程序的名称作为命令行参数传递:

which htg

linux下如何使用which命令

报告在/usr/local/bin目录中找到了htg的一个版本。因为该位置出现在我们将更新的htg移动到的目录之前的路径中,Bash使用该程序的早期版本。

但是,如果使用如下所示的-a(all)选项,即使找到匹配项也会继续搜索:

which -a htg

linux下如何使用which命令

然后列出路径中任何目录中的所有匹配项。

所以,这就是问题所在,这个程序的早期版本在一个目录中,这个目录也在补丁中。在我们删除新版本程序的目录之前,这个目录正在被搜索。

为了验证,我们可以键入以下内容并显式运行每个版本的程序:

/usr/local/bin/htg /usr/bin/htg

linux下如何使用which命令

这就解释了问题所在,解决方法很简单。

实际上,我们有选择。我们可以删除/use/local/bin目录中的旧版本,也可以将其从/usr/bin移到/usr/local/bin。

看那些结果

两个结果并不一定意味着两个二进制文件。

让我们看一个示例,在该示例中,我们将使用which命令和-a(all)选项,并查找less程序的版本:

which -a less

linux下如何使用which命令

哪两个地方有less程序的版本,但这是真的吗?在一台Linux计算机上安装两个不同版本(或者在多个位置安装同一版本)的less是很奇怪的。所以,我们不接受它的输出。相反,让我们更深入一点。

我们可以使用ls、-l(长列表)和-h(人类可读)选项来查看发生了什么:

ls -lh /usr/bin/less

linux下如何使用which命令

文件大小报告为9个字节!这绝对不是less的完整副本。

列表的第一个字符是“l”。普通文件的第一个字符是连字符(-)。“l”是一个符号,表示符号连接。如果忽略了该细节,则-->符号还表示这是一个符号链接,可以将其视为一种快捷方式。这个指向less in/bin的副本。

让我们用less in/bin的版本再试一次:

ls -lh /bin/less

linux下如何使用which命令

这个条目显然是一个“真正的”二进制可执行文件。清单的第一个字符是连字符(-),这意味着它是一个常规文件,文件大小为167KB。因此,只安装了less的一个副本,但是有一个从另一个目录指向它的符号链接,Bash在搜索路径时也会找到这个链接。

相关:如何使用ls命令列出Linux上的文件和目录

一次检查多个命令

你可以传递多个程序和命令给它,它会按顺序检查它们。

例如,如果键入:

which ping cat uptime date head

linux下如何使用which命令

它通过提供给它的程序和命令列表工作,并列出每个程序和命令的结果。

哪个是哪个?

如果您有这种倾向,您也可以通过键入以下内容来使用它本身:

which which

除了出于好奇而浏览Linux文件系统之外,当您期望从一个命令或程序获得一组行为时,这是最有用的。

在这些情况下,您可以使用哪个来验证Bash正在启动的命令是您想要使用的命令。

  • 发表于 2021-04-02 20:07
  • 阅读 ( 166 )
  • 分类:互联网

你可能感兴趣的文章

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 268 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 331 )

如何使用mv命令移动linux文件

虽然您可能已经知道如何使用GUI文件浏览器在Linux中移动文件,但您可能想知道终端中是否有move命令允许您将文件快速移动到不同的目录。mv命令就是您想要的命令,它的简单语法和一些可选的安全标志很容易使用。 ...

  • 发布于 2021-03-28 17:18
  • 阅读 ( 238 )

如何在ubuntulinux上管理启动程序

...您可能还想将自己喜欢的程序添加到启动过程中。下面是如何控制Ubuntu在登录时启动什么。 我们在Ubuntu20.04 LTS上用默认的GNOME桌面运行了这个过程。这些步骤在其他带有GNOME桌面的Linux发行版上是类似的,但是您可能需要在其他...

  • 发布于 2021-04-01 17:50
  • 阅读 ( 156 )

如何使用chsh在linux上更改默认shell

Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...

  • 发布于 2021-04-02 06:04
  • 阅读 ( 333 )

如何在linux中向$path添加目录

...但这并没有什么不好的地方。我们将解释它的作用,以及如何调整它。 什么是$path,它是如何工作的($path on linux, and how does it work)? 当您在终端窗口中键入一个命令并按Enter键时,您甚至在执行命令之前就开始了大量的活动。 B...

  • 发布于 2021-04-02 14:04
  • 阅读 ( 184 )

linux下如何使用finger命令

...管是什么原因,如果你被迫或只是喜欢使用手指,这里是如何安装和使用它。 相关:如何在Linux上使用pinky命令 安装手指 您可以使用以下命令在Ubuntu上安装finger: sudo apt-get install finger 要在Fedora上安装finger,请使用以下命令:...

  • 发布于 2021-04-03 04:04
  • 阅读 ( 171 )

如何在linux上使用chmod命令

...改Linux文件权限,乍看起来很复杂,但一旦你知道它们是如何工作的,实际上就相当简单了。 chmod修改文件权限 在Linux中,谁可以对文件或目录做什么是通过权限集来控制的。有三组权限。一组用于文件所有者,另一组用于文...

  • 发布于 2021-04-03 05:19
  • 阅读 ( 140 )

如何在linux上使用time命令

想知道一个进程运行了多长时间以及更多吗?Linux time命令返回时间统计信息,让您对程序所使用的资源有更深入的了解。 时间有很多亲戚 有许多Linux发行版和不同的类Unix操作系统。每一个都有一个默认的命令shell。现代Linux发...

  • 发布于 2021-04-03 12:59
  • 阅读 ( 177 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 260 )
k8766xro
k8766xro

0 篇文章

相关推荐