다음에서 여러 파일을 다운로드했습니다.환매더 많은 파일이 있습니다. 각 파일의 md5sum 정보는 .md5sum 이라는 단일 파일에 저장됩니다 MD5SUMS
.
파일 무결성을 확인하기 위해 md5sum -c MD5SUMS
파일의 모든 파일에 대해 긴 출력을 생성했습니다 MD5SUMS
. 파일을 찾을 수 없으면(다운로드하지 않음) 불평하고 파일이 발견되고 md5sum 정보가 일치하면 "ok"라고 말했습니다.
md5sum: gencode.v27.tRNAs.gtf.gz: No such file or directory
gencode.v27.tRNAs.gtf.gz: FAILED open or read
md5sum: GRCh38.p10.genome.fa.gz: No such file or directory
GRCh38.p10.genome.fa.gz: FAILED open or read
GRCh38.primary_assembly.genome.fa.gz: OK
md5sum: _README.TXT: No such file or directory
_README.TXT: FAILED open or read
grep
"비정상" 줄을 필터링하기 위해 파이프로 연결했지만 여전히 전체 출력을 얻습니다md5sum -c MD5SUMS | grep OK
. 매우 긴 출력을 얻습니다. 존재하지 않는 파일의 경우 "해당 파일 또는 디렉터리 없음 "이 있는 줄과 "정상"이 있는 줄입니다. "md5sum 구문과 일치하는 파일은 빨간색으로 강조 표시됩니다.
md5sum: gencode.v27.polyAs.gff3.gz: No such file or directory
md5sum: gencode.v27.polyAs.gtf.gz: No such file or directory
gencode.v27.primary_assembly.annotation.gff3.gz: OK
md5sum: gencode.v27.transcripts.fa.gz: No such file or directory
md5sum: gencode.v27.primary_assembly.annotation.gtf.gz: OK
그러나 중간 파일을 사용하여 출력을 저장 md5sum
한 다음 grep
해당 파일을 저장하면 예상대로 "OK"라는 문구가 포함된 줄이 표시됩니다.
md5sum -c MD5SUMS > test
grep "OK" test
gencode.v27.primary_assembly.annotation.gff3.gz: OK
gencode.v27.primary_assembly.annotation.gtf.gz: OK
GRCh38.primary_assembly.genome.fa.gz: OK
문제를 이해할 수 없습니다. 파이프라인에 무엇이 문제인지, 아니면 예상되는 동작인지 파악하도록 도와주실 수 있나요?
답변1
md5sum
누락된 파일로 인해 생성된 오류 메시지가 표시됩니다 . 이러한 메시지는 항상 표준 오류 스트림이기 때문에 표준 오류 스트림에서 생성됩니다.산출스트림은 파이프를 통해 전달되며 오류 메시지는 grep
명령의 영향을 전혀 받지 않습니다.
전혀 볼 수 없도록 리디렉션하려면 다음을 사용하세요.
md5sum -c MD5SUMS 2>/dev/null | grep OK
오류를 로그 파일에 저장하려면(예: 나중에 누락된 파일을 확인하기 위해) /dev/null
오류를 기록하려는 파일 이름으로 바꾸십시오.
비트 설명 2>/dev/null
:
명령은 두 개의 별도 스트림에 대한 출력을 생성합니다.표준 출력 스트림그리고표준 오류 스트림. 항상 "파일 설명자" 1과 2에 할당됩니다.
표준 출력 스트림은 명령의 "일반 출력"이 이동하는 곳으로, 예에서와 같이 다른 명령으로 파이프될 수 있습니다 grep
.
표준 오류 스트림은 "진단 메시지"(보통 "오류"를 의미함)가 있는 곳입니다.아니요일반적으로 터미널에 직접 다른 명령을 파이프합니다. 이것이 귀하의 grep
명령이 오류 메시지를 필터링할 수 없는 것처럼 보이는 이유입니다. 실제로 오류 메시지를 볼 수도 없습니다.
2>
생성된 모든 항목이 터미널에 도달하지 않도록 표준 오류 스트림을 다른 곳으로 리디렉션합니다 .
표준 출력 스트림을 리디렉션하는 것과 동일한 것은 이며 1>
, 줄여서 로 사용할 수 있습니다 >
.
이 /dev/null
파일은 특별합니다. 거기에 쓰여진 모든 것은 완전히 사라질 것입니다.
명령 뒤에 사용하면 모든 오류 메시지가 터미널 대신 2>/dev/null
리디렉션되어 삭제된다는 의미입니다 ./dev/null