Jak rejestrować wszystkie dane wejściowe i wyjściowe w sesji terminalowej?

46

Jak przechowywać dzienniki wszystkich prac wykonanych za pośrednictwem terminala? Na przykład chcę rejestrować całą pracę wykonaną w bazie danych przez terminal.

Ankit
źródło
Jest to również wbudowane w sudo.
Wilhelm Erasmus
Dodałem odpowiedź, którą możesz przejrzeć
Mansur Ali,

Odpowiedzi:

66

Aby rozpocząć rejestrowanie pliku dziennika, wpisz:

script screen.log

Teraz, dopóki nie zatrzymasz skryptu, wszystkie dane wejściowe i wyjściowe w terminalu będą przechowywane w screen.log. Po zakończeniu wpisz:

exit

Twój plik screen.log zostanie zapisany w katalogu lokalnym. Jeśli chcesz go przekierować, użyj bezwzględnej nazwy ścieżki, takiej jak ~/screen.log. To zrobi dokładnie to, czego szukasz.

Źródło: Przewodnik Ubuntu - jak rejestrować polecenia terminala

xlukasx
źródło
Cześć, dzięki za odpowiedź. Ale czy to zadziała, jeśli zaloguję się do bazy danych mysql z powłoki przy użyciu następującej sekwencji: - 1) skrypt screen.log 2) mysql -u <użytkownik> -p <baza danych> 3) trochę pracy na bazie danych 4) wyjście; Widzę, że plik screen.log został utworzony, ale nie zawiera dzienników bazy danych. Podzielę się plikiem jak najszybciej. Dzięki Ankt
Ankit
2
powinien działać ze wszystkim działającym w konsoli, odczytującym ze „standardowego wejścia” (zwykle z klawiatury) i zapisującym na standardowe wyjście (zwykle z poziomu okna terminala). Powinien więc obejmować klienta wiersza polecenia mysql. Strona man ( man script) wspomina nawet vi(redaktor) ...
Izzy
10

Możesz wypróbować Asciinema . Oprócz samego nagrania masz możliwość podzielenia się nim i osadzenia odtwarzacza na swoim blogu, artykule lub w konferencji.

chory
źródło
6

Mam lepszy sposób na użycie syslog do rejestrowania każdego polecenia powłoki. Może się to różnić w zależności od dystrybucji linuksa, ale metoda pozostanie taka sama

Musisz wykonać kilka kroków:

Krok # 1 (Utwórz usługę Syslog)

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

local6.*    /var/log/commands.log

Krok # 2 (Otwórz bashrc i wpisz poniżej polecenie)

# 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 (Uruchom ponownie usługę Syslog)

# /etc/init.d/rsyslog

Oto przykładowy dziennik:

7 grudnia 22:13:00 validationdb2 mahasan: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7 grudnia 22:13:09 validationdb2 mahasan: root @ export [13291]: ls -lh [0]
7 grudnia 22:13:27 validationdb2 mahasan: root @ export [13291]: touch test command [0]
Mansur Ali
źródło
bezczelna taktyka !!!
Tom H
Cześć Mansur, czy mógłbyś wyjaśnić, co robisz z tymi poleceniami, co jest dla mnie trudne do zrozumienia, przynajmniej.
Jasser
W kroku 1 nazywam usługę do rejestrowania poleceń, która będzie używana przez proces do wysyłania do niej dzienników. „Local6” będzie punktem końcowym usługi do logowania. W kroku 2 ustawiam rzeczy, których naprawdę chcę ”. PROMPT_COMMAND = 'RETRN_VAL = $? ” ta część zapisze dane wejściowe użytkownika, a „logger -p local6.debug” wyśle ​​plik dziennika do usługi, która rejestruje dane dziennika za pomocą procesu syslog
Mansur Ali,