我正在尝试减少运行 SuSE 的 Linux 映像,并考虑在strip
系统的所有可执行文件上运行。尽管我可能不会通过这种方式重新获得太多磁盘空间,但这样做会有什么坏处吗?
答案1
Linux 并非如此(刚刚检查过...),但在其他系统(例如 BSD,例如 OSX)上,这样做会删除任何 setuid/setgid 权限作为副作用。另外(仍然关注 OSX),文件的所有权可能会改变(对于进行写入的用户而言)。
对于 Linux,我记得早期,剥离共享库会阻止链接到它。现在这不是问题,尽管程序库指南注意,这将使调试器变得无用。它防止链接到静态库。
进一步阅读:
答案2
大多数发行版,包括 OpenSUSE,将可执行文件作为其构建脚本的一部分。您不需要剥离系统的可执行文件,因为它已经完成了。
有些二进制文件不能被剥离。包维护者注意使用正确的构建选项以避免剥离它们。这包括以不寻常的方式动态加载库的二进制文件,进行一些自我反省,而不是正常的启动时加载或普通的dlopen
.这还包括许多由字节码和字节码解释器组成的可执行文件,该strip
解释器将字节码误认为是调试数据。
旁注:如果您想节省空间,OpenSUSE 不适合您。 OpenSUSE 的包粒度非常粗。对于较小的系统,请使用包粒度更细的发行版,以便您可以仅安装所需的部分。在桌面/服务器范围内,Debian 和 Arch 是不错的选择。您还可以考虑针对嵌入式系统的发行版,例如 WRT。
答案3
如果您运行的发行版从存储库安装二进制包(大多数发行版,包括 SUSE,都这样做),那么您对可执行文件所做的任何更改都将在下次更新(或重新安装)包含它们的包时被覆盖。
此外,每当您运行时,它们都会被报告为具有错误的校验和和大小(以及日期,如果您没有使用strip
该--preserve-dates
选项)验证已安装的软件包。你可以rpm
通过以下方式与您的更改相匹配从已安装的文件重建软件包。
如果您想要strip
二进制文件进行安装,您最好从源代码构建这些软件包调整编译器/链接器标志。应使用发行版自己的工具来构建该包来完成该任务(例如rpm构建,dpkg 构建包, 或者makepkg)。对于需要广泛进行此类定制的人来说,有基于源的发行版乃至Linux 从头开始。然而,从源代码构建需要更长的时间,并且使用的磁盘空间比使用较小的二进制文件最终节省的空间要多。