정의
touch는 유닉스 및 유닉스 계열 운영체제에서 제공되는 표준 명령어로, 파일의 접근 시간(atime)과 수정 시간(mtime)을 현재 시각으로 업데이트하거나, 지정된 시간으로 변경한다. 대상 파일이 존재하지 않을 경우 빈 파일을 새로 생성한다.
역사 및 표준
- 최초 구현은 1970년대 초 AT&T UNIX System V에 포함되었다.
- POSIX.1‑2001 표준(IEEE Std 1003.1)에서
touch명령을 정의하고 있으며, 이후 POSIX.1‑2008 및 POSIX.1‑2017에서도 지속적으로 명세가 유지되고 있다. - GNU coreutils, BSD, macOS, BusyBox 등 다양한 유닉스 계열 시스템에서
touch를 구현하고 있다.
기본 구문
touch [옵션] 파일명...
주요 옵션
| 옵션 | 설명 |
|---|---|
-a |
접근 시간(atime)만 현재 시각으로 업데이트한다. |
-m |
수정 시간(mtime)만 현재 시각으로 업데이트한다. |
-c, --no-create |
파일이 존재하지 않을 경우 새 파일을 생성하지 않는다. |
-d DATE, --date=DATE |
DATE 문자열(예: "2023-04-01 12:34:56")으로 시간을 지정한다. |
-t STAMP, --touch=STAMP |
[[CC]YY]MMDDhhmm[.ss] 형식의 타임스탬프를 지정한다. |
-r REFERENCE, --reference=REFERENCE |
REFERENCE 파일의 타임스탬프를 그대로 사용한다. |
--help |
사용법을 출력한다. |
--version |
프로그램 버전을 출력한다. |
작동 방식
- 파일이 존재하면 커널의
utimes(2)혹은utimensat(2)시스템 호출을 이용해 파일 메타데이터에 기록된 시간 값을 수정한다. - 파일이 존재하지 않고
-c옵션이 지정되지 않은 경우,open(2)시스템 호출을O_CREAT플래그와 함께 사용해 새 파일을 생성한다. 파일 내용은 0바이트이며, 권한은umask에 따라 결정된다.
예시
-
현재 시각으로 파일
example.txt의 타임스탬프를 업데이트하고 파일이 없으면 생성한다.touch example.txt -
파일
log.txt의 수정 시간만 현재 시각으로 갱신한다.touch -m log.txt -
2022-12-31 23:59:59로 파일old.txt의 모든 타임스탬프를 설정한다.touch -d "2022-12-31 23:59:59" old.txt -
reference.dat파일의 타임스탬프를report.pdf에 복사한다.touch -r reference.dat report.pdf
주의 사항
- 파일의 소유자가 아닌 경우, 파일 접근 권한에 따라 타임스탬프 변경이 제한될 수 있다.
-c옵션을 사용하지 않으면 파일이 존재하지 않을 때 자동으로 빈 파일이 생성되므로, 의도치 않은 파일 생성을 방지하려면 옵션을 명시적으로 지정한다.
관련 명령
stat: 파일의 상세 메타데이터(특히 타임스탬프)를 확인한다.chmod,chown: 파일 권한 및 소유자를 변경한다.
참고
- POSIX.1‑2008,
touch명령 명세: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html - GNU coreutils 매뉴얼: https://www.gnu.org/software/coreutils/manual/html_node/touch-invocation.html