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

touch는 파일이 없으면 빈 파일을 만들고, 파일이 있으면 접근 시각과 수정 시각을 갱신하는 명령입니다. 파일 내용을 바꾸지 않고 타임스탬프만 조정할 수 있어 테스트 파일 생성, 빌드 작업과 자동화 스크립트에서 자주 사용합니다.

이 글에서는 GNU Coreutils의 touch를 기준으로 기본 사용법, atime과 mtime 선택, 원하는 날짜 지정, 기준 파일의 시간 복사와 심볼릭 링크 처리 방법을 설명합니다.

touch 명령어란?

touch는 지정한 파일의 접근 시각(access time)과 내용 수정 시각(modification time)을 기본적으로 현재 시각으로 설정합니다. 파일이 없을 때는 크기가 0바이트인 일반 파일을 새로 만들지만, -c를 사용하면 새 파일을 만들지 않습니다. ctime이나 파일 생성 시각(Birth time)을 원하는 값으로 직접 설정하는 명령은 아닙니다.

기본 문법

touch [옵션] 파일 ...

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

touch 기본 사용법

빈 파일 만들기

존재하지 않는 경로를 지정하면 빈 파일이 생성됩니다. 여러 파일도 한 번에 만들 수 있습니다.

touch memo.txt
touch file1.txt file2.txt file3.txt
touch "annual report.txt"

기존 파일의 시간을 현재로 갱신하기

파일이 이미 있으면 내용과 크기는 유지되고 접근 시각과 수정 시각이 현재 시각으로 갱신됩니다. 변경 전후 값은 stat으로 확인할 수 있습니다.

stat notes.txt
touch notes.txt
stat notes.txt

파일이 없을 때 만들지 않기

기존 파일의 시간만 갱신해야 한다면 -c 또는 --no-create를 사용합니다. 대상이 없어도 새 파일을 만들지 않으며 일반적으로 오류 메시지도 출력하지 않습니다.

touch -c existing.txt

실행 결과 확인하기

touch는 성공해도 보통 화면에 아무것도 출력하지 않습니다. 새로 만든 파일의 크기가 0바이트인지 확인하려면 다음처럼 조회합니다.

touch empty-demo.txt
stat -c '%s %n' empty-demo.txt

예시 출력:

0 empty-demo.txt

기존 파일에 같은 명령을 실행했다면 크기와 내용은 그대로이며 접근·수정 시각만 갱신될 수 있습니다. 그 차이는 stat -c '%x %y'로 확인하세요.

주요 옵션

옵션 설명
-a 접근 시각만 변경합니다.
-m 내용 수정 시각만 변경합니다.
-c, --no-create 대상 파일이 없어도 새 파일을 만들지 않습니다.
-d STRING 사람이 읽기 쉬운 날짜 문자열을 해석해 시간을 설정합니다.
-t STAMP [[CC]YY]MMDDhhmm[.ss] 형식으로 시간을 지정합니다.
-r FILE 기준 파일의 접근·수정 시각을 복사합니다.
-h, --no-dereference 가능한 시스템에서 링크 대상이 아니라 심볼릭 링크 자체의 시간을 변경합니다.
--time=WORD access 또는 modify처럼 변경할 시간을 선택합니다.

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

실전 활용 예제

접근 시각과 수정 시각을 따로 변경하기

-a는 atime만, -m은 mtime만 변경합니다. 두 옵션을 함께 사용하면 기본 동작과 같이 두 시간을 모두 바꿉니다.

touch -a access-log.txt
touch -m generated.css

원하는 날짜와 시각 지정하기

-d는 날짜 문자열을 해석합니다. 시간대나 상대 표현은 실행 환경에 따라 해석 결과가 달라질 수 있으므로 자동화에서는 명확한 형식과 시간대를 사용하는 편이 안전합니다.

touch -d '2026-09-23 14:30:00 +0900' report.txt
touch -t 202609231430.00 report.txt

기준 파일의 타임스탬프 복사하기

-r을 사용하면 기준 파일의 atime과 mtime을 다른 파일에 적용할 수 있습니다. 복사한 뒤 stat으로 결과를 검증하세요.

touch -r reference.txt target.txt
stat reference.txt target.txt

