• macOS三种软件安装目录以及环境变量优先级


    一、MacOS下的命令优先级

    1. 问题描述

    macOS中,在不同路径下安装了多个相同的软件,那么执行某个命令时的优先级是什么呢?

    2. 场景假设

    以常见的python为例,macOS自带了python3.9,用户在官网下载了python3.11.pkg安装包并完成安装,接着用brew等流行工具安装了最新版的python3.12,那么在macBook的磁盘里现在有三份python3可执行代码。

    当在命令行中执行python3 --version,结果是3.9?还是3.11?抑或是3.12
    当未调整系统环境变量时,答案是3.12

    3. 原因分析

    要想知道系统以何种方式加载软件,就应该找到它的环境变量,查看系统认定的目录优先级是如何排序的。macOS中,系统根目录(地址为/)下的/etc/paths中有对应的优先级排序:

    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    
    • 1
    • 2
    • 3
    • 4
    • 5

    那这些优先级对应哪些安装方式呢?请看第二节:

    二、对应的软件安装来源

    1. 系统自带应用

    系统自带应用安装于/usr/bin/目录下,可以看到,在上述排序中,位列第二。

    2. 用户手动安装应用

    用户手动安装应用,多位于/usr/local/bin/目录下, 位列第一。因此当系统自带3.9版本的Python时,手动安装3.11版本,执行python3 --version命令,按照环境变量中目录顺序,结果应为3.11,事实也确实如此。

    3. 使用Homebrew安装应用

    Homebrew中的brew命令非常方便版本维护和管理,以Homebrew4.2.3版本为例,通过brew install python3安装的软件位于/opt/homebrew/Cellar/python3,同时brew会创建符号链接到/usr/local/bin目录下,虽然实际安装位置排名第n,但通过链接的骚操作,排名瞬间变成了第一,而且会比第一的排名更靠前一点。此时执行python3 --version命令,结果不出意外地显示为3.12

    • brew安装的好处
      (1)维护方便,升级/卸载一个命令即可搞定,不用手动删这个删那个
      (2)不会引入快捷方式,上面用手动安装的方式装过Python3.11,会在开始菜单冒出两个快捷方式,很不美观
      (3)由于没有交互界面,所以对如git node python docker等等,这种并不需要界面交互的软件环境,非常适合用brew安装
      (4)大部分情况下,可以自动配置环境变量,无需自己二次配置
    • brew安装的坏处
      (1)无界面,对于需要界面交互的软件来说,并不太适合用brew安装
      (2)安装的是brew库中的,软件版本可能不是最新版的

    三、结论

    brew安装省时省力省心:

    • 对于之前没有的软件,brew会自动把通过它安装的软件设置为可执行命令,无需配环境变量。
    • 对于之前已经安装过的软件,brew会自动把通过它安装的软件设置为更高优先级,也无需配置环境变量。
  • 相关阅读:
    mulesoft MCIA 易错题汇总解析
    Java中的TreeMap[78]
    Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
    优化3种教学方法
    学习记录2022
    LeetCode 1004.最大连续1的个数
    jQuery 中的 AJAX(1 get 请求,2 post 请求,3 通用方法ajax)
    P450Rdb: CYP450数据库--地表最强系列--文献精读24
    QT常用的控件总结
    Java IO其它字符流简介说明
  • 原文地址:https://blog.csdn.net/yuanchenglei/article/details/133591434