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

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

时间:2024-02-08 14:55:52浏览次数:18  
标签: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://www.cnblogs.com/hongyugao/p/17946932

相关文章

  • 极狐 GitLab 和 Xcode Cloud 集成,实现 iOS 的自动打包
    一直以来,iOS/macOS开发者面临一个难题:大部分云厂商只提供Linux/Windows服务器,而不提供Mac,如果想实现「持续集成自动打包」就需要绑定自己的Mac作为构建机。如果用个人Mac,一旦关机,小组同事就无法构建;如果再买一台公共Mac,又造成浪费。2022年6月,Apple在WWDC(全球开发者......
  • 我对二进制的运算和用途的认识与思考
    在初步了解计算机的“大脑核心“CPU之后,对于计算机是如何处理数据、指令、函数的流程有了大致的逻辑认知。在阅读过有关二进制的知识后,对于计算机构成和运行有了更深的了解,主要分为对于二进制的运算和用途的思考。首先,作为计算机核心的CPU同其他计算机组件一样,都属于IC集成电路的......
  • github下载Vue-Devtools进行安装的方式
    注意:下载Vue-Devtools依赖需要yarn环境.0.安装:yarnnpminstallyarn-g配置:下载镜像1.在C盘目录下,打开.yarnrc环境配置文件2.复制下面命令到配置文件registry"https://registry.npmmirror.com"chromedriver_cdnurl"https://npmmirror.com/mirrors/chromedriver/"elect......
  • 关于「日志采样」的一些思考及实践
    一、背景:系统日志可用于追踪用户操作轨迹,异常情况下,合理的日志有助于快速排查、定位问题,毫无疑问,打印日志对于系统是很重要的。当业务规模较小时,大家都倾向于享受日志带来的便利,从而忽略日志带来的潜在的负面影响,缺乏对日志的管控。在JD当前用户量、业务规模下,绝大多数C端系统、甚......
  • 关于「日志采样」的一些思考及实践
    一、背景:系统日志可用于追踪用户操作轨迹,异常情况下,合理的日志有助于快速排查、定位问题,毫无疑问,打印日志对于系统是很重要的。当业务规模较小时,大家都倾向于享受日志带来的便利,从而忽略日志带来的潜在的负面影响,缺乏对日志的管控。在JD当前用户量、业务规模下,绝大多数C端系统、......
  • 【思考待定】系统的权限如何管理呢?
    1  思考最近在整理我的个人系统,系统最重要的也是比较复杂的就是权限控制:权限基本分两大类:资源权限和数据权限。资源权限:比如页面、菜单、按钮呀、接口都属于资源权限数据权限:比如仅自己、仅部门等,操作数据的范围权限而一个系统从全局的视角来看的话,从上到下的话我想的是......
  • 【渗透工具】微信小程序调试工具--WeChatOpenDevTools
    免责申明本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文......
  • 质量保障:成本和价值的思考
    去年写了很多关于质量保障的文章,体系建设的方法论不少,技术实践的案例也覆盖了绝大多数测试活动范畴。有粉丝在公众号后台留言说:看了很多方法论和技术案例,但是落地产生成果为什么这么难?老实说,这个问题其实很好回答:高投入可能有高质量,低投入几乎不会有高质量。质量保障这件事,谈到......
  • AI生成前端组件的价值思考
    想法来源这个想法来源于我自己的需求,我自己首先就是最精准的目标用户,在这个AI时代,我希望AI可以帮我尽量多地干活。结合自己的日常独立开发情况,发现花在调前端组件样式上的时间很多,因此思考能不能让AI把这部分活接过去,或者能提高一些效率也行。适合用户外行或刚入门的前端开发......
  • 基于文本环境下的强化学习算法:文本游戏环境下的强化学习的一些思考?文本比图像的抽象度
    这里说一个个人的思考,那就是:文本比图像的抽象度更高,或许基于文本的强化学习算法更加强大。基于文本环境的强化学习算法一直被认为是比较小众的一个场景,一般认为文本的AI处理能力是不如图片的,尤其文本对事物描述的能力是十分有限的,但是随着ChatGPT-3.5的大火,或许这个状况得到了......