如何计算运行 OS X Lion 的计算机上与英特尔兼容的二进制文件/程序的大致数量以及计算时间?

如何计算运行 OS X Lion 的计算机上与英特尔兼容的二进制文件/程序的大致数量以及计算时间?

近似计数 — — 为了了解计数所需的时间 — — 我从可以在 tcsh 中运行的多行命令开始。

我不是管道专家,因此我邀请您提供比我下面给出的最早答案更好的答案。

笔记

为了不让步行耗费过多的时间,我想:

  • 只遍历几个最有可能包含二进制文件的层次结构
  • 不从 /root 开始行走。

我对计数所花的时间以及近似计数同样感兴趣。

参考

arch(3) Mac OS X 开发人员工具手册页

lipo(1) Mac OS X 手册页

答案1

我在 中使用以下内容bash,保持整体方法(使用lipo)相同:

time find ${PATH//:/ } /Applications /Developer /Library /System ~/Applications -type f -exec lipo -info '{}' ';' 2>/dev/null | grep -E "(x86_64|i.86|pent)" | tee binaries.txt | wc -l

它将创建一个binaries.txt包含结果列表的文件,并将结果数量以及time结果打印到标准输出。

我缩短了man 3 arch基础grep表达式,删除了i860条目,并使用了$PATHUnix 二进制位置的硬编码列表。我还-perm从中删除了主要内容find,因为它是一种启发式方法,可能会错过仅对特定用户可执行的二进制文件。

答案2

tcsh

sh
uname -v && date &&\
2>/dev/null find /opt/X11/bin /opt/local/bin /opt/local/sbin \
/bin /sbin /usr/X11/bin /usr/bin /usr/local/bin /usr/sbin \
/Applications /Developer /Library /System ~/Applications \
-type f -perm +111 -exec lipo -info '{}' ';' | grep -E \
"(i386|x86_64|i860|i486|i486SX|pentium|i586|pentpro|i686|pentIIm3|pentIIm5|pentium4)" &&\
date && exit

输出的行数可以在文本编辑器(如 TextWrangler)中计算。从开头减去包含日期和时间的几行,从结尾减去包含日期和时间的两行,得到一个近似值。

如果你想知道为什么 grep 适用于十二种架构(而不是两种):这是要考虑全部目前已知的体系结构,其中 arch 手册页中的描述包括英特尔目前,找到除 i386 或 x86_64 之外的其他任何东西可能很少见或未知,但我希望这个问题的答案能够经得起时间的考验,而不仅限于这两个。

作为答案,这远非理想……

答案3

除了开头的问题之外

经过实验,以下是丹尼尔接受的答案的变体:

date && sw_vers && uname -a && touch /Users/Shared/binaries.log && bash 
open /Users/Shared/binaries.log && time find ${PATH//:/ } \
/Applications /Developer /Library /System ~/Applications \
-type f -exec lipo -info '{}' ';' 2>/dev/null \
| grep -E "(x86_64|i.86|pent)" | tee /Users/Shared/binaries.log \
| wc -l && exit

它使用共享区域来写入文件,文件名称以 结尾.log,并且应该在控制台中打开 .log。此外,终端窗口将显示日期和时间、系统版本和构建 — — 这些都是我喜欢记下来的东西。

如果控制台的其他窗口打开了,它不会将日志窗口带到前台,并且在完成时不会将终端带到前台。

在某些系统上,步行可能会非常耗时。

为了跑得更快

 我们 可以使用-perm-find

date && sw_vers && uname -a && touch /Users/Shared/binaries.log && bash 
open /Users/Shared/binaries.log && time find ${PATH//:/ } \
/Applications /Developer /Library /System ~/Applications \
-perm +111 -type f -exec lipo -info '{}' ';' 2>/dev/null \
| grep -E "(x86_64|i.86|pent)" | tee /Users/Shared/binaries.log \
| wc -l && exit

—但作为丹尼尔评论,这可能会错过仅特定用户可执行的二进制文件。

相关内容