Como registro todas as entradas e saídas em uma sessão de terminal?

46

Como mantenho registros de todo o trabalho realizado via terminal? Por exemplo, eu quero um registro de todo o trabalho feito no banco de dados via terminal.

Ankit
fonte
Isso também está embutido no sudo.
Wilhelm Erasmus
Eu adicionei minha resposta que você pode revisar
Mansur Ali

Respostas:

66

Quando você estiver pronto para começar a gravar um arquivo de log, digite:

script screen.log

Agora, até você interromper o script, todas as entradas e saídas no Terminal serão armazenadas em screen.log. Quando terminar, digite:

exit

Seu arquivo screen.log será armazenado no diretório local. Se você deseja redirecioná-lo, use um nome de caminho absoluto como ~/screen.log. Isso fará exatamente o que você está procurando.

Fonte: Guia do Ubuntu - Como registrar comandos do terminal

xlukasx
fonte
Oi, obrigado pela resposta. Mas isso funcionará se eu entrar no banco de dados mysql a partir do shell usando a seguinte sequência: - 1) script screen.log 2) mysql -u <usuário> -p <banco de dados> 3) algum trabalho no banco de dados 4) sair; Vejo que o arquivo screen.log é criado, mas não contém logs para o banco de dados. Vou compartilhar o arquivo o mais rápido possível. Obrigado Ankt
Ankit
2
deve funcionar com tudo o que está sendo executado no console, lendo desde "entrada padrão" (geralmente o teclado) e gravando na saída padrão (geralmente a janela do terminal). Portanto, deve incluir o cliente de linha de comando mysql. A página man ( man script) sequer menciona vi(editor) ...
Izzy
10

Você pode experimentar o Asciinema . Além de apenas fazer uma gravação, você pode compartilhá-la e incorporar o player em seu blog, artigo ou em uma conferência.

doença
fonte
6

Eu tenho uma maneira melhor de usar o syslog para registrar todos os comandos do shell, isso pode variar de acordo com a distribuição linux, mas o método permanecerá o mesmo

Você precisa seguir alguns passos:

Etapa 1 (Criar serviço Syslog)

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

local6.*    /var/log/commands.log

Etapa 2 (Abra o bashrc e digite o comando abaixo)

# 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 (Reinicie o serviço Syslog)

# /etc/init.d/rsyslog

Aqui está um exemplo de log:

7 de dezembro 22:13:00 validationdb2: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7 de dezembro às 22:13:09 validationdb2: root @ export [13291]: ls -lh [0]
7 de dezembro 22:13:27 validationdb2: root @ export [13291]: touch test command [0]
Mansur Ali
fonte
tática atrevida !!!
Tom H
Oi Mansur, você poderia explicar o que está fazendo com esses comandos, é difícil de entender, pelo menos para mim.
Jasser
Na Etapa 1, estou nomeando um serviço para log de comando que será usado pelo processo para enviar logs para "local6" seria o ponto final do serviço para log Na etapa 2, estou definindo as coisas que realmente quero "PROMPT_COMMAND = 'RETRN_VAL = $? " esta parte vai gravar a entrada do usuário e "logger -p local6.debug" isso irá enviar o arquivo de log para o serviço que registram registra dados com processo a ajuda syslog
Mansur Ali