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 / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교

Linux cmp 명령어로 두 파일을 바이트 단위로 비교하는 방법을 설명합니다. 첫 차이 위치, 조용한 검사, 모든 차이 출력과 종료 상태 활용법을 정리합니다.

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

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

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

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

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

Linux / 명령어 / ln - 하드 링크와 심볼릭 링크 생성

Linux / 명령어 / ln - 하드 링크와 심볼릭 링크 생성

Linux ln 명령어로 하드 링크와 심볼릭 링크를 만드는 방법을 설명합니다. 두 링크의 차이, 상대 경로, 깨진 링크와 기존 링크 교체 시 주의점도 정리합니다.

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux realpath 명령어로 상대 경로와 심볼릭 링크를 정규화하고 절대·상대 경로를 출력하는 방법을 설명합니다. 경로 존재 조건과 보안상 주의점도 함께 정리합니다.

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

리눅스는 1991년 시작된 커널 프로젝트에서 서버·클라우드·모바일을 떠받치는 기반 기술로 성장했습니다. UNIX와 GNU의 배경부터 배포판과 공동 개발 생태계의 확장까지 핵심 연표로 정리합니다.

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux sftp 명령어로 SSH 기반 파일을 업로드하고 다운로드하는 방법을 설명합니다. 경로 구분, 전송 재개, 공개 키 인증, 배치 자동화와 보안 점검 사항을 정리합니다.

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux find 명령어로 경로, 이름, 종류, 크기, 시간과 권한 조건을 조합해 파일을 찾는 방법을 설명합니다. 안전한 exec 사용과 삭제 전 검증도 다룹니다.

Linux / 명령어 / screen - 터미널 세션 유지와 관리

Linux / 명령어 / screen - 터미널 세션 유지와 관리

Linux screen 명령어로 원격 터미널 세션을 분리하고 다시 연결하는 방법을 설명합니다. 세션·창 관리, 로그 기록, 문제 해결과 nohup·tmux·systemd의 차이를 정리합니다.

Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력

Linux tac 명령어로 파일의 줄 순서를 뒤집어 마지막 줄부터 출력하는 방법을 설명합니다. 여러 파일 처리, 구분자 변경과 로그 확인 예제를 함께 정리합니다.