JooTC
linux-logo-green

리눅스 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으로 표기하겠습니다. 이 세 가지 개념은 다음 포스트에 자세히 설명되어 있습니다.

리눅스 파일 시스템의 atime, mtime, 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

 

이 글에 대해 어떻게 생각하시나요?
유용한 포스트였나요? 여러분의 의견을 하단의 Vote와 댓글로 남겨주세요 🙂
유용합니다!
아쉽습니다.

여러분의 의견을 댓글로 남겨주세요.

avatar
error: s