[리눅스] md5sum: 무결성 확인 명령어

반응형

From Pixabay OpenClipart-Vectors's Image

Contents

    md5sum 이란?

    파일을 다운받거나, 이동하거나, 복사한 후에 원본파일과 동일한 파일인지 확인하는 목적으로 쓰이는 명령어 입니다.

    즉, 파일에 대해 md5(Message-Digest algorithm 5)라는 해시 알고리즘으로 sum(Check sum)값을 계산하는 명령어 입니다. 데이터가 중간에 아주 조금이라도 변경이되면 md5sum 값이 달라집니다. 

     대용량 파일을 다운받거나, 이동하다보면 데이터에 손상은 없는지 확인하는 경우가 많습니다. 예를 들어, 인간 유전체에 대한 정보들은 수십 기가에서 수백 기가까지 용량이 크기때문에 다운로트 사이트에서 md5sum까지 제공해주는 경우가 많습니다. 다운로드 후에 데이터 손상여부를 확인하기 위해 md5sum을 계산하여 비교해 볼 수 있습니다.

     

    기본 사용법

    md5sum [파일]

    md5sum [파일]을 실행하면 해당 [파일]에 대한 md5sum 값이 출력됩니다. 만약 여러개의 파일에 대해 md5sum을 비교하고자 한다면 아래와같이 명령어를 실행하시면 됩니다.

    md5sum [파일1] [파일2] ...

     

    기초 예시) md5sum 비교

    a파일을 만든 후, 복사하여 b를 만듭니다. 그 후, 새로운 파일 c를 생성합니다. 그러면 a파일과 b파일은 md5sum값이 동일할 것이고, c 파일만 md5sum값이 다를 것입니다. 실제 예시와 함께 보겠습니다.

    echo "md5sum test" > a  # "md5sum test" 문자열을 갖는 파일 a 생성
    cp a b                  # a를 복사하여 b 생성
    echo "different files" > c # 다른 문자열 갖는 파일 c 생성
    md5sum a b c # a b c 파일에 대해 md5sum 값 확인

    * 출력

    a, b, c 파일에 대한 md5sum

    위의 결과를 보면 파일 이름이 달라도, 데이터가 동일하다면 md5sum 값은 동일한 것을 볼 수 있습니다(a파일과 b파일).

    반면 c의 md5sum값은 다릅니다.

    활용) md5sum으로 디렉토리(폴더) 비교

    작업을 하다보면 대용량 폴더(디렉토리)를 옮기는 경우도 많습니다. md5sum명령어 자체는 폴더(디렉토리)에 적용되지 않습니다. 하지만, 여러가지 명령어를 조합하면 폴더에 대해서도 md5sum을 할 수 있습니다.

     

    find [디렉토리 파일] -type f -exec md5sum {} \; | sort -k 2 | md5sum

    * 명령어 설명

    폴더 내부의 모든 파일에 대해 md5sum을 계산한 뒤, 정렬하고 그결과에 대한 md5sum을 출력합니다. 폴더 내부의 파일 하나라도 데이터가 다르면 md5sum값이 달라지기 때문에 폴더에 대한 md5sum도 가능해집니다. (이때 디렉토리 이름도 마지막 md5sum의 입력으로 들어가므로, 디렉토리 이름도 동일해야 합니다.)

     

    예시) 디렉토리 md5sum 결과 동일.

    디렉토리 md5sum

    위에서 생성한 a,b,c 파일을 md 디렉토리에 넣고, 위의 명령어로 md5sum을 보면 동일한 것을 알 수 있습니다.

     

    예시2) 디렉토리 내용은 같지만, 이름이 다른경우 md5sum 결과 다름.

    디렉토리 이름 다른 경우 md5sum

    위의 md/ 디렉토리를 복사하여 md2/ 디렉토리를 생성하였습니다. 위의 명령어로 md5sum을 비교해보니 결과가 다릅니다. 이유는 find [디렉토리 파일] -type f -exec md5sum {} \; | sort -k 2 결과에서 디렉토리 이름도 반영되기 때문입니다. 이런 경우 cut 명령어를 통해 md5sum부분만 본다면 디렉토리 이름이 달라도, 내용이 같다면 디렉토리 md5sum 결과역시 동일하게 할 수 있습니다.

     

    예시3) cut 명령어 추가로, 디렉토리 이름 달라도, 내용이 같다면 md5sum 결과 동일.

    find [디렉토리 파일] -type f -exec md5sum {} \; | sort -k 2 | cut -f1 -d' ' | md5sum

    md디렉토리와 md2 디렉토리의 md5sum

    cut -f1 -d' ' 명령어를 보겠습니다. -d' '(공백 한칸을 구분자로), -f1(첫번쨰 열에 있는 값만 가져옴)라는 의미입니다. 이를 통해 파일이름이 다른 2번쨰 열정보는 제외되어 md5sum이 진행되기 때문에 같은 결과가 나오는것을 볼 수 있습니다.

    반응형

    댓글

    Designed by JB FACTORY