Bash에서 tar 파일의 무결성 테스트

Bash에서 tar 파일의 무결성 테스트

".tar" 파일을 생성하는 bash 스크립트가 있습니다. 파일이 생성된 후 무결성을 테스트하고 무결성이 좋지 않으면 루트 사용자에게 이메일을 보내고 싶습니다.

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

답변1

tar입력에서 오류가 발견 되면 exit(3)0이 아닌 종료 값을 갖게 됩니다 . 대부분의 tar구현에서 이는 .list를 사용하여 아카이브 내용을 나열할 때도 수행됩니다 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

1 이 기호는 실제 호출이 아닌 맨페이지를 나타냅니다. 바라보다man 3 exit.

답변2

죄송하지만 할 수 없습니다. tar에는 테스트 기능이 부족한 것 같습니다. 예를 들어 *nix를 잊어버리고 winrar로 테스트하려고 하면 결과는 다음과 같습니다: "이 명령은 이 유형의 아카이브를 지원하지 않습니다."

위의 댓글에서 tar에는 실제로 비교를 위한 내부 CRC가 부족하므로 편집기를 사용하여 tar 아카이브를 변경하면 나열 및 추출이 오류 없이 완벽하게 작동할 수 있지만 손상된 데이터가 추출된다는 점을 지적했습니다.

어쨌든 해결책을 찾기 위해 여기에 왔지만 해결책이 없습니다. 다행히도 두 가지 좋은 소식이 있습니다.

gzip, bzip2 등과 같은 다른 프로그램으로 압축되지 않은 매우 매우 드문 tar 아카이브가 있으므로 해당 프로그램에는 테스트 솔루션이 있으며 압축하지 않는 사람들은 일종의 형편없는, 정말 형편없는 것입니다.

내 개인적인 문제의 경우 운이 좋게도 압축을 푼 후 모든 파일의 CRC가 포함된 md5sum 파일을 찾았습니다. 확인하기 위해)

답변3

다음 매개변수를 전달하여 이를 수행할 수 있습니다 tar.

$ tar -cvzf test.tar test_file

관련 정보