3

Для приблизительного подсчета - и чтобы получить представление о времени, затраченном на подсчет - я начал с многострочной команды, которая может выполняться в tcsh.

Я не специалист по сантехнике, поэтому я предлагаю ответы, которые лучше, чем самый ранний из приведенных мной ниже.

Заметки

Чтобы прогулка не занимала много времени, я бы хотел:

  • пройти только несколько иерархий, которые, скорее всего, содержат двоичные файлы
  • не начинать прогулку в / root.

Меня интересует время, необходимое для подсчета, а также приблизительное количество.

Рекомендации

arch(3) Страница руководства по средствам разработки для Mac OS X

lipo(1) Mac OS X Руководство пользователя

3 ответа3

3

Я использую следующее в 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 и использовал $PATH вместо жестко закодированного списка двоичных местоположений Unix. Я также удалил первичную -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, включает в себя Intel. Поиск чего-либо, кроме i386 или x86_64, может быть редким или неизвестным в данный момент, но я бы хотел, чтобы ответы на этот вопрос выдержали испытание временем, не ограничиваясь этими двумя.

Как ответ, это далеко от идеала ...

2

Немного за пределами первого вопроса

Силл экспериментирует, вот вариант принятого ответа от Даниэля:

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

- но, как прокомментировал Дэниел, в этом случае могут отсутствовать двоичные файлы, исполняемые только для определенных пользователей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .