Як записати весь вхід і вихід у сеанс терміналу?


46

Як зберігати журнали всіх робіт, виконаних через термінал? Наприклад, я хочу записати всю роботу, виконану над базою даних через термінал.


Це також вбудовано в судо.
Вільгельм Еразм

Я додав свою відповідь, яку ви можете переглянути
Мансур Алі

Відповіді:


66

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

script screen.log

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

exit

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

Джерело: Посібник Ubuntu - Як реєструвати команди терміналів


Привіт, дякую за відповідь. Але чи спрацює це, якщо я ввійду в базу даних mysql з оболонки, використовуючи таку послідовність: 1) скрипт screen.log 2) mysql -u <user> -p <база даних> 3) деяка робота над базою даних 4) вихід; Я бачу, що файл screen.log створений, але він не містить журналів для бази даних. Я поділюсь файлом якнайшвидше. Спасибі Ankt
Ankit

2
він повинен працювати з усім, що працює в режимі читання консолі від "стандартного вводу" (зазвичай це ваша клавіатура) і записується на стандартний вихід (зазвичай це вікно вашого терміналу). Тому він повинен включати клієнт командного рядка mysql. Сторінка man ( man script) навіть згадує vi(редактор) ...
Izzy

10

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


6

У мене є кращий спосіб використовувати syslog для реєстрації кожної команди оболонки, це може бути різним при розподілі 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 validationdb2 mahasan: root @ export [13291]: хвіст -f /var/log/mysql/mysql.log [0]
7 грудня 22:13:09 validationdb2 mahasan: root @ export [13291]: ls -lh [0]
7 грудня 22:13:27 validationdb2 mahasan: root @ export [13291]: натисніть тестову команду [0]

нахабна тактика !!!
Том Х

Привіт Мансур, чи не могли б ви пояснити, що ви робите з цими командами, що важко зрозуміти, як мені.
Джассер

На кроці 1 я називаю службу для ведення журналів команд, яка буде використовуватися процесом для надсилання журналів до неї "local6", буде кінцевою точкою для служби для входу в систему. На кроці 2 я встановлюю речі, які я фактично хочу "PROMPT_COMMAND = 'RETRN_VAL = $? " ця частина запише введення користувача та "logger -p local6.debug", він надішле файл журналу до сервісу, який записує дані журналів за допомогою процесу syslog
Mansur Ali
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.