首页 > 其他分享 >对Xcode Tools实现机制的一点思考

对Xcode Tools实现机制的一点思考

时间:2024-09-02 22:52:53浏览次数:10  
标签:bin 版本控制 Xcode 链接 usr 思考 XTools Tools 可执行程序

场景

在编译wine前,执行.configure检查依赖项是否都满足条件,发现bison的版本较低。

检查发现存在一个/usr/bin/bison,但是从未安装过这一命令,所以考虑到是XTools中携带的,检查后发现确实如此

然后就又一次引发了我对于XTool的疑问,/usr/bin/下和XTools中包含的相同可执行程序,不是以软连接形式存在的,那么我第一步想到的就是硬链接,难道意味着XTools在安装时把对应程序的硬链接写入到/usr/bin/中吗?有没有官方文档说明这一点?

事实上,并没有官方文档提到这一点。不过我从另一个角度发现一些似乎是矛盾的东西。对于XTool的卸载,官方给出的方法是可以直接删除XTools所在的文件夹,我随之产生一个疑惑:删除了XTools的文件夹,下面的程序确实是没有了,那/usr/bin/下的不是还存在吗,为何就不能再使用了,这样确定能卸载吗?

由于在安装XTools之前并没有检查过/usr/bin/目录,所以不确定最初状态下系统的状态了,但是卸载XTools来检查这一点的成本有点高,不过找到了为什么 macOS 在 /usr/bin/ 下会有 python3?这个问题,其中有人已经使用虚拟机尝试过这一点了,直接删除XTools所在目录确实就不再能执行相关的程序了,只删除这一个目录,又没有动/usr/bin/目录,所以那些同名的可执行文件都还在,既然不是软连接,但是为什么就不能执行了,因此很自然就开始考虑/usr/bin/下那些可执行文件到底是什么,如果是按照最初的猜想是硬链接的话,删除原文件,不会影响硬链接的可执行性,现在无法执行,也就说明了它们并非硬链接,那到底是什么?

为什么 macOS 在 /usr/bin/ 下会有 python3?的一位答主的回答中了解到一个新的命令otool,类似Linux下的ldd,可以查看可执行程序用到的库,检查XTools下和/usr/bin/下的同名可执行文件就可以发现端倪,它们并不相同。简单来说,/usr/bin/下的类似git等工具并不是一个完整的git,大致可以看为是一个代理程序。通过深入浅出Xcode Command Lines Tool(1) - 初探序列文章,又了解到XTools实际有一个版本控制机制。把这两点结合起来看,我们就可以大致理解为,mac正是借助/usr/bin/下的这些所谓的代理程序,再结合xcode-select --switch这类工具,实现了对于XTools的版本控制,在一台机器上可以安装多个版本的XTool。如果安装XTools时只是简单在/usr/bin/下创建软连接或者硬链接,显然都是无法完美地实现这一点。/usr/bin/下的程序充当了抽象层,里面的可执行程序都是逻辑上的可执行程序,并非实体,具体映射到哪个版本的实际可执行程序,则可以由其他工具进行指定的

核心矛盾出现在,XTools的卸载仅仅是删除了XTools的目录,即使/usr/bin/存在同名的可执行程序,但是却无法执行 如果/usr/bin/下的程序是软连接或硬链接,都不应该是这样的表现

回过头来看,应该在机器刚刚激活后,'/usr/bin/`下就已经存在一些代理程序了,当找不到XTools时,就会提示去安装XTools,如果找得到就去执行。

本质上还是一种抽象机制,便于实现版本控制(很巧妙的实现)

由此也了解到了一种单机多版本应用控制的新的实现思路,通过建立抽象层,借助一些指定版本的工具,实现版本控制

标签:bin,版本控制,Xcode,链接,usr,思考,XTools,Tools,可执行程序
From: https://blog.51cto.com/u_14882565/11901084

