пусто
пусто упаковано для различных дистрибутивов Linux (это empty-expect
в Ubuntu).
- открыть два терминала
- клемма 1 : работа
empty -f -i in.fifo -o out.fifo bash
- клемма 1 : работа
tee stdout.log <out.fifo
- клемма 2 : работа
stty -icanon -isig eol \001; tee stdin.log >in.fifo
- введите команды на клемму 2 , следите за выходом на клемме 1
- , исправьте настройки клеммы с помощью
stty icanon isig -echo
- регистрировать stderr отдельно от stdout с
exec 2>stderr.log
- по окончании
exit
оболочкой bash;обе команды tee
завершат работу
stdout.log
и stdin.log
содержат журналы
Некоторые другие параметры:
peekfd
Вы можете попробовать peekfd
(часть пакета psmisc
).Вероятно, его нужно запускать с правами root:
peekfd -c pid fd fd ... > logfile
, где pid - это процесс, к которому нужно присоединиться, -c
говорит, что также присоединяется к дочерним элементам, а fd
- это список файловых дескрипторов, которые нужно посмотреть (в основном0
, 1
, 2
).Существуют различные другие варианты настройки выходных данных.
Файл журнала потребует постобработки для соответствия вашим требованиям.
SystemTap и аналогичные
Over unix stackexchange , было предложено использовать инструмент SystemTap .Тем не менее, это не просто настроить, и вам все равно придется написать модуль, который разделяет stdin и stdout.
sysdig и bpftrace также выглядят интересно.
LD_PRELOAD / strace / ltrace
Используя LD_PRELOAD , вы можете обернуть вызовы низкого уровня, такие как write (2).
Вы можете запустить свою оболочку в strace
или ltrace
и записывать данные, передаваемые в системные и библиотечные функции (например, запись).Требуется много постобработки:
ltrace -f -o ltrace.log -s 10000000000 -e write bash
patch ttyrec
ttyrec.c - это всего 500 строк довольно простого кода, и похоже, что было бы довольно легко установить патч для использования нескольких файлов журнала.