了解 Mac 上的“whereis apachectl”输出

了解 Mac 上的“whereis apachectl”输出

我在 Mac 上使用 Homebrew 安装了 apache,导致我的 Mac 上目前有 2 个 apache 实例。我已禁用 Mac 安装的 Apache 实例的自动加载。

当我运行时,which -a apachectl我获得了 apachectl 可执行文件的两个路径:/usr/sbin/apachectl/usr/local/bin/apachectl(这是 Homebrew 安装的 Apache 的符号链接)。然后当我运行时,which apachectl它会指向 Homebrew 安装的 Apache 版本。

但是,当我运行它时,whereis apachectl它会输出 Mac 安装的 Apache 版本的路径:/usr/sbin/apachectl

此外,运行时apachectl start/stop我不需要该sudo命令,因此看起来我正在启动/停止 Homebrew 安装的 Apache 实例。它还可以直接从正确的位置正确加载我的网页,因此我假设 Apache 正在加载 Homebrew 安装的 httpd.conf 文件。当我尝试运行/usr/sbin/apachectl命令行时,要求使用 sudo,这告诉我该目录中的 Apache 可执行文件是 Mac 安装的 apache。

奇怪的是,当我运行时,apachectl -V它会输出我的 Homebrew 安装的 Apache 的配置信息。

为什么whereis apachectl指向/usr/sbin/apachectl(Mac 安装版本),但运行apachectl -V输出 Homebrew 安装版本的配置信息?当我运行 时,这里发生了什么apachectl start

答案1

以下内容直接取自 whereis 手册:

 The whereis utility checks the standard binary directories for the speci-
 fied programs, printing out the paths of any it finds.

 The path searched is the string returned by the sysctl(8) utility for the
 ``user.cs_path'' string.

user.cs_path是内核中设置的PATH。

sysctl user.cs_path
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin

which将搜索你的 shell 设置的 PATH。

相关内容