在一台新机器上,我使用brew只安装了四个东西:
git
、node
、sqlite
和less
。后来,当我运行brew update
时,我被告知许多其他我没有安装的东西都是“过时的”。我运行 brew list
并得到以下结果:
brotli less pcre2
c-ares libnghttp2 [email protected]
ca-certificates libuv readline
gdbm mpdecimal sqlite
gettext ncurses xz
git node
icu4c [email protected]
这些是从哪里来的?如果它们是因为
git
、node
或 less
需要而安装的,我如何找到?
是的,Homebrew(又名brew)与所有包管理器一样,会自动安装依赖项。这是一个递归过程:如果依赖项本身有依赖项,brew 也会安装它们,依此类推。
brew deps
您可以使用
brew deps
命令查看安装的任何内容的依赖关系树:
> brew deps node --tree
node
├── brotli
├── c-ares
├── icu4c
├── libnghttp2
├── libuv
├── [email protected]
│ └── ca-certificates
└── [email protected]
├── gdbm
├── mpdecimal
├── [email protected]
│ └── ca-certificates
├── readline
├── sqlite
│ └── readline
└── xz
您可以在这棵树上看到许多您在
brew list
中看到的东西。
brew uses
但是要回答您的问题,您可以使用
brew uses
命令朝相反方向操作:
> brew uses readline --installed
node [email protected] sqlite
--installed
标志很重要,因为如果没有它,上面的命令将列出使用readline
的所有,无论它是否安装在您的系统上。另请注意
brew uses
是如何递归的(与 brew deps
方向相反),显示直接使用 [email protected]
的 readline
和间接使用它的 node
。
brew desc
现在,如果您对这些已安装的依赖项的作用感到好奇,请使用
brew desc
命令:
> brew desc pcre2
pcre2: Perl compatible regular expressions library with a new API
brew leaves -r
如果您只想要具体安装的简短列表,
brew leaves -r
适用于大多数情况:
> brew leaves -r
git
less
node
sqlite
brew leaves
列出已安装的非依赖项(它们是上面树中的叶子),并且 -r
将列表过滤为您手动安装的那些内容。
我说“大多数情况”是因为它不包括您手动安装但不再离开的东西。当您安装另一个依赖于您最初手动安装的内容时,就会发生这种情况。例如,如果我手动安装了
readline
,brew leaves -r
首先会显示,但在安装node
或sqlite
后不会显示。
对于很多人来说,“叶子”和“手动安装”是同一件事。但安装得越多,出错的可能性就越大。
brew bundle dump --file -
这是一个更难记住的命令(创建别名!),但它比
brew leaves -r
提供了可靠、完整的答案:
> brew bundle dump --file -
brew "git"
brew "less"
brew "node"
brew "sqlite"
cask "rar"
它更完整,因为与
brew leaves
不同,它将包括您手动安装的东西,即使它们不再离开。此外,它还包括水龙头和木桶。