Cygwin에서 bash를 시작하고 다음을 입력합니다.
dd if=/dev/zero | cat /dev/null
즉시 완료됩니다. 내가 입력할 때:
dd if=/dev/zero > /dev/null
예상대로 실행되고 발행할 수 있습니다
killall -USR1 dd
진행 상황을 보려면. 이전 호출이 즉시 종료되는 이유는 무엇입니까? Linux 상자에서도 동일합니까?
*** 내가 왜 그렇게 멍청한 질문을 했는지 설명하고 어쩌면 그다지 멍청하지 않은 질문을 했을 수도 있습니다.
HDD 이미지를 압축하고 있었는데 일부가 잘못 압축되었습니다. 문제를 보여주는 다음 스크립트로 끝났습니다.
while sleep 1 ; do killall -v -USR1 dd ; done &
dd if=/dev/zero bs=5000000 count=200 | gzip -c | gzip -cd | wc -c
Wc는 끝에 1000000000을 써야 합니다. 문제는 내 컴퓨터에는 없다는 것입니다.
bash-3.2$ dd if=/dev/zero bs=5000000 count=200 | gzip -c | gzip -cd | wc -c
13+0 records in
12+0 records out
60000000 bytes (60 MB) copied, 0.834 s, 71.9 MB/s
27+0 records in
26+0 records out
130000000 bytes (130 MB) copied, 1.822 s, 71.4 MB/s
200+0 records in
200+0 records out
1000000000 bytes (1.0 GB) copied, 13.231 s, 75.6 MB/s
1005856128
버그인가요 아니면 제가 또 뭔가 잘못하고 있는 걸까요?
답변1
나는 당신이하려는 일을 할 이유가 없다고 생각할 수 있지만 다음 방법이 당신이 찾고있는 방법이라고 생각합니다.
dd if=/dev/zero | cat > /dev/null
답변2
AFAIK, 첫 번째 명령은 작동하지 않습니다. /dev/zero의 출력을 입력을 받지 않는 명령으로 파이프하려고 합니다.
cat /dev/null
아무것도 출력하지 않는 명령일 뿐입니다. 따라서 그 안에 무엇이든 파이핑하면 아무 일도 일어나지 않습니다.
stdout 리디렉션을 사용하면 /dev/zero의 출력이 문제의 파일에 기록됩니다(/dev/null 따라서 어디에도 없음).
답변3
무엇을 dd if=/dev/zero | cat /dev/null
하는가:
실행하여 cat /dev/null
stdin을 dd
stdout에 연결하십시오. 문제는 그것이 /dev/null
비어 있다는 것입니다. cat
요청된 작업도 마찬가지 입니다. 빈 파일을 열고 내용을 stdout에 쓰고 완료합니다.
cat
지정된 파일이 없는 경우에만 stdin에서 출력을 파이프합니다. cat /dev/null -
/dev/null 및 stdin의 내용을 stdout으로 파이프합니다.
따라서 dd if=/dev/zero | cat /dev/null
프로세스를 낭비하는 것 외에는 cat /dev/null
.
답변4
Cygwin과 Ubuntu에서 시도해 보았고 Ubuntu에서 올바른 결과를 얻었습니다. 신호를 보내지 않으면 dd
Cygwin에서 작동합니다. 나는 그것이 버그라고 말할 것입니다.
출력을 파일로 보내기 위해 a를 수행했을 때 tee
모두 0바이트로 구성되어 있었지만 너무 많았습니다.
dd if=/dev/zero bs=5000000 count=200 | gzip -c | gzip -cd | tee dd.out | wc -c