我在 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。