md5sum
md5(Message-Digest algorithm 5) 해시 알고리즘을 이용해 파일의 checksum을 계산하는 명령어로, 대부분의 unix 시스템에 내장되어 있다.
계산된 checksum은 128bit로, 32자의 문자열에 해당한다.
💡 checksum
md5sum에서 언급하는 checksum은 해시 함수를 적용하여 나온 고정된 길이의 값, 즉 해시값을 뜻한다.
해시값은 해시 코드, 해시섬(hashsum), 체크섬이라고 불리기도 한다.
해시값과 체크섬은 그 의미가 조금 다르지만, 해시값을 체크섬과 동일한 목적으로 사용하는 경우가 많다.
해시 함수는 같은 입력값에 대해 같은 출력값을 보장하기 때문에, 데이터가 중간에 조금이라도 변경되면 md5sum 값은 달라지게 된다. 이러한 특성을 이용해 보통 파일을 다운로드하거나 이동하거나 복사한 뒤 원본파일과 동일한지, 파일의 무결성을 확인하는 목적으로 많이 사용한다.
명령어
md5sum은 입력받은 파일의 md5sum 값을 출력한다.
여러 파일의 md5sum 값을 확인할 때에는, 확인할 파일을 연달아 나열하면 된다.
md5sum [OPTION]... [FILE]...
# 예시
md5sum scp.sh
md5sum scp.sh while.sh
원본 파일(scp.sh)와 복사한 파일(scp.sh_20220410)의 md5sum 값이 동일한 것을 볼 수 있다. 즉, 2개 파일의 내용은 동일하다.
md5sum 값이 다른 scp.sh와 while.sh 파일을 그 내용도 서로 다르다.
디렉터리 비교
md5sum 명령어 자체는 디렉터리를 대상으로 하진 않지만, 몇 가지 명령어를 조합하면 디렉터리에 대해서도 md5sum 값을 구할 수 있다.
find [DIRECTORY] -type f -exec md5sum {} \; | sort -k 2 | md5sum
위의 명령은 디렉터리 내의 모든 파일에 대한 md5sum 값을 정렬하고, 그 결과에 대한 md5sum을 출력한다. 폴더 내 파일 데이터가 다르면 md5sum 값이 달라진다. 그리고 디렉터리 이름도 md5sum의 입력으로 들어가기 때문에 디렉터리 이름도 동일해야 한다.
예시 )
홈 디렉터리에 있던 python_mail 디렉터리를 ~/cp-test 아래로 복사한 뒤 정상적으로 복사되었는지 확인하려고 한다.
홈 디렉터리에서 python_mail 디렉터리의 md5sum 값과 cp-test로 이동한 뒤 python_mail 디렉터리의 md5sum 값을 비교하면, 동일한 값을 출력하는 것을 확인할 수 있다.
md5sum의 입력에서 디렉터리 이름을 제외하면, 디렉터리 내 파일 내용의 md5sum 값만을 이용하여 디렉터리 md5sum 값을 확인할 수 있다.
find [DIRECTORY] -type f -exec md5sum {} \; | sort -k 2 | cut -f1 -d' ' | md5sum
참고 문서
https://linuxhint.com/use-md5sum-command/
https://bio-info.tistory.com/47