매우 오래 실행되고 많은 출력을 생성하는 배치 시스템에서 작업이 있습니다. 실제로 배치 노드가 작업 영역을 채우고 충돌하지 않도록하기 위해 gzip을 통해 표준 출력을 파이프해야합니다.

longscript | gzip -9 > log.gz 

작업이 실행되는 동안 작업의 출력을 조사하고 싶습니다. 그래서 이렇게합니다 :

gunzip log.gz 

이것은 대용량 파일 (몇 GB)이기 때문에 매우 오래 실행됩니다. 실행 중에 생성되는 출력 파일을 볼 수 있고 빌드하는 동안 볼 수 있습니다.

tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file 

그러나 궁극적으로 gzip은 끝을 만납니다. gzipped 파일의. 작업이 여전히 실행 중이고 gzip이 여전히 파일을 쓰고 있기 때문에 아직 적절한 바닥 글이 없으므로 다음과 같은 일이 발생합니다.

gzip: log.gz: unexpected end of file 

이후 추출 된 로그 gzip은 손상된 추출 데이터가 나에게 쓸모 없다고 생각하므로 파일이 삭제됩니다. 하지만 동의하지 않습니다. 마지막 두 줄이 뒤섞여 있어도 출력은 여전히 나에게 매우 흥미 롭습니다.

“손상된”파일을 유지하도록 gzip을 어떻게 설득 할 수 있습니까?

댓글

답변

파일의 맨 끝 부분과 별도로 zcat (또는 gzip -dc 또는 gunzip -c) :

zcat log.gz | tail 

또는

zcat log.gz | less 

또는

zless log.gz 

gzip는 명백한 이유로 버퍼링을 수행하므로 (데이터를 청크로 압축해야 함) 프로그램이 일부 데이터를 출력 했더라도 해당 데이터가 아직 log.gz에 없을 수 있습니다. 파일.

압축되지 않은 로그를

zcat log.gz > log 

…와 함께 저장할 수도 있습니다.하지만 분명히 처음에 출력을 압축하는 이유입니다.

댓글

  • gunzip < log.gz 참조 div id = “a15 d60b5bc “>

zcat.Z 파일에서만 작동합니다.

답변

내가 올바르게 이해했다면 여전히 성장하는 gzip으로 tail -f와 같은 작업을하고 싶습니다. 파일 : 나는 (다른 것들 중에서) 그렇게 할 수있는 gztool 을 개발했습니다 :

$ gztool -T log.gz 

필요할 때 새 데이터를 기다리면서 콘솔에 지속적으로 출력합니다.

gztool도 색인 파일 (log.gzi이 경우) 거의 즉시 gztool를 사용하여 gzip 데이터에 대한 향후 테일 또는 기타 임의 액세스를 수행합니다. 인덱스를 생성하지 않으려면 (0.3 % / gzip 크기이고 처리 시간을 늘리지 않더라도) -W를 사용하여 생성하지 않을 수 있습니다.

답변

파일을 분할하고 각 파일을 gzip 할 수 있습니다. https://stackoverflow.com/a/2016918/3090950

어쨌든 명령을 상세 모드로 실행할 수 있습니까? 이것은 당신에게 더 많은 정보를 제공 할 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다