Другой подход должен был бы использовать учет процесса BSD, который также доступен на Linux (хотя я не знаю, включен ли он по умолчанию). Это в основном сохраняет вкладку всех программ, которые запущены (и некоторые другие меры, как процессорное время, использованное и т.д.) столько, сколько учет активен. Оттуда несколько совокупных статистических данных доступны среди других: своего рода список всех программ когда-либо работает на системе, отсортированной по и т.д. главному количеству использования.
Команды для поиска lastcomm
для синхронного журнала и sa
для агрегированной статистики. Возвращение к исходному вопросу, предположение, что рассматриваемая система имела бы учет, включили, так как это было установлено, затем sa -n
дал бы список всех команд, когда-либо выполняемых в системе (для всех пользователей), отсортированный по частоте. Для конвейеров каждая часть конвейера, конечно, считалась бы отдельно, поскольку каждая часть включает новый процесс, который будет разветвлен.
Для получения дополнительной информации журнал Linux имеет статью, объясняя работы. Я сам получил идею от руководства NetBSD; многие более универсальные рекомендации по администрированию там не характерны для NetBSD, но относятся к другим системам Unix также.
Если мы говорим ksh93
или bash
(и GNU find
), нет никаких массивов multidimentional (или массивы массивов), Вы могли сделать хотя:
index=0 IFS=$'\n'
set -f
for arg do
eval "array_$index"'=($(find "$arg" -type l -maxdepth "$depth" -print))'
((index++))
done
Назвать различные массивы array_0
, array_1
...
(вышеупомянутое предполагает, что имена файлов не содержат символы новой строки).
Если Вы хотите все ссылки, объединенные в единый массив, то:
IFS=$'\n'
set -f
array=($(find "$@" -type l -maxdepth "$depth" -print))
должен быть достаточно.
Используя массивы или циклы в оболочках часто знак, что Вы не достигаете проблему правильный путь.
Например, если бы Вы хотите найти самую глубокую символьную ссылку (как Ваш комментарий предполагает), Вы сделали бы что-то как:
find "$@" -type l -print | awk -F/ '
NF > n {deepest = $0; n=NF}
END {print "Deepest:", deepest}'
awk
будет намного более эффективным, чем оболочка к тексту процесса и работе с массивами. Это разработано для этого. Оболочки не (и bash
из всех оболочек один из самых неэффективных в нем). Оболочки способны выполнять команды (как awk
или find
), это - то, для чего они разработаны.