bash에서 tar 파일 무결성 테스트


25

'.tar'파일을 만드는 bash 스크립트가 있습니다. 파일이 생성되면 무결성을 테스트하고 무결성이 나쁜 경우 루트 사용자에게 전자 메일을 보내려고합니다.

tar -tf /root/archive.tar파일의 무결성을 확인 하기 위해 명령을 사용해야한다는 것을 알고 있지만 bash if 문에서 어떻게 구현하고 오류를 확인합니까?

답변:


33

경우 tar입력에서 발견 된 오류는 것이다 exit(3)0이 아닌 종료 값 ¹. 이 기능은 대부분의 tar구현에서로 아카이브 내용을 나열 할 때도 수행됩니다 t. 따라서 종료 값 tar을 확인하여 문제가 있는지 판단 할 수 있습니다.

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

당신이 경우 tar모든 오류를 발견하지 t, 당신은 여전히에 아카이브 추출 수 stdout및 리디렉션 stdout/dev/null느린하지만 더 신뢰할 수있는 방법이 될 것이다 :

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

¹이 표기법은 실제 호출이 아니라 맨 페이지를 나타냅니다. 참조하십시오 man 3 exit.


1
실제로는보고 싶지 않기 때문에 tar출력을 로 리디렉션하고 /dev/null싶을 것입니다.
케빈

1
모든 tar구현이 모든 오류를 감지하거나보고 하지는 않습니다 t( bsdtar그렇지 않으면 사용할 수 tar xOf file.tar > /dev/null없습니다). 모든 tar구현이 종료 상태 2로 종료 되지는 않지만 star(255) ot bsdtar(1) 그렇지는 않지만 여기서 중요한 것은 종료 상태가 0이 아니라는 것입니다.
Stéphane Chazelas

1
그에 따라 게시물을 편집했습니다. 와 exit(2)나는 (내가 가진 이유»명시 적으로 다음 문장에서 언급 된 0이 아닌«인) 해당 맨 페이지가 아닌 정확한 종료 값에 대한했다. 이것에 주석을 달았습니다 (섹션을 올바른 것으로 변경했습니다 -.-).
Andreas Wiese 2014 년

나는 당신의 솔루션은 오류의 종류를 편집기 변경 뭔가 오픈 tar 아카이브를 잡을하지 않을 경우 당신의 대답은, 단지 목록 및 추출의 능력에 관한 것입니다 ... 죄송합니다
THESorcerer

0

죄송하지만, tar에는 테스트 기능이없는 것처럼 보입니다 (예 : * nix를 잊어 winrar로 테스트하려고하면 "이 유형의 아카이브에는 명령이 지원되지 않습니다").

위의 주석에서 지적한 바와 같이 tar에는 문자 그대로 비교 용어가있는 내부 CRC가 부족하므로 편집기로 tar 아카이브를 변경하면 나열 및 추출이 오류없이 완벽하게 작동하지만 손상된 데이터를 추출 할 수 있습니다

결론적으로, 나는 여기에 해결책을 기대하지만 결국 하나는 없지만 다행히 두 가지 좋은 소식이 있습니다.

다른 프로그램 (gzip, bzip2 등)으로 압축되지 않은 매우 희귀 한 tar 아카이브가 있으므로 프로그램에 테스트 솔루션이 있으며 압축하지 않은 사람들은 다소 절름발이입니다.

내 개인적인 문제 때문에 운이 좋았습니다. 추출 한 후 내부의 모든 파일에 대한 CRC가있는 md5sum 파일을 찾았습니다. 확인 가능)


-5

다음 인수를 전달하여 수행 할 수 있습니다 tar.

$ tar -cvzf test.tar test_file

2
단선 답변은 종종 그다지 도움이되지 않습니다. 솔루션을 지원하는 일부 소스 자료 (예 : 문서)를 포함하도록 게시물을 확장하십시오.
HalosGhost

6
-c-f( 'test.tar') 를 통해 이름이 지정된 파일을 만듭니다 . -z아카이브를 gzip으로 압축합니다. -v그것을 장황하게 만듭니다. 이것이 정확한 해결책이 아니라고 확신합니다.
EpicVoyage
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.