zoukankan      html  css  js  c++  java
  • Homebrew安装Packages是否需要另外设置环境变量PATH?

    转载自:https://www.jianshu.com/p/529b7558a6e0

    Homebrew是mac os平台最受欢迎的包管理工具,它会自动管理下载依赖,可以给使用者节省大量时间。可是你了解它是如何管理package的环境变量PATH的吗?你是否一直在重复的配置PATH?读完本文,你将找到答案。

    Homebrew二进制文件安装路径

    Homebrew的命令二进制文件brew安装路径是usr/local/bin

    根据官方常见问题说明文档,通过homebrew安装的包文件(package)一般都位于/usr/local/Cellar文件夹下。比如我安装的mongodb路径为/usr/local/Cellar/mongodb/3.2.7,对应的bin路径为/usr/local/Cellar/mongodb/3.2.7/bin。

    符号链接(symbolic link)

    在计算机中,符号链接也叫做symlink或者软链接,是一种特殊的文件,相当于是给一个文件或文件夹的路径起了一个外号(昵称,别名),实现符号链接的命令是:

    $ ln -s target_path link_path

    target_path是我们要起外号的对象(路径,path),link_path就是外号(一般也是一个path)了。

    有2种方法可以看到符号链接所指向的真正路径,比如要查看/usr/local/bin/mongod这个符号链接:

    方法1是使用命令:

    ls -l /usr/local/bin/mongod

    终端输出信息如下:

    
    lrwxr-xr-x 1 chenxin admin 34 6 13 10:13 /usr/local/bin/mongod -> ../Cellar/mongodb/3.2.7/bin/mongod
    
    

    可以看到,/usr/local/bin/mongod这个符号链接实际指向了/usr/local/Cellar/mongodb/3.2.7/bin/mongod.

    方法2是使用Finder,对mongod符号链接文件使用显示简介:

    image

    从图片中可以很容易看出,mac osx把这种文件类型(种类)归类为替身,看来符号链接又多了一个名字了啊!原身指向/usr/local/Cellar/mongodb/3.2.7/bin/mongod。

    对符号链接文件进行读写的操作会表现为直接对目标文件进行读写,删除符号链接不影响目标文件,但是删除目标文件会导致符号链接指向一个不存在的对象。这有点像C语言里的指针,销毁指针不影响指针所指内存地址,但是如果内存地址被系统回收,会导致指针变成野指针。对于符号链接来说,这种情况叫做被遗弃。

    Homebrew自动为安装的bin创建符号链接

    有了以上关于符号链接的了解,接下来说说homebrew是如何为安装的package对应的bin创建符号链接。还是以homebrew安装mongodb举例,安装的原始bin位于/usr/local/Cellar/mongodb/3.2.7/bin,从finder进入该路径,可以看到mongodb各个命令对应的命令行二进制文件:

    image

    再打开/usr/local/bin,可以看到以下文件:

    image

    很明显,可以看到mongodb各个命令都有对应的以命令的字面符号命名的文件,这些就是符号链接。如果打开/usr/local/bin/mongod这个符号链接文件,其实是被符号链接到了/usr/local/Cellar/mongodb/3.2.7/bin/mongod,接着自然就是执行mongod命令了。

    不需要再添加环境变量PATH

    网络上很多教程都说应该再添加环境变量,其实完全是多此一举。举个例子,我安装mongodb3.2.7版本,按照网上很多教程我是需要把这个路径添加到PATH变量中,即需要在~/.bash_profile中添加下面一行:

    export PATH=/usr/local/Cellar/mongodb/3.2.7/bin:${PATH}}

    通过Homebrew安装的package为什么不需要再添加bin的PATH环境变量?

    通过上一节我们知道,homebrew会给package的bin里的所有命令创建对应的符号链接保存到usr/local/bin目录下,只要usr/local/bin在PATH中,就不需要再添加环境变量。

  • 相关阅读:
    PHP自动加载(__autoload和spl_autoload_register)
    抽象工厂模式
    工厂方法模式
    简单工厂模式
    组合
    二叉树的层次遍历 II
    umask命令
    二叉树的所有路径
    CDN缓存的理解
    Js中RegExp对象
  • 原文地址:https://www.cnblogs.com/hd92/p/13554827.html
Copyright © 2011-2022 走看看