Linux 나 Unix 계열의 운영 체제에서 파일이나 디렉터리는 inode 에  시간 관련해서 atime, mtime, ctime 이라는 3가지 속성을 저장합니다.

find 명령어나 ls 명령어 사용시 3 가지 속성에 대해서 이해해야 하는데 atime 은 명확하지만 mtime 과 ctime 은 혼란스러운 경우가 많습니다.


차이점

atime

atime 은 access time 의 약자의 파일에 마지막 접근 시간을 의미합니다. 즉 cat 이나 vi 등으로 파일을 읽었다면 atime 이 변경됩니다. 

atime 의 문제점

atime 은 파일에 엑세스할때마다 inode 에서 시간을 바꿔줘야 하므로 web server 같이 access 가 빈번한 시스템의 경우 엄청난 성능 하락이 발생합니다. 

이때문에 linux 나 OS X, FreeBSD 등은 성능 향상을 위해 realatime 이나 noatime 같은 mount 옵션을 제공합니다.

mtime

파일의 마지막 변경 시간을 의미하며 vim 로 파일 내용을 수정했거나 echo 명령어로 파일에 내용을 덮어 쓰거나 덧붙였을 때 변경됩니다.

ctime

ctime 은 잘못 생각하면 creation time 으로 이해할 수 있고 초기에는 이런 의미로 썼지만 나중에 의미가 변경되어 현재는 inode changed time 용도로 사용됩니다. 

즉 inode 변경이 발생하는 행동을 했을때 ctime 이 변경되며 이런 행동으로는 "file permissions" 변경(chmod), "file 소유자" 변경(chown), 하드 링크 생성(ln)과 삭제(rm)등이 있습니다.


ctime 의 또 다른 차이는 atime, mtime 과 달리 touch 명령어로 변경할 수 없다는 점입니다.

ls 옵션

ls -l 으로 상세 정보를 가져올 경우 표시되는 시간은 mtime 입니다.

$ ls -l /etc/redhat-release 
-rw-r--r--. 4 root root 45 Sep 23 09:38 /etc/redhat-release

atime 을 표시하려면 은 -u 옵션을 추가하면 됩니다.

$ ls -lu /etc/redhat-release 
-rw-r--r--. 4 root root 45 Feb  4 04:57 /etc/redhat-release

ctime 은 -c 옵션을 사용하면 됩니다.

$ ls -lc /etc/redhat-release  
-rw-r--r--. 4 root root 45 Feb 28 06:49 /etc/redhat-release

테스트

atime, mtime, ctime 의 의미를 정확히 알아보기 위해 다음과 같이 touch 로 새 파일을 만들어 봅시다.

$ touch file1

stat 명령어로 확인해보면 3가지 값이 모두 같은 걸 확인할 수 있습니다.

$  stat file1

  File: file1
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: ca02h/51714d    Inode: 9035936     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ec2-user)   Gid: ( 1000/ec2-user)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2021-02-28 08:14:24.930575957 +0000
Modify: 2021-02-28 08:14:24.930575957 +0000
Change: 2021-02-28 08:14:24.930575957 +0000
 Birth: -


파일 내용을 변경한 후에 stat 로 확인해 보면 mtime, ctime 이 모두 변경된 것을 알수 있습니다.

$ echo "hello" > file1


inode 를 변경하는 명령어인 chmod 를 사용한 후에 stat 로 다시 확인해 보겠습니다.

$ chmod 600 file1

그러면 ctime 필드만 변경된 것을 볼 수 있습니다.


같이 보기

Ref





blog comments powered by Disqus