各个操作系统剖析命令的位置

当在 Linux/Unix 或者 Windows 的命令行执行某个命令时(例如 python),我时常会想这个命令处于什么位置呢?有没有重复的命令被安装在了不同的位置呢?该如何解决这个问题,该文先大概记录一下,后续持续优化

以 python 为例。

Linux/Unix

  1. 使用 which python 命令查看命令所在路径

    image-20220322115945860

    可以看到 python 命令位于 /usr/local/bin/python 路径下,但这还不够,因为该位置可能只是一个软连接,有可能真正的安装路径在其他地方。

  2. ll /usr/local/bin | grep python 继续查看

    image-20220322120214237

    可以看到,该路径确实是一个软连接,实际的安装位置在 /opt/homebrew/bin 下到这里就可以找到某个命令的真实位置了。

但是像 Python,我们可能安装了多个版本,只是因为路径的查找顺序问题,所以先找到了 /usr/local/bin/python,其他的就被忽略了,现在我们想要知道,哪个路径下,还有这个命令,该如何操作?

使用 whereis python3 可以找到哪个路径下,安装了这个命令:

image-20220322120745525

Windows

Windows 上的很多命令跟 Linux/Unix 上的不一样,两个几乎完全不同的体系。如果想要在 Windows 上确认命令的位置,一般只需要 where 命令即可,它会列举出要查找的命令的所有位置。

Snipaste_2022-04-10_01-48-55

但是不知道为什么,得用 CMD 命令行才能执行这个命令,PowerShell 没有这个命令。

:::center

2022-10-27 更新

:::

总结

后来发现,只需要 where 一个命令即可,全平台通用。至少在 Windows 11 22H2 版本和 MacOS Monterey 12.6 上,都支持这个命令,非常好用。