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 / 명령어 / whatis - 명령어의 한 줄 설명 확인

Linux / 명령어 / whatis - 명령어의 한 줄 설명 확인

whatis 명령어로 매뉴얼 페이지의 한 줄 설명과 섹션을 확인하는 방법을 설명합니다. 정규 표현식·와일드카드 검색, apropos·type과의 차이 및 색인 문제 해결법을 정리합니다.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

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

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

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

Linux / 명령어 / cd - 디렉터리 이동

Linux / 명령어 / cd - 디렉터리 이동

Linux cd 명령어로 절대·상대 경로, 홈과 이전 디렉터리로 이동하는 방법을 설명합니다. 심볼릭 링크 처리, CDPATH, 스크립트와 sudo cd의 한계 및 오류 해결법도 정리합니다.

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux / 명령어 / uptime - 시스템 가동 시간과 부하 확인

Linux uptime 명령어의 가동 시간과 1분·5분·15분 평균 부하를 읽는 방법을 설명합니다. CPU 개수, I/O 대기와 함께 부하를 진단하는 순서도 정리합니다.