리눅스 운영체제에서는 파일의 생성 시간, 수정 시간, 액세스 시간과 같은 타임스탬프를 통해 파일의 상태를 추적하고 관리한다. 이러한 타임스탬프는 파일의 히스토리를 이해하고 파일 시스템의 효율적인 관리를 가능하게 한다. 이 글에서는 리눅스에서의 파일 타임스탬프의 종류와 활용 방법, 그리고 자주 사용되는 몇 가지 예제를 통해 파일 타임스탬프에 대해 알아본다.
파일 타임스탬프의 종류
리눅스 시스템에서는 주로 다음과 같은 세 가지 파일 타임스탬프를 사용한다.
- 액세스 시간 (
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.
참고 사이트
- Linux
stat
명령어:stat
명령어의 공식 메뉴얼 페이지. - Linux
touch
명령어:touch
명령어의 공식 메뉴얼 페이지. - Linux
ls
명령어:ls
명령어의 공식 메뉴얼 페이지. - Linux
find
명령어:find
명령어의 공식 메뉴얼 페이지. - https://linuxhandbook.com/file-timestamps/