Как мне зарегистрировать весь ввод и вывод в терминальной сессии?

46

Как мне вести логи всей работы, выполненной через терминал? Например, я хочу записать всю работу, проделанную с базой данных через терминал.

Анкит
источник
Это также встроено в sudo.
Вильгельм Эразмус
Я добавил свой ответ, который вы можете просмотреть
Мансур Али

Ответы:

66

Когда вы будете готовы начать запись файла журнала, введите:

script screen.log

Теперь, пока вы не остановите скрипт, все входные и выходные данные в Терминале будут храниться в screen.log. Когда вы закончите, просто введите:

exit

Ваш файл screen.log будет храниться в локальном каталоге. Если вы хотите перенаправить его, используйте абсолютный путь, например ~/screen.log. Это сделает именно то, что вы ищете.

Источник: Руководство по Ubuntu - Как регистрировать команды терминала

xlukasx
источник
Привет, спасибо за ответ. Но сработает ли это, если я войду в базу данных mysql из оболочки, используя следующую последовательность: - 1) скрипт screen.log 2) mysql -u <пользователь> -p <база данных> 3) некоторая работа с базой данных 4) выход; Я вижу, что файл screen.log создан, но он не содержит журналов для базы данных. Я поделюсь файлом как можно скорее. Спасибо Ankt
Ankit
2
он должен работать со всем, что работает в консоли, считывая данные со «стандартного ввода» (обычно с клавиатуры) и записывая в стандартный вывод (обычно это окно терминала). Поэтому он должен включать клиент командной строки mysql. Страница man ( man script) даже упоминает vi(редактор) ...
Иззи
10

Вы можете попробовать Asciinema . Помимо того, что вы просто делаете запись, вы получаете возможность поделиться ею и встроить проигрыватель в свой блог, статью или в разговор на конференции.

sickill
источник
6

У меня есть лучший способ использовать системный журнал для регистрации каждой команды оболочки, это может варьироваться в зависимости от распределения Linux, но метод останется тем же

Вам необходимо выполнить несколько шагов:

Шаг № 1 (Создание службы Syslog)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

Шаг № 2 (Откройте bashrc и введите команду ниже)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste # 3 (перезапустить службу Syslog)

# /etc/init.d/rsyslog

Вот пример журнала:

7 декабря 22:13:00 валидация db2 mahasan: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7 декабря 22:13:09 валидацияdb2 mahasan: root @ export [13291]: ls -lh [0]
7 декабря 22:13:27 validationdb2 mahasan: root @ export [13291]: команда сенсорного тестирования [0]
Мансур Али
источник
дерзкая тактика !!!
Том Х
Привет, Мансур, не могли бы вы объяснить, что вы делаете с этими командами, это трудно понять, по крайней мере для меня.
Jasser
На шаге 1 я называю сервис для регистрации команд, который будет использоваться процессом для отправки на него журналов, «local6» будет конечной точкой для сервиса для регистрации. = $?» эта часть будет записывать ввод пользователя и «logger -p local6.debug», который будет отправлять файл журнала в службу, которая записывает данные журнала с помощью процесса syslog
Мансур Али