Olá!

Salvar o resultado de um comando em um arquivo é simples, certo ? Bem, depende. Depende do que exatamente você deseja fazer.

Se você quer, por exemplo, fazer um script e colocar no cron para gravar em um log o resultado, sim é muito simples. Basta jogar a saída para um arquivo utilizando o  operador >.

Digamos, por exemplo, que você queira que todos os dias as 00:00 um arquivo seja salvo com os processos que estão rodando no seu servidor utilizando o comando ‘ps axu‘. Simples, você coloca no cron:

# salvando em um arquivo todos os processos que estão rodando no momento;
0 0 * * * /bin/ps axu > /var/log/ps-axu.log

O resultado deve ser algo como:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10372    84 ?        Ss   Dec09   2:03 init [3]
root         2  0.0  0.0      0     0 ?        S<   Dec09   0:00 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Dec09   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S<   Dec09   0:00 [watchdog/0]

Mas e se você quiser gravar a saída de um comando e ao mesmo tempo ver o resultado no seu terminal ?

Aí você tem a opção de usar o comando ‘tee‘ (man 1 tee).

No exemplo abaixo vamos fazer um ping para um host e gravar o conteúdo da saída do comando ping também em um arquivo:

Rode o comando:

[root@myserver ~]# ping -c 4 www.registro.br | tee ~/ping.log
PING registro.br (200.160.2.3) 56(84) bytes of data.
64 bytes from registro.br (200.160.2.3): icmp_seq=1 ttl=54 time=12.9 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=2 ttl=54 time=12.9 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=3 ttl=54 time=13.0 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=4 ttl=54 time=13.4 ms

registro.br ping statistics

4 packets transmitted, 4 received, 0% packet loss, time 3001ms

rtt min/avg/max/mdev = 12.965/13.106/13.466/0.237 ms

[root@myserver ~]#

Conteúdo do arquivo:

[root@myserver ~]# cat ~/ping.log
PING registro.br (200.160.2.3) 56(84) bytes of data.
64 bytes from registro.br (200.160.2.3): icmp_seq=1 ttl=54 time=12.9 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=2 ttl=54 time=12.9 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=3 ttl=54 time=13.0 ms
64 bytes from registro.br (200.160.2.3): icmp_seq=4 ttl=54 time=13.4 ms

registro.br ping statistics

4 packets transmitted, 4 received, 0% packet loss, time 3001ms

rtt min/avg/max/mdev = 12.965/13.106/13.466/0.237 ms

[root@myserver ~]#

Simples, certo ? Desta forma você pode customizar scripts para que ao rodar comandos, você tenha o resultado no seu terminal mas grave também o resultado em um log para conferência futura. Isso é muito útil para SysAdmins que queiram guardar históricos para comparações.

Dúvidas ? Podem deixar comentários…

Abraços,

Gustavo