Para qual fluxo de io essa linha de saída vai para dstat

0

Quando eu executo dstat de um kernel 2.6 CentOS 6 64 bit. Eu tenho a seguinte saída:

# sed -n '4p' <(dstat -dl --float --nocolor 1 1) | awk -F '|' '{print $1,$2}' | awk '{print $1,$2,$3}'
Module dstat_disk24old failed to load. (No suitable block devices found to monitor)
0 0.01 0

O que é interessante é esta linha:

Module dstat_disk24old failed to load. (No suitable block devices found to monitor)

Quando adiciono | grep -v failed ou 2> /dev/null , não filtra esta linha. Quando eu adiciono > a.txt , esta linha também não vai para a.txt. Então, eu estou querendo saber qual fluxo esta linha vai, mesmo que seja impresso na tela?

    
por Elgs Qian Chen 18.12.2015 / 02:31

2 respostas

2

Ele passou para o erro padrão, que é o padrão para o descritor de arquivo 2. Em cmd1 | cmd2 , somente o padrão fora de cmd1 foi redirecionado para o padrão de cmd2 .

Como convenção, todas as mensagens de erro e diagnóstico irão para o erro padrão.

Você pode usar strace para confirmar:

$ strace -e write dstat -dl --float --nocolor 1 1
write(2, "Module dstat_disk24old failed to"..., 83Module dstat_disk24old failed to load. (No suitable block devices found to monitor)) = 83
write(2, "\n", 1
)                       = 1
write(1, "[7l---load-avg---\n 1m   5m  15m"..., 34---load-avg---
 1m   5m  15m 
) = 34
write(1, "   0    0    0\n", 15   0    0    0
)        = 15
write(1, "   0    0    0\n", 15   0    0    0
)        = 15
+++ exited with 0 +++

Você deve redirecionar o erro padrão para o padrão se quiser que o canal capture a saída de erro padrão:

dstat -dl --float --nocolor 1 1 2>&1
    
por 18.12.2015 / 02:52
1

Este redirecionador de arquivos > funciona no padrão. Já que você também disse que o grep não poderia vê-lo, você considerou ser um erro padrão? Para confirmar e capturar se realmente for stderr, tente:

yourlongcommand 2> error.log

E examine error.log.

    
por 18.12.2015 / 02:51

Tags