명령어

리눅스 touch 명령어 – 타임스탬프 변경 및 빈 파일 생성

리눅스 명령어 – touch


touch 명령어는 기존 파일의 날짜(타임스탬프)를 임의로 변경해주는 역할을 합니다. 타임스탬프 변경은 소스 파일을 컴파일하거나 임의의 액세스 시점을 파악하기 위해서 주로 사용됩니다.

또한 touch 명령어는 파일이 존재하지 않을 경우 아무런 내용이 없는 빈 파일을 생성해주는 역할을 합니다.

 

 

사용 방법 – 빈 파일 생성


먼저 아무런 옵션을 넣지 않고 인자값파일 이름만 지정해보겠습니다.

$ touch testfile

만약 testfile 이라는 파일이 없을 경우 0바이트의 새로운 빈 파일이 생성됩니다.

$ ls -al
total 4
drwx------. 16 user user 4096 Jan 13 19:15 .
drwxr-xr-x.  3 root root   18 Oct 13 16:02 ..
-rw-rw-r--.  1 user user    0 Jan 13 19:15 testfile

파일명을 계속 입력하여 여러 파일을 동시에 생성할 수도 있습니다.

$ touch testfile1 testfile2 testfile3 testfile4

touch 명령어에 -c 옵션을 붙이면 파일이 없어도 별도로 생성하지 않게 됩니다.

$ touch -c testfile
$ ls -al
total 4
drwxrwxr-x.  2 test test    6 Jan 13 19:15 .
drwx------. 17 test test 4096 Jan 13 19:15 ..

 

 

사용 방법 – 타임스탬프 변경

리눅스 파일 시스템타임스탬프atime(접근 시간), mtime(수정 시간), ctime (변경 시간)의 세 가지로 구성되어 있습니다.

포스팅 편의상 a/m/ctime으로 표기하겠습니다. 이 세 가지 개념은 다음 포스트에 자세히 설명되어 있습니다.

 

현재 파일의 타임스탬프 값은 stat 명령어를 통해 확인이 가능합니다. stat [filename] 을 입력하여 현재 타임스탬프 값을 확인해보겠습니다.

$ stat testfile 
  File: ‘testfile’
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d Inode: 101254431   Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    test)   Gid: ( 1000/    test)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2019-01-13 19:15:59.084552439 +0900
Modify: 2019-01-13 19:15:59.084552439 +0900
Change: 2019-01-13 19:15:59.084552439 +0900
 Birth: -

touch 명령어로 생성된 파일은 이 세 가지 타임스탬프 값을 생성한 시각 대로 지정합니다.

이미 만들어진 파일에 또 다시 옵션 없이 touch 명령어를 사용하면 atimemtime, ctime이 모두 현재 시각으로 업데이트될 것입니다.

$ touch testfile // 새로운 파일이 생성됨
$ stat testfile
...
Access: 2019-01-13 21:03:08.790886454 +0900
Modify: 2019-01-13 21:03:08.790886454 +0900
Change: 2019-01-13 21:03:08.790886454 +0900
...
$ touch testfile // 기존의 파일에 업데이트됨
$ stat testfile
...
Access: 2019-01-13 21:09:02.086230538 +0900
Modify: 2019-01-13 21:09:02.086230538 +0900
Change: 2019-01-13 21:09:02.086230538 +0900
...

 

만약 파일에 액세스하지 않고 단순히 날짜만 수정했다는 의미로 타임스탬프를 변경하고 싶다면 atime을 건드리지 않아야 할 것입니다.

이 때는 -m 옵션을 붙여서 사용하면 됩니다. mtimectime이 변경될 것입니다.

$ touch -m testfile // 기존의 파일에 업데이트됨
$ stat testfile
...
Access: 2019-01-13 21:09:02.086230538 +0900
Modify: 2019-01-13 21:11:15.087689025 +0900
Change: 2019-01-13 21:11:15.087689025 +0900

 

반대로 파일에 액세스한 시각(atime)만 변경하고 싶다면 -a 옵션을 붙여주면 됩니다. 이번에는 mtime을 제외한 시각이 모두 현재 시각으로 업데이트되었습니다.

$ touch -a testfile // 기존의 파일에 업데이트됨
$ stat testfile
...
Access: 2019-01-13 21:10:46.540865813 +0900
Modify: 2019-01-13 21:11:15.087689025 +0900
Change: 2019-01-13 21:10:46.540865813 +0900

 

이 두 가지 옵션을 사용해도 ctime은 항상 변경될 것입니다. 왜냐하면 ctimeinode의 값이 변경될 때 마다 자동으로 업데이트되기 때문입니다.

 

지금까지는 현재 시각(명령을 실행한 시각)을 기준으로 타임스탬프 값을 변경하였습니다. 그렇지만 특별히 변경하고 싶은 시간대가 있다면 -t 옵션을 사용하여 임의의 시간대를 지정해주시면 됩니다. (사용 포맷은 [[CC]YY]MMDDhhmm[.ss] 입니다.)

위에서 설명한 -a 옵션을 사용하여 atime2019년 1월 1일 오후 12시 30분 59초로 맞추어보겠습니다.

$ touch -a -t 201901011230.59 testfile

stat 명령어로 변경된 시각을 확인해보면 atime이 2019년 1월 1일 오후 12시 30분 59초로 변경되었음을 알 수 있습니다.

$ stat testfile
...
Access: 2019-01-01 12:30:59.000000000 +0900
Modify: 2019-01-13 21:05:59.087689025 +0900
Change: 2019-01-13 21:16:28.579628876 +0900
...

주의할 점은 이번에는 ctime이 2019년 1월 1일 오후 12시 30분 59초가 아닌, 현재 시각(명령을 실행한 시각)으로 변경되었다는 것입니다. ctime은 언제나 inode가 변경된 최종 시각을 기준으로 시각을 업데이트하기 때문입니다.

 

마지막으로 특정 파일의 시각 정보를 다른 파일로 덮어씌울 수 있습니다. 다음은 testfile2의 atime, mtime을 testfile1의 atime, mtime과 동일하게 설정하는 명령어입니다.

$ touch -r testfile1 testfile2

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

2주 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

6개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

8개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

8개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

8개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

8개월 ago