Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

truncate는 파일의 논리적 크기를 지정한 값으로 줄이거나 늘리는 명령입니다. 파일을 줄이면 잘려 나간 데이터는 손실되고, 늘리면 추가 구간은 일반적으로 0으로 읽히는 희소 영역이 될 수 있습니다.

이 글에서는 절대·상대 크기 지정, 단위, 기준 파일과 크기 맞추기, 희소 파일과 실제 디스크 사용량의 차이, 안전하게 결과를 확인하는 방법을 설명합니다.

truncate 명령어란?

truncate는 파일 내용을 재작성하지 않고 파일의 끝 위치를 변경합니다. 존재하지 않는 파일은 기본적으로 새로 만들며, -c를 사용하면 생성하지 않습니다. 크기를 줄이는 작업은 되돌릴 수 있는 편집이 아니므로 중요한 파일은 먼저 백업해야 합니다.

기본 문법

truncate [옵션] 파일 ...

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

truncate 기본 사용법

파일을 0바이트로 비우기

파일은 남겨 두고 내용 길이만 0으로 만듭니다. 실행 중인 서비스의 로그를 임의로 비우면 파일 오프셋이나 로그 관리 정책에 문제가 생길 수 있으므로 전용 로그 회전 도구를 우선 검토하세요.

truncate -s 0 application.log

지정한 크기의 파일 만들기

-s에 크기와 단위를 지정합니다. 파일이 없으면 새로 생성됩니다.

truncate -s 100M test.img
truncate -s 1GiB sparse.img

기존 크기에서 늘리거나 줄이기

크기 앞의 +는 늘리고 -는 줄입니다. 셸 옵션으로 오해되지 않도록 값은 -s의 인수로 정확히 전달합니다.

truncate -s +10M data.bin
truncate -s -512K data.bin

내용을 비운 뒤 크기 확인하기

truncate는 성공해도 대개 메시지가 없습니다. 기존 파일에 -s 0을 적용하면 바이트 크기가 0이 됩니다.

printf 'abc' > demo.txt
truncate -s 0 demo.txt
stat -c '%s %n' demo.txt

예시 출력은 0 demo.txt입니다. 파일 내용은 복구되지 않으므로 실제 로그나 데이터 파일에서 사용하기 전에는 백업과 대상 경로를 확인하세요.

주요 옵션

옵션 설명
-s SIZE, --size=SIZE 파일 크기를 지정하거나 접두 기호에 따라 조정합니다.
-c, --no-create 없는 파일을 새로 만들지 않습니다.
-r FILE, --reference=FILE 기준 파일의 크기를 사용합니다.
-o, --io-blocks 크기를 바이트가 아니라 파일의 I/O 블록 단위로 해석합니다.

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

실전 활용 예제

기준 파일과 같은 크기로 맞추기

-r은 기준 파일의 현재 크기를 대상에 적용합니다. 내용이 복사되는 것이 아니라 크기만 맞춰집니다.

truncate -r reference.img target.img
stat -c '%s %n' reference.img target.img

최소·최대 크기 제한하기

GNU truncate의 크기 접두사는 현재 크기에 조건을 적용할 수 있습니다. <는 지정 크기보다 클 때 줄이고, >는 작을 때 늘립니다.

truncate -s '<100M' cache.bin
truncate -s '>1M' placeholder.bin

논리적 크기와 디스크 사용량 비교하기

늘어난 영역은 블록이 실제로 할당되지 않은 희소 영역일 수 있습니다. stat과 du를 함께 사용해 논리 크기와 할당량을 구분하세요.

truncate -s 1G sparse.img
stat -c 'size=%s blocks=%b' sparse.img
du -h sparse.img

truncate와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
truncate 파일 끝 위치와 논리 크기 변경 빠르게 크기를 조정하거나 희소 파일을 만들 때
touch 빈 파일 생성 또는 타임스탬프 변경 기존 내용과 크기를 유지할 때
dd 실제 데이터 블록 쓰기·복사 내용을 채우거나 장치 데이터를 복제할 때
로그 회전 도구 로그 보관·압축·재개방 관리 운영 서비스 로그를 정리할 때

사용할 때 주의할 점

크기를 줄이면 데이터가 손실된다

잘려 나간 파일 끝부분은 일반적인 명령으로 되돌릴 수 없습니다. 중요한 파일은 복사본을 만든 뒤 작업하세요.

파일을 늘려도 유효한 포맷이 되지 않는다

이미지나 파일 시스템 파일의 크기를 늘린다고 내부 구조가 자동으로 확장되지는 않습니다. 해당 포맷의 전용 도구가 필요합니다.

희소 파일의 복사 방식을 확인한다

복사 도구와 대상 파일 시스템이 희소 영역을 보존하지 않으면 실제 디스크 사용량이 크게 늘 수 있습니다.

FAQ

truncate -s 0은 파일을 삭제하나요?

아닙니다. 파일 항목과 권한은 남아 있고 내용 길이만 0바이트가 됩니다.

파일을 크게 만들면 그만큼 디스크 공간이 즉시 사용되나요?

늘어난 영역이 희소 영역으로 만들어지면 논리적 크기보다 실제 할당량이 작을 수 있습니다. du와 stat으로 확인하세요.

없는 파일을 만들지 않으려면 어떻게 하나요?

truncate -c -s 크기 파일을 사용합니다.

기준 파일의 내용도 복사되나요?

아닙니다. -r은 기준 파일의 크기만 사용하며 내용은 복사하지 않습니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

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

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

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux / 명령어 / touch - 파일 생성과 타임스탬프 변경

Linux touch 명령어로 빈 파일을 만들고 접근 시각과 수정 시각을 변경하는 방법을 설명합니다. 기준 파일의 시간을 복사하는 방법과 스크립트에서 사용할 때의 주의점도 알아봅니다.

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux tail 명령어로 파일의 마지막 행과 바이트를 확인하고 새로 추가되는 로그를 추적하는 방법을 설명합니다. -n, -f, -F 차이와 로그 로테이션, 필터링 및 여러 파일 모니터링 예제를 정리합니다.

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

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

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux diff 명령어로 텍스트 파일과 디렉터리의 차이를 비교하는 방법을 설명합니다. unified 형식, 재귀 비교, 공백 무시와 종료 상태를 정리합니다.

Linux / 명령어 / history - 명령어 실행 기록 확인

Linux / 명령어 / history - 명령어 실행 기록 확인

Bash history 명령어로 이전 명령을 조회·검색·재실행·삭제하는 방법을 설명합니다. ~/.bash_history, HISTCONTROL, HISTTIMEFORMAT, histappend와 여러 터미널 기록 동기화 방법도 함께 정리합니다.

Linux / 명령어 / bunzip2 - bzip2 압축 파일 풀기

Linux / 명령어 / bunzip2 - bzip2 압축 파일 풀기

Linux bunzip2 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / groups - 사용자의 그룹 소속 확인

Linux / 명령어 / groups - 사용자의 그룹 소속 확인

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

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

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

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

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

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