你有没有好奇过,为什么Alpine Linux默认装了个"BusyBox Wget"?
我跑了个ls -la /usr/bin,结果傻眼了:130多个可执行文件,居然全是同一个二进制文件的硬链接。这就是BusyBox的"multicall binary"机制——一个文件,分身成整套Unix工具箱。
![]()
原理其实粗暴得很。程序启动时看argv[0],也就是你怎么调用它的名字。如果是wget,它就跳转到wget的主函数;如果是ls,就走ls的逻辑。你也可以直接显式指定:busybox wget,效果一样。
每个工具对应一个C文件,比如wget.c。源码里还嵌着编译配置,像这段:
//config:config WGET
//config: bool "wget (41 kb)"
//config: default y
编译时勾选哪些,最终二进制就包含哪些。想瘦身?关掉用不上的模块就行。
BusyBox支持两种调用方式:-s参数创建符号链接,或者直接建硬链接。你也可以运行busybox --list,看它到底打包了哪些命令。
所以Alpine的本质是什么?一套BusyBox的交互界面。里面的工具都是精简版——至于是重新实现的,还是从原版源码裁剪来的,我还没挖到答案。有人知道吗?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.