atime, mtime, ctime 의 차이점
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" 변경(/wiki/spaces/LINC/pages/887423411), "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 필드만 변경된 것을 볼 수 있습니다.
같이 보기
- 파일이나 파일 시스템의 상태를 출력하는 linux stat 명령어 사용법
- 파일을 생성하거나 변경 시간을 수정해주는 linux touch 명령어 사용법
- noatime 마운트 옵션으로 파일 시스템 성능 향상 시키기