기본 문법
sha256sum [옵션] 파일...
sha256sum은 파일 내용을 SHA-256 알고리즘으로 계산해 64자리 16진수 체크섬을 출력하는 명령어입니다. 출력은 `체크섬 파일명` 형식이며, 체크섬과 파일명 사이에 구분자 두 글자가 옵니다. 텍스트 모드(기본)에서는 공백 두 칸, 바이너리 모드(-b)에서는 공백과 `*`가 옵니다. 파일 내용이 1바이트만 달라져도 체크섬이 완전히 달라지므로, 두 파일이 동일한지 또는 파일이 변경되었는지 판단하는 데 쓰입니다.
실무에서는 백업이나 배포 파일이 전송·보관 과정에서 손상되지 않았는지 확인할 때 사용합니다. 계산한 체크섬 목록을 파일로 저장해 두었다가 -c 옵션으로 검증하면 각 파일마다 OK 또는 FAILED가 출력되고, 하나라도 불일치하면 종료 코드가 0이 아닙니다. 이 목록 파일을 흔히 매니페스트(manifest)라고 부릅니다.
체크섬 목록을 파일명 기준으로 정렬해 저장하거나, 기존 목록을 검증해 OK/FAILED 개수를 집계하는 작업은 sort, find, awk와 조합해 처리합니다. Rocky Linux 8에는 GNU coreutils 8.30의 sha256sum이 포함되어 있습니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-c, --check | 체크섬 목록 파일을 읽어 각 파일을 검증 | sha256sum -c checksums.txt |
--quiet | 검증 시 OK인 파일은 출력하지 않고 실패만 표시(-c와 함께 사용) | sha256sum -c --quiet checksums.txt |
--status | 검증 결과를 출력하지 않고 종료 코드로만 알림(-c와 함께 사용) | sha256sum -c --status checksums.txt |
-w, --warn | 형식이 잘못된 체크섬 줄에 대해 경고 출력(-c와 함께 사용) | sha256sum -c -w checksums.txt |
--strict | 형식이 잘못된 줄이 있으면 종료 코드를 0이 아닌 값으로(-c와 함께 사용) | sha256sum -c --strict checksums.txt |
--ignore-missing | 목록에 있으나 존재하지 않는 파일을 실패로 처리하지 않음(-c와 함께 사용) | sha256sum -c --ignore-missing checksums.txt |
--tag | BSD 스타일(SHA256 (파일) = 해시) 형식으로 출력 | sha256sum --tag app.conf |
-b, --binary | 바이너리 모드로 읽음. 리눅스에서는 계산 결과가 텍스트 모드와 같고, 출력에서 파일명 앞 구분자만 공백에서 *로 바뀜 | sha256sum -b backup.tar.gz |
-t, --text | 텍스트 모드로 읽음(기본값) | sha256sum -t app.conf |
-z, --zero | 각 줄을 개행 대신 NUL로 끝내고 파일명 이스케이프를 끔 | sha256sum -z *.conf |
실무 예시
파일 하나의 체크섬 출력
준비: mkdir -p /tmp/demo; printf 'server_port=8080\n' > /tmp/demo/app.conf
$ sha256sum /tmp/demo/app.conf
730c0a5caddd4137c42d8ab7731e38d13ddca89d2cf3f177327e1671f46d01b9 /tmp/demo/app.conf
체크섬 64자리와 파일명이 공백 두 칸으로 구분되어 출력됩니다. 파일 내용이 같으면 경로가 달라도 체크섬은 동일합니다.
표준 입력의 체크섬 계산
$ printf '' | sha256sum
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
파일 인자가 없거나 -이면 표준 입력을 읽습니다. 파일명 자리에는 -가 표시됩니다. 빈 입력의 SHA-256 값은 항상 동일합니다.
여러 파일의 체크섬 목록을 정렬해 저장
준비: mkdir -p /tmp/demo/config; printf 'a\n' > /tmp/demo/config/net.conf; printf 'b\n' > /tmp/demo/config/app.conf; printf 'c\n' > /tmp/demo/config/db.conf
$ cd /tmp/demo/config && sha256sum *.conf | LC_ALL=C sort -k2 > /tmp/demo/checksums.txt && cat /tmp/demo/checksums.txt
0263829989b6fd954f72baaf2fc64bc2e2f01d692d4de72986ea808f6e99813f app.conf
a3a5e715f0cc574a73c3f9bebb6bc24f32ffd5b67b387244c2c909da779a1478 db.conf
87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7 net.conf
디렉터리로 이동한 뒤 실행하면 목록에 상대 경로만 기록되어, 같은 디렉터리에서 그대로 검증할 수 있습니다. sort -k2로 파일명 기준 오름차순 정렬을 지정하고, LC_ALL=C로 로케일에 따른 정렬 순서 차이를 없앱니다. 각 줄의 해시는 파일 내용(끝의 개행 포함)에 따라 결정됩니다.
체크섬 목록으로 무결성 검증
준비: mkdir -p /tmp/demo/config; printf 'a\n' > /tmp/demo/config/net.conf; printf 'b\n' > /tmp/demo/config/app.conf; printf 'c\n' > /tmp/demo/config/db.conf; cd /tmp/demo/config && sha256sum *.conf | LC_ALL=C sort -k2 > /tmp/demo/checksums.txt; printf 'changed\n' > /tmp/demo/config/db.conf
$ cd /tmp/demo/config && sha256sum -c /tmp/demo/checksums.txt; echo "rc=$?"
app.conf: OK
db.conf: FAILED
net.conf: OK
sha256sum: WARNING: 1 computed checksum did NOT match
rc=1
내용이 바뀐 db.conf만 FAILED로 표시되고 나머지는 OK가 됩니다. 불일치가 하나라도 있으면 sha256sum의 종료 코드가 1이므로 스크립트에서 판정에 쓸 수 있습니다. 여기서 rc는 echo 앞 명령인 sha256sum의 종료 코드입니다.
검증 결과를 OK/FAILED 개수로 집계
준비: mkdir -p /tmp/demo/verify; cd /tmp/demo/verify; printf 'a\n' > f1.txt; printf 'b\n' > f2.txt; printf 'c\n' > f3.txt; sha256sum f1.txt f2.txt f3.txt > checksums.txt; printf 'broken\n' > f2.txt
$ cd /tmp/demo/verify && sha256sum -c checksums.txt 2>/dev/null | awk -F': ' '{if($2=="OK") o++; else f++} END{print "OK=" o+0; print "FAILED=" f+0}'
OK=2
FAILED=1
검증 출력을 awk로 집계해 리포트 형식으로 만듭니다. 요약 경고 메시지는 표준 오류로 나오므로 2>/dev/null로 걸러 집계에 섞이지 않게 합니다. 다만 파이프를 쓰면 sha256sum의 종료 코드가 가려지므로, 성공/실패 판정까지 필요하면 PIPESTATUS를 확인하거나 검증과 집계를 나누어 실행하세요.
주의할 점
- 체크섬과 파일명 사이는 텍스트 모드에서 공백 두 칸입니다. 목록 파일을 직접 편집해 한 칸으로 만들면 -c 검증에서 형식 오류가 납니다.
- -c 검증은 목록 파일에 적힌 경로를 그대로 사용합니다. 상대 경로로 기록했다면 목록을 만든 디렉터리에서 검증해야 하고, 절대 경로로 기록했다면 파일이 그 경로에 그대로 있어야 합니다.
- sha256sum *.conf의 출력 순서는 셸 확장 순서라 로케일에 따라 달라질 수 있습니다. 정렬이 필요하면 LC_ALL=C sort -k2처럼 명시하세요.
- --quiet, --status, --strict, -w, --ignore-missing는 -c로 검증할 때만 의미가 있습니다.
- sha256sum은 파일 내용만 계산합니다. 권한·소유자·타임스탬프 변경은 탐지하지 못합니다.
- 매니페스트가 검증 대상과 같은 위치에 있으면 파일과 함께 다시 만들어질 수 있으므로, 변조 탐지 목적이라면 매니페스트를 별도 위치에 보관하거나 AIDE 같은 전용 도구를 함께 사용하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