touch와 관련 명령 비교

명령·방법 주요 역할 적합한 상황
touch 빈 파일 생성 또는 atime·mtime 변경 내용을 쓰지 않고 파일이나 시간을 준비할 때
truncate 파일 크기를 지정하거나 조정 0바이트 파일 또는 특정 크기의 파일이 필요할 때
date 현재 시각 표시·변환과 시스템 시각 관리 날짜 계산이나 형식 변환이 필요할 때
stat 파일 메타데이터 조회 변경 전후 타임스탬프를 확인할 때

사용할 때 주의할 점

touch는 내용을 비우지 않는다

기존 파일에 touch를 실행해도 파일 내용은 유지됩니다. 파일을 0바이트로 줄이려면 truncate -s 0이나 적절한 리디렉션을 사용해야 합니다.

ctime과 생성 시각은 직접 지정할 수 없다

파일의 inode 상태가 바뀌면 ctime은 커널이 갱신합니다. touch로 ctime이나 Birth time을 임의의 값으로 설정할 수 있다고 가정하지 마세요.

빌드 우회를 위해 시간을 조작하지 않는다

타임스탬프 기반 빌드 도구에서 강제로 재빌드할 때 유용하지만, 의존성 문제를 숨기는 용도로 사용하면 재현하기 어려운 결과가 생길 수 있습니다.

FAQ

touch로 기존 파일 내용이 삭제되나요?

아닙니다. 기존 파일의 내용과 크기는 유지되고 선택한 타임스탬프만 변경됩니다.

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

touch -c 파일을 사용합니다. 대상이 없으면 새 파일을 만들지 않습니다.

수정 시각만 바꾸려면 어떻게 하나요?

touch -m 파일을 사용합니다. 접근 시각만 바꾸려면 -a를 사용하세요.

다른 파일과 같은 시간으로 맞출 수 있나요?

touch -r 기준파일 대상파일을 사용하면 기준 파일의 접근·수정 시각을 복사할 수 있습니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / w - 로그인 사용자와 실행 중인 작업 확인

Linux / 명령어 / w - 로그인 사용자와 실행 중인 작업 확인

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

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

리눅스 Bash의 ;, &&, ||, &, |, |&, ! 차이를 종료 상태와 실제 예제로 설명합니다. 조건부 실행, 백그라운드 작업, 파이프라인과 pipefail 사용법까지 정리합니다.

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux wc 명령어로 줄·단어·바이트·문자 수를 확인하는 방법을 설명합니다. 개행 기준의 줄 수, -c와 -m 차이, 여러 파일 합계와 안전한 파이프 활용 예제를 정리합니다.

Linux / 명령어 / who - 현재 로그인 세션 확인

Linux / 명령어 / who - 현재 로그인 세션 확인

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

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

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

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

Linux / 명령어 / install - 파일 복사와 권한 설정

Linux / 명령어 / install - 파일 복사와 권한 설정

Linux install 명령어로 파일을 복사하면서 권한, 소유자와 대상 디렉터리를 설정하는 방법을 설명합니다. cp와의 차이와 배포 스크립트에서의 활용법도 알아봅니다.

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux env 명령어로 환경 변수를 추가·제거하거나 깨끗한 환경에서 프로그램을 실행하는 방법을 설명합니다. env -i·-u·-C, shebang 활용과 printenv와의 차이를 다룹니다.

Linux 강좌 / 배포판 선택하기

Linux 강좌 / 배포판 선택하기

리눅스 입문과 서버 실습에 Ubuntu와 Rocky Linux 중 무엇을 선택하면 좋을까요? 학습 목표, 패키지 관리 방식과 지원 정책을 기준으로 두 배포판을 비교합니다.

Linux / 명령어 / uniq - 인접한 중복 행 정리

Linux / 명령어 / uniq - 인접한 중복 행 정리

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

Linux / 명령어 / unalias - 명령어 별칭 삭제

Linux / 명령어 / unalias - 명령어 별칭 삭제

Bash unalias 명령어로 특정 별칭이나 모든 별칭을 제거하는 방법을 설명합니다. 일시 제거와 영구 제거, 별칭 우회 및 함수·변수 삭제와의 차이를 정리합니다.