Linux / 명령어 / shred - 파일 데이터 덮어쓰기

shred는 파일이나 장치의 데이터 영역을 여러 패턴으로 덮어써 기존 내용을 알아보기 어렵게 만드는 명령입니다. 그러나 SSD의 웨어 레벨링, 파일 시스템 스냅샷, 복사 방식 저장, 백업과 RAID 때문에 모든 복사본의 완전 삭제를 보장하는 도구는 아닙니다.

이 글에서는 기본 사용법과 옵션뿐 아니라 shred가 효과를 기대할 수 있는 조건, 효과가 제한되는 저장 환경과 더 적절한 폐기 방법을 설명합니다.

shred 명령어란?

shred는 지정한 파일이나 블록 장치에 반복적으로 데이터를 기록합니다. 기본적으로 덮어쓴 뒤 파일 이름을 삭제하지 않으며 -u가 있어야 제거까지 시도합니다. 파일 데이터가 같은 물리 위치에 계속 기록된다는 가정에 의존하므로 현대 저장 장치와 파일 시스템에서는 원본 흔적이 다른 위치에 남을 수 있습니다.

기본 문법

shred [옵션] 파일 ...

파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 shred --help와 man shred으로 현재 시스템의 설명을 확인하세요.

shred 기본 사용법

파일 덮어쓰기

기본 실행은 파일 내용을 여러 차례 덮어쓰지만 파일 항목은 남깁니다. 테스트용 파일에서 동작을 먼저 확인하세요.

shred secret.txt

덮어쓴 뒤 파일 제거하기

-u는 덮어쓰기 후 파일을 제거합니다. 삭제 결과가 모든 저장 계층에서 사라졌다는 뜻은 아닙니다.

shred -u secret.txt

진행 상황 확인하기

큰 파일이나 장치를 처리할 때 -v로 진행 정보를 볼 수 있습니다.

shred -v -n 3 disk-image.raw

완료 메시지와 실제 삭제 보장 구별하기

shred는 옵션에 따라 진행 상황을 보여주지만, 아무 오류 없이 끝났다고 물리 저장 매체의 모든 사본이 지워졌다고 보장할 수 없습니다. 다음은 직접 만든 시험 파일만 대상으로 합니다.

printf 'demo\n' > disposable-demo.txt
shred -u disposable-demo.txt
test ! -e disposable-demo.txt
echo $?

예시 출력 0은 파일 이름이 사라졌다는 확인일 뿐입니다. SSD, 스냅샷, 저널링 파일시스템, 백업에 남은 데이터는 별도로 고려해야 합니다.

주요 옵션

옵션 설명
-n N, --iterations=N 임의 데이터 덮어쓰기 횟수를 지정합니다.
-u, --remove 덮어쓴 뒤 파일을 제거합니다.
-z, --zero 마지막에 0으로 한 번 더 덮어써 흔적을 덜 눈에 띄게 합니다.
-v, --verbose 진행 상황을 출력합니다.
-s SIZE 지정한 바이트 수만 덮어씁니다.
-x, --exact 파일을 전체 블록 경계까지 늘리지 않습니다.
-f, --force 필요한 경우 권한을 바꿔 쓰기를 시도합니다.
--random-source=FILE 임의 바이트의 공급원을 지정합니다.

긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.

실전 활용 예제

일반 파일을 제한된 횟수로 덮어쓰기

덮어쓰기 횟수가 늘면 시간이 증가합니다. 현대 저장 환경에서는 횟수를 늘리는 것보다 저장 계층의 특성과 암호화 여부를 파악하는 것이 더 중요합니다.

shred -v -n 1 -z -u confidential.bin

블록 장치 처리 전 식별하기

장치 경로를 잘못 지정하면 다른 디스크 전체가 파괴될 수 있습니다. 마운트를 해제하고 lsblk, 크기, 모델과 연결 관계를 여러 방법으로 확인해야 합니다.

lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
findmnt

암호화 기반 폐기 검토하기

처음부터 전체 디스크 암호화를 사용했다면 신뢰할 수 있는 키 폐기가 데이터 접근을 막는 중요한 수단이 될 수 있습니다. 조직 정책과 장치 제조사의 보안 삭제 기능, 물리 폐기 요구사항을 함께 검토하세요.

