이 dstat 출력 행은 어느 io 스트림으로 이동합니까?

이 dstat 출력 행은 어느 io 스트림으로 이동합니까?

dstat커널 2.6 CentOS 6 64비트에서 실행할 때 . 다음과 같은 결과가 나타납니다.

# 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

흥미로운 점은 다음 줄입니다.

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

| grep -v failed또는 를 추가하면 2> /dev/null이 행이 필터링되지 않습니다. 을 추가하면 > a.txt이 줄도 a.txt로 이동하지 않습니다. 그러면 이 줄이 화면에 인쇄되더라도 어느 스트림으로 갈지 알고 싶습니다.

답변1

표준 오류가 발생하며 기본값은 파일 설명자 2입니다. 에 있는 동안에는 cmd1 | cmd2의 표준만 의 cmd1표준으로 리디렉션됩니다 cmd2.

관례적으로 모든 오류 및 진단 메시지는 표준 오류로 이동됩니다.

다음을 사용하여 확인할 수 있습니다 strace.

$ 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, "\33[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 +++

파이프가 표준 오류 출력을 캡처하도록 하려면 표준 오류를 표준 출력으로 리디렉션해야 합니다.

dstat -dl --float --nocolor 1 1 2>&1

답변2

>파일 리디렉터는 표준 출력에서 ​​작동합니다. grep도 볼 수 없다고 말씀하셨는데, 표준 오류라고 생각하시나요? 실제로 stderr인지 확인하고 캡처하려면 다음을 시도하십시오.

yourlongcommand 2> error.log

error.log를 확인하세요.

관련 정보