Встраивание произвольных строк (как tput
вывод) в sed
выражения замены проблематичны, потому что необходимо удостовериться (путем выхода), строка допустима sed
синтаксис, который является большей сложностью, которой лучше всего избегают. Я использовал бы awk
вместо этого. Так же, как пример:
{ echo line 1: PASS; echo line 2: FAIL; } |
awk -v "red=$(tput setaf 1)" -v "green=$(tput setaf 2)" \
-v "reset=$(tput sgr0)" '
{ for (i = 1; i <= NF; i++) {
if ($i == "FAIL") printf "%s", red "FAIL" reset;
else if ($i == "PASS") printf "%s", green "PASS" reset;
else printf "%s", $i
if (i == NF) printf "%s", ORS
else printf "%s", OFS
}}'
Ключ должен присвоиться tput
последовательности к awk
переменные, сделанные сюда использование -v
опции.
Я подозреваю, что это более трудно, чем понятый Michael Kjörling и OP.
OP, кажется, думает об операции ЦП как прямая, единственная временная шкала, где задачи выполняются последовательно. И Michael Kjörling укрепляет то впечатление путем комментирования, что любое данное ядро выполняет строго одну инструкцию на цикл, последовательно.
Это, конечно, неполно на микроскопическом уровне (современные ПК имеют несколько центральных процессоров), и бесполезный на meso/macro-scopic уровнях.
Мы описываем все сложные системы с точки зрения макроскопических переменных; иногда это вызвано тем, что это - только переменные, к которым у нас есть доступ, но их полноценность не является преимущественно полноценностью легкого доступа. Мы не описываем газа путем утверждения положений и скоростей всех включенных частиц, но используем вместо этого давление/объем/температуру/энтропию.
К тому же мы не характеризуем состояние машины посредством инструкций ЦП, но с точки зрения задач и выполняемых сервисов. По сути, существуют в любое данное время несколько процессов рабочая и обменивающаяся информация, часто действующая на концерте (и иногда даже на конкуренции, печально) для достижения общей цели.
Эквивалент давления/объема/энтропии/температуры в информатике является уровнями абстракции, упрощенными представлениями задач, выполненных машиной, независимо от фактической реализации агентов, выполняющих задачи. АЛЬС присутствует на всем протяжении информатики, от HALs до уровней модели OSI, и так далее.
Просьба о пошаговом представлении эксплуатации ПК похожа на отказ от странных аттракторов в теории турбулентности в пользу описания жидкости мультичастицы. Или попытка декодировать геном человека путем изучения химических связей. Каждый создает на другом, но новый уровень абстракции предоставляет понимание, невообразимое иначе.
Можно просмотреть исходный код и изучить, как система работает (если Вы знаете C/C++ и блок хорошо). Насколько я знаю, код не линеен.
Вероятно, максимум, что Вы можете для получения, немного онлайн, отлаживая и журналируемый демон systemd, который записывает все от очень вначале (путь перед традиционными средствами входа).
Если это недостаточно, и Вы хотите систему транспортировки на более низком уровне, можно запустить Linux в виртуальной среде как QEMU, который позволил бы видеть глубоко во внутренностях, использовать gdb на живом ядре и так далее и так далее. Существуют некоторые учебные руководства, как установить QEMU для живого ядра и его всего изображения, отлаживающего: http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html
Также смотрите к stackowerflow вопросу для инструментов в ядре, используемом для отладки: https://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used
Я хотел бы указать на Вас на bootchart
. bootchart
запускает как первый процесс вместо init и контролирует то, что выполняется и сколько времени он работает.
Это не все, что Вы хотели контролировать, но это имеет очень хороший вывод графических данных, и это стоит для попытки.
К вызовам системы контроля Вы могли, например, выполниться perf record
при ранней начальной загрузке, но Вам решать как интерпретировать миллионы строк.