Como imprimir a saída do comando Linux em um arquivo?

3

Estou criando um script para sincronizar meus documentos importantes entre dois sistemas. Eu quero meu script para gerar um arquivo de log para a última ação. você pode me sugerir uma maneira de conseguir isso?

Pergunta: Se eu executar o comando rsync com o sinalizador -v, ele imprimirá muitas mensagens no console. Existe alguma maneira. Então, eu posso redirecionar esses logs para um arquivo?

    
por vijay.shad 29.04.2010 / 19:35

4 respostas

5

Você pode chamar seu script e redirecionar "saída padrão" (AKA STDOUT) para um arquivo de log. Use '> >' para anexar ao arquivo de log ou '>' para sobrescrever o arquivo de log. O arquivo será criado (se as permissões do diretório permitirem), se ele ainda não existir. Se o arquivo já existir, verifique se ele é gravável por você (ou por quem quer que execute seu script).

Se você sempre anexar ao arquivo de log ao invés de escrever sobre ele, é uma boa prática garantir que, desde o início, algo "gire" seu arquivo de log, ou seja, mova-o para outro nome e remova o antigo arquivos de log. Se o arquivo de log for exclusivo para seu script, você pode fazer com que o script cuide da rotação do arquivo de log.

Normalmente, a maneira preferida é chamar seu script com STDOUT redirecionado, mas pode haver momentos em que você queira fazer o redirecionamento dentro do próprio script para um ou mais comandos. Você pode adicionar "> > logfile" após qualquer instrução em um script de shell para anexar STDOUT desse comando ao logfile. Você pode mudar isso para "2 > & 1 > > logfile" para anexar ambos "erro padrão" (AKA STDERR) e STDOUT para logfile. Você normalmente não quer que o STDERR também vá para o arquivo de log, já que o STDERR é normalmente usado para notificar o que quer que seja / quem quer que esteja executando o script de um problema. Mas há momentos e situações em que você quer isso. Se quiser, você pode agrupar comandos em seu script dentro de {e} e redirecionar STDOUT de todo o grupo de uma só vez colocando o redirecionamento após a chave de fechamento.

    
por 29.04.2010 / 20:03
5

Use o operador > :

rsync -v > log.txt

grava a saída do comando rsync em um arquivo chamado log.txt .

    
por 29.04.2010 / 19:41
2

Além do acima, se você está curioso para ver a saída impressa na tela E para um arquivo para arquivamento / grepping / etc, você pode querer " tee " a saída. É um ótimo comando e é nomeado após o pipe T encontrado no encanamento do mundo real, e funciona bem para "sub-consoles" como o mysql, etc.

O comando é tee ... aqui está um exemplo copiado de um usuário chamado " toydi ":

To display and log the output from a command at the same time: ls -l | tee -a file.log In this example, it will display the directory listing output and as well, save the output into file.log. The option -a signals the command to append rather than overwrite the file.

Além disso, verifique a imagem na wikipedia para uma boa visualização de como o tee funciona. Eu teria um link para ele, mas não tenho "pontos de reputação" suficientes para postar mais de um link, e senti que "toydi" merecia o crédito do link:)

    
por 29.04.2010 / 22:01
1

Se você quiser gravar todos os comandos digitados, use o .

    
por 29.04.2010 / 20:54