相关文章

  • 自定义TOOLs(完全体Agent)
    1.Agents包括几个关键组件:-*Agent*:用于生成指令和执行动作的代理。-*Tool*:用于执行动作的函数。-*Memory*:用于存储历史对话和生成的指令。-*LLM*:用于生成指令和执行动作的LLM。2.例如:计算\搜索\知识库检索(多轮对话)fromlangchain.agentsimportload_to......
  • 待补 重要思考:求给无向图定向使得其变为DAG的方案数
    今天比赛考到了,不会,丢了100分。rk2,380->rk15,280别问为什么T4没过,因为不会T2。方法一\(O(3^n)\)令\(f_S\)为子集\(S\)内定向得到DAG的方案。\(f_S=\sum\limits_{\emptyset\not=T\subsetS,\text{T为独立集}}(-1)^{|T|-1}f_{S-T}\)考虑DAG的分解......
  • 【编程底层思考】线程阻塞时一定会释放cpu吗
    线程阻塞时是否释放CPU取决于阻塞的原因和操作系统的行为。以下是一些具体情况:1.阻塞等待资源:当线程因为等待某个资源(如锁、信号量、条件变量等)而阻塞时,它通常会释放CPU,以便其他线程可以运行。在这种情况下,阻塞的线程不会占用CPU资源,直到它等待的资源变得可用。2.阻塞等......
  • 对最长路(和最短路)的一些思考
    为了使得整篇文章显得更加人性化,咱们首先说一下最短路。声明:不是讲解知识点不是讲解知识点不是讲解知识点不是讲解知识点不是讲解知识点,整篇文章建立在默认已经会的基础之上,然后提出一些个人见解。最短路此时的SPFA显得不再重要了(,咱们进入正题,说一下dijkstra。(堆优化的)迪杰......
  • POLIR-Society-Management-管理: Networking 与 矩阵解析: 动机、思考与表达 和 利益、
    POLIR-Society-Management-CNO5R+Leading:管理Leading(引领工作)的几个要点:立场(目标人群)+金钱价值观+需求+服务产品+管理控制_复杂和不确定性领导力{做人做事思想}+管理{三管五带七抓}PeterDruke(披特•德鲁克):正确与他人建立关系的顺序:先展现力量,接着表明原则,最后......
  • 人生核心模式的梳理思考 2024-08-30
    2024-08-30    我也是傲娇者剧本。我还有点疑惑,我并没有觉得自己比别人厉害比别人高,也是傲娇者。傲娇者核心是冷漠,冷漠的意思是自己的目标比感受更重要。这样的话我还真是。然后许老师帮梳理了我的模式逻辑。真是清晰透彻。1:我有一些目标,达不成目标我就觉得自己不够好。比......
  • 一个符合软件开发工程师认知的思考框架简单了解下
    软件开发需要使用到编程语言,不管是前端、后端或中间件。下面这段代码来自Spring框架的源码ClassNameGenerator#clean:privateStringclean(Stringname){//创建一个可变的字符串构建器,用于存储清理后的字符串StringBuilderclean=newStringBuilder();//用......
  • An unbiased evaluation of environment management and packaging tools
    forward:https://alpopkes.com/posts/python/packaging_tools/ LastupdateThispostwaslastupdatedonAugust29th,2024.MotivationWhenIstartedwithPythonandcreatedmyfirstpackageIwasconfused.Creatingandmanagingapackageseemedmuchhard......
  • An unbiased evaluation of environment management and packaging tools
    forward:https://alpopkes.com/posts/python/packaging_tools/ LastupdateThispostwaslastupdatedonAugust29th,2024.MotivationWhenIstartedwithPythonandcreatedmyfirstpackageIwasconfused.Creatingandmanagingapackageseemedmuchhard......
  • Python模块之functools.partial
    在Python编程中,functools.partial是一个强大的工具,它提供了一种部分应用函数的方式,能够在创建新函数时固定部分参数,从而在后续调用中减少需要传递的参数数量。本文将深入介绍functools.partial的基本概念、使用方法,并通过丰富的示例代码演示其在不同场景中的实际应用。什么是func......