cryptsetup status encrypted-volume

shred와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
rm 파일 이름 제거와 공간 반환 기밀 흔적 제거가 목적이 아닌 일반 삭제
shred 같은 위치에 반복 쓰기 시도 조건이 맞는 저장 매체의 제한적 덮어쓰기
장치 보안 삭제 장치 펌웨어 수준의 삭제·키 폐기 지원되는 SSD·NVMe의 전체 폐기
물리적 파기 매체 자체를 복구 불가능하게 처리 규정상 높은 보증 수준이 필요한 폐기

사용할 때 주의할 점

SSD에서는 같은 셀에 덮어쓴다고 보장할 수 없다

웨어 레벨링과 예비 블록 때문에 논리 주소에 다시 써도 원래 데이터가 있던 물리 셀이 즉시 덮이지 않을 수 있습니다.

파일 시스템 복사본이 남을 수 있다

저널, 스냅샷, copy-on-write, RAID, 원격 동기화와 백업에는 별도 복사본이 있을 수 있습니다. 개별 파일만 덮어써서는 모두 제거할 수 없습니다.

장치 경로 오타는 치명적이다

블록 장치에 실행하면 파일 시스템 전체를 잃을 수 있습니다. 마운트 상태와 장치 ID를 확인하고 복구할 데이터가 없는지 독립적으로 검증하세요.

FAQ

shred -u를 사용하면 파일을 완전히 복구할 수 없나요?

보장할 수 없습니다. 저장 장치, 파일 시스템, 스냅샷과 백업 구조에 따라 다른 복사본이나 이전 물리 블록이 남을 수 있습니다.

SSD 파일에도 shred를 사용하면 되나요?

SSD의 웨어 레벨링 때문에 개별 파일 덮어쓰기의 효과를 신뢰하기 어렵습니다. 전체 디스크 암호화와 제조사·표준 기반 보안 삭제 절차를 검토하세요.

-z 옵션은 보안을 더 높이나요?

마지막 덮어쓰기를 0으로 해 덮어쓴 사실을 덜 눈에 띄게 하는 옵션이며, 다른 계층의 복사본을 제거하거나 완전 삭제를 보장하지 않습니다.

일반 파일 삭제에는 rm과 shred 중 무엇이 좋나요?

기밀 데이터의 잔존 위험을 별도로 다루지 않는 일반 삭제는 rm이 적합합니다. shred는 저장 환경과 위협 모델을 이해할 때만 사용하세요.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux whereis 명령어로 프로그램의 바이너리, 소스와 매뉴얼 페이지 위치를 찾는 방법을 설명합니다. 검색 범위 제한과 which·find와의 차이도 정리합니다.

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

cat, less, more, head, tail로 리눅스 파일 내용을 읽는 방법을 비교합니다. 짧은 파일과 긴 파일, 앞·뒤 일부를 확인할 때의 선택 기준과 실습 결과를 설명합니다.

Linux / 명령어 / mkdir - 디렉터리 생성

Linux / 명령어 / mkdir - 디렉터리 생성

Linux mkdir 명령어로 디렉터리와 여러 단계의 상위 디렉터리를 만드는 방법을 설명합니다. 권한, umask, SELinux 환경과 자동화에서 안전하게 사용하는 방법도 정리합니다.

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux whoami 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux ls 명령어로 파일과 디렉터리 목록, 숨김 파일, 권한과 소유자, 크기 및 수정 시간을 확인하는 방법을 설명합니다. 자주 쓰는 옵션 조합과 정렬 방법, 스크립트에서 ls 출력을 안전하게 다루는 기준도 정리합니다.

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux / 명령어 / dpkg - 로컬 DEB 패키지 설치와 설치 정보 조회

Linux / 명령어 / dpkg - 로컬 DEB 패키지 설치와 설치 정보 조회

Linux dpkg 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / Memo

Linux / Memo

리눅스와 관련된 여러 정보를 정리합니다.

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux xargs 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / lsmod - 로드된 커널 모듈 확인

Linux / 명령어 / lsmod - 로드된 커널 모듈 확인

Linux lsmod 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.