`brew list` 显示了很多我没有安装的东西。为什么?如果安装的东西依赖于它们,我怎么知道?

`brew list` shows many things I did not install. Why? If something installed depends on them, how do I know?

在一台新机器上,我使用 brew 只安装了四个东西:gitnodesqliteless。后来,当我 运行 brew update 我被告知许多我没有安装的其他东西是“过时的”。我 运行 brew list 得到以下信息:

brotli              less               pcre2
c-ares              libnghttp2         python@3.9
ca-certificates     libuv              readline
gdbm                mpdecimal          sqlite
gettext             ncurses            xz
git                 node
icu4c               openssl@1.1

这些是从哪里来的?如果它们是因为 gitnodeless 需要它们而安装的,我怎么知道?

是的,像所有包管理器一样,Homebrew(又名 brew)会自动安装依赖项。这是一个递归过程:如果依赖本身有依赖,brew 也会安装它们,依此类推。

brew deps

您可以使用 brew deps 命令查看您安装的任何内容的依赖关系树:

> brew deps node --tree

node
├── brotli
├── c-ares
├── icu4c
├── libnghttp2
├── libuv
├── openssl@1.1
│   └── ca-certificates
└── python@3.9
    ├── gdbm
    ├── mpdecimal
    ├── openssl@1.1
    │   └── ca-certificates
    ├── readline
    ├── sqlite
    │   └── readline
    └── xz

您可以在这棵树中看到许多您在 brew list 中看到的东西。

brew uses

但是要回答您的问题,您可以使用 brew uses 命令朝相反的方向进行:

> brew uses readline --installed

node            python@3.9            sqlite

--installed 标志很重要,因为没有它上面的命令将列出 所有使用 readline 的东西,无论它安装在您的系统上还是不是。还要注意 brew uses 是如何递归的(与 brew deps 相反的方向),显示直接使用 readlinepython@3.9 和间接使用它的 node .

brew desc

现在,如果您对这些已安装依赖项的作用感到好奇,请使用 brew desc 命令:

> brew desc pcre2

pcre2: Perl compatible regular expressions library with a new API

brew leaves

顺便说一下,如果您只想要您具体安装的简短列表,请使用 brew leaves。 Brew 会跟踪 安装的内容,以便在您使用 brew upgrade.

这样的命令时,它可以知道(递归地)为您管理哪些内容
> brew leaves

git
less
node
sqlite