리눅스에서 File Timestamps

리눅스 운영체제에서는 파일의 생성 시간, 수정 시간, 액세스 시간과 같은 타임스탬프를 통해 파일의 상태를 추적하고 관리한다. 이러한 타임스탬프는 파일의 히스토리를 이해하고 파일 시스템의 효율적인 관리를 가능하게 한다. 이 글에서는 리눅스에서의 파일 타임스탬프의 종류와 활용 방법, 그리고 자주 사용되는 몇 가지 예제를 통해 파일 타임스탬프에 대해 알아본다.

파일 타임스탬프의 종류

리눅스 시스템에서는 주로 다음과 같은 세 가지 파일 타임스탬프를 사용한다.

  • 액세스 시간 (atime): 파일을 읽거나 접근한 시간
  • 수정 시간 (mtime): 파일 내용이 마지막으로 수정된 시간
  • 변경 시간 (ctime): 파일의 메타데이터가 변경된 시간

타임스탬프 정보 확인

stat 명령어 활용

stat 명령어를 사용하면 파일의 상세한 정보를 확인할 수 있다.

$ stat a.out
  File: a.out
  Size: 19672           Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 303419      Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/vboxuser)   Gid: ( 1000/vboxuser)
Access: 2024-03-23 17:26:33.992185949 +0000
Modify: 2024-03-23 17:26:23.872113676 +0000
Change: 2024-03-23 17:26:23.872113676 +0000
 Birth: 2024-03-23 17:26:23.868113647 +0000

타임스탬프 변경하기

touch 명령어 활용

touch 명령어는 파일의 타임스탬프를 갱신하는데 사용될 수 있다. 현재 시간으로 액세스 시간과 수정 시간을 갱신하려면:

$ touch a.out
$ stat a.out
  File: a.out
  Size: 19672           Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 303419      Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/vboxuser)   Gid: ( 1000/vboxuser)
Access: 2024-03-23 17:57:16.636512077 +0000
Modify: 2024-03-23 17:57:16.636512077 +0000
Change: 2024-03-23 17:57:16.636512077 +0000
 Birth: 2024-03-23 17:26:23.868113647 +0000

특정 시간으로 설정하려면 --date 옵션을 사용할 수 있다.

$ touch --date="2024-03-01 12:00:00" a.out
$ stat a.out
  File: a.out
  Size: 19672           Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 303419      Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/vboxuser)   Gid: ( 1000/vboxuser)
Access: 2024-03-01 12:00:00.000000000 +0000
Modify: 2024-03-01 12:00:00.000000000 +0000
Change: 2024-03-23 17:59:29.719681710 +0000
 Birth: 2024-03-23 17:26:23.868113647 +0000

ls 명령어에서의 타임스탬프 표시

ls 명령어는 다양한 타임스탬프 표시 옵션을 제공한다.

$ stat a.out
  File: a.out
  Size: 19672           Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 303419      Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/vboxuser)   Gid: ( 1000/vboxuser)
Access: 2024-03-01 12:00:00.000000000 +0000
Modify: 2024-03-01 12:00:00.000000000 +0000
Change: 2024-03-23 17:59:29.719681710 +0000
 Birth: 2024-03-23 17:26:23.868113647 +0000
$ ls -l --time=atime a.out
-rwxrwxr-x 1 vboxuser vboxuser 19672 Mar  1 12:00 a.out
$ ls -l --time=ctime a.out
-rwxrwxr-x 1 vboxuser vboxuser 19672 Mar 23 17:59 a.out

실전 예제

최근 7일 이내에 수정된 파일 검색

find /path/to/search -type f -mtime -7

find 관련 자세한 사항은 아래 글을 참고한다.

가장 최근에 수정된 파일 표시

ls -lt | head

이 명령어는 현재 디렉토리의 파일을 수정 시간 기준으로 내림차순으로 정렬하고 상위 몇 개를 표시한다.

타임스탬프를 활용한 스크립트

파일 변경 감지 스크립트

#!/bin/bash

filename="example.txt"
previous_mtime=$(stat -c %Y "$filename")

while true; do
    current_mtime=$(stat -c %Y "$filename")

    if [ $current_mtime -gt $previous_mtime ]; then
        echo "File has been modified."
        # 필요한 추가 작업 수행
    fi

    previous_mtime=$current_mtime

    sleep 1  # 1초마다 체크
done

이 스크립트는 파일이 변경될 때마다 메시지를 출력하고 추가 작업을 수행할 수 있다.

$ sh test.sh
File has been modified.

참고 사이트

답글 남기기