Linux 에서 파일 수정 및 액세스 시간 확인 방법

LinuxBeginner
지금 연습하기

소개

Linux 운영 체제에서 모든 파일은 파일이 수정, 액세스 또는 속성이 변경된 시기를 추적하는 관련 타임스탬프를 갖습니다. 이러한 타임스탬프를 이해하는 것은 파일 활동을 모니터링해야 하는 시스템 관리자, 개발자 및 일반 사용자에게 필수적입니다.

이 튜토리얼은 Linux 에서 파일 타임스탬프를 확인하는 실용적인 기술을 안내합니다. 다양한 명령을 사용하여 수정 및 액세스 시간을 확인하는 방법을 배우게 되며, 이를 통해 Linux 환경에서 변경 사항을 더 잘 추적하고 파일 사용 패턴을 모니터링할 수 있습니다.

Linux 에서 파일 타임스탬프 이해하기

Linux 에서 각 파일은 시스템에서 자동으로 관리되는 세 가지 중요한 타임스탬프를 갖습니다.

파일 타임스탬프 유형

  1. 수정 시간 (mtime): 파일 내용이 마지막으로 수정된 시기를 기록합니다.
  2. 액세스 시간 (atime): 파일이 마지막으로 읽거나 액세스된 시기를 기록합니다.
  3. 변경 시간 (ctime): 파일의 메타데이터 (권한, 소유권) 가 마지막으로 변경된 시기를 기록합니다.

테스트 파일을 생성하고 해당 속성을 검사하여 파일 타임스탬프를 살펴보겠습니다.

먼저, 터미널을 열고 프로젝트 디렉토리로 이동합니다.

cd ~/project

touch 명령을 사용하여 간단한 텍스트 파일을 생성합니다.

touch testfile.txt

touch 명령은 파일이 존재하지 않으면 빈 파일을 생성하고, 이미 존재하면 타임스탬프를 업데이트합니다.

-l 옵션 (long listing format, 상세 목록 형식) 과 함께 ls 명령을 사용하여 기본 파일 정보를 확인해 보겠습니다.

ls -l testfile.txt

다음과 유사한 출력을 볼 수 있습니다.

-rw-r--r-- 1 labex labex 0 May 15 14:30 testfile.txt

이 출력에서:

  • 첫 번째 열은 파일 권한을 보여줍니다.
  • 세 번째 및 네 번째 열은 소유자와 그룹을 보여줍니다.
  • 다섯 번째 열은 파일 크기 (0 바이트) 를 보여줍니다.
  • 날짜와 시간 ("May 15 14:30" 예시) 은 수정 시간을 보여줍니다.
  • 마지막 열은 파일 이름입니다.

이 기본 목록은 수정 시간을 보여주지만, 액세스 시간이나 변경 시간은 보여주지 않습니다. 다음 단계에서 이를 살펴보겠습니다.

stat 명령을 사용하여 모든 타임스탬프 보기

ls 명령은 기본 파일 정보를 제공하지만, stat 명령은 파일에 대한 더 자세한 정보를 제공하며, 세 가지 타임스탬프를 모두 포함합니다.

stat 명령을 사용하여 테스트 파일의 모든 타임스탬프를 확인해 보겠습니다.

stat testfile.txt

다음과 유사한 출력을 볼 수 있습니다.

  File: testfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:30:00.000000000 +0000
Change: 2023-05-15 14:30:00.000000000 +0000
 Birth: -

이 출력에서:

  • Access: 파일이 마지막으로 액세스된 시기를 보여줍니다 (atime).
  • Modify: 파일 내용이 마지막으로 수정된 시기를 보여줍니다 (mtime).
  • Change: 파일의 메타데이터가 마지막으로 변경된 시기를 보여줍니다 (ctime).
  • Birth: 파일 생성 시간을 보여줍니다 (모든 파일 시스템에서 지원되지 않음).

현재 세 가지 타임스탬프가 모두 동일하다는 것을 알 수 있습니다. 이는 방금 파일을 생성했기 때문입니다. 이러한 타임스탬프가 어떻게 변경되는지 확인하기 위해 파일을 수정해 보겠습니다.

echo 명령을 사용하여 파일에 내용을 추가합니다.

echo "This is a test file" > testfile.txt

이제 타임스탬프를 다시 확인해 보겠습니다.

stat testfile.txt

수정 시간 (Modify) 과 변경 시간 (Change) 이 업데이트되었고, 액세스 시간 (Access) 은 시스템 구성에 따라 동일하게 유지될 수 있음을 확인할 수 있습니다.

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

수정 시간 (mtime) 확인하기

수정 시간 (mtime) 은 파일의 내용이 변경될 때마다 업데이트됩니다. 이는 파일 목록에서 기본적으로 가장 일반적으로 표시되는 타임스탬프입니다.

ls 를 사용하여 수정 시간 확인하기

표준 ls -l 명령은 기본적으로 수정 시간을 표시합니다.

ls -l testfile.txt

출력:

-rw-r--r-- 1 labex labex 19 May 15 14:35 testfile.txt

현재 연도에 수정된 파일의 경우, ls -l은 월, 일 및 시간을 표시합니다. 이전 연도에 수정된 파일의 경우, 시간 대신 월, 일 및 연도를 표시합니다.

시간 형식 사용자 정의

더 자세한 타임스탬프 정보를 보려면 ls와 함께 --time-style 옵션을 사용하십시오.

ls -l --time-style=full-iso testfile.txt

출력:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35:12.000000000 +0000 testfile.txt

이는 연도, 월, 일, 시, 분, 초 및 시간대를 포함하는 전체 ISO 형식 타임스탬프를 보여줍니다.

long-iso 또는 iso와 같은 다른 형식 옵션도 사용할 수 있습니다.

ls -l --time-style=long-iso testfile.txt

출력:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35 testfile.txt

date 를 사용하여 수정 시간 표시하기

수정 시간을 확인하는 또 다른 방법은 -r 옵션을 사용하여 date 명령을 사용하는 것입니다.

date -r testfile.txt

출력:

Mon May 15 14:35:12 UTC 2023

이 명령은 수정 시간을 사람이 읽을 수 있는 형식으로 표시합니다.

액세스 시간 (atime) 확인하기

액세스 시간 (atime) 은 파일이 읽히거나 액세스될 때마다 업데이트됩니다. 그러나 많은 최신 Linux 시스템은 성능 향상을 위해 relatime 또는 noatime과 같은 마운트 옵션을 사용하여 atime 업데이트 빈도를 줄입니다.

ls 를 사용하여 액세스 시간 확인하기

수정 시간 대신 액세스 시간을 보려면 ls -l과 함께 -u 옵션을 사용하십시오.

ls -lu testfile.txt

출력:

-rw-r--r-- 1 labex labex 19 May 15 14:40 testfile.txt

표시된 타임스탬프는 이제 수정 시간 대신 액세스 시간입니다.

파일에 액세스하여 액세스 시간을 업데이트해 보겠습니다.

cat testfile.txt

출력:

This is a test file

이제 액세스 시간을 다시 확인합니다.

ls -lu testfile.txt

액세스 시간이 현재 시간으로 업데이트되었음을 확인할 수 있습니다.

모든 타임스탬프 비교

stat 명령을 사용하여 파일에 액세스한 후 모든 타임스탬프를 확인해 보겠습니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

액세스 시간만 변경되었고 수정 시간과 변경 시간은 이전과 동일하게 유지되었음을 알 수 있습니다.

변경 시간을 업데이트하기 위해 파일 권한 변경

파일의 권한을 수정하여 변경 시간 (ctime) 을 업데이트해 보겠습니다.

chmod 640 testfile.txt

모든 타임스탬프를 다시 확인합니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:42:30.000000000 +0000
 Birth: -

변경 시간 (ctime) 이 현재 시간으로 업데이트되었고 액세스 시간과 수정 시간은 변경되지 않은 상태로 유지되었음을 확인할 수 있습니다.

touch 를 사용하여 파일 타임스탬프 조작하기

touch 명령을 사용하면 파일을 생성할 뿐만 아니라 타임스탬프를 업데이트할 수도 있습니다. 이는 테스트 또는 파일 간에 타임스탬프를 동기화해야 할 때 유용합니다.

모든 타임스탬프 업데이트

모든 타임스탬프 (액세스, 수정 및 변경) 를 현재 시간으로 업데이트하려면 다음을 수행합니다.

touch testfile.txt

타임스탬프를 확인합니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:45:10.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:45:10.000000000 +0000
 Birth: -

액세스 시간만 업데이트

액세스 시간만 업데이트하려면 다음을 수행합니다.

touch -a testfile.txt

타임스탬프를 확인합니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:46:15.000000000 +0000
 Birth: -

파일의 메타데이터가 변경되었으므로 변경 시간 (ctime) 도 업데이트됩니다.

수정 시간만 업데이트

수정 시간만 업데이트하려면 다음을 수행합니다.

touch -m testfile.txt

타임스탬프를 확인합니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:47:20.000000000 +0000
Change: 2023-05-15 14:47:20.000000000 +0000
 Birth: -

다시, 변경 시간도 업데이트됩니다.

특정 타임스탬프 설정

-d 옵션을 touch와 함께 사용하여 특정 타임스탬프를 설정할 수 있습니다.

touch -d "2023-01-01 12:00:00" testfile.txt

타임스탬프를 확인합니다.

stat testfile.txt

출력:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:48:30.000000000 +0000
 Birth: -

이렇게 하면 액세스 시간과 수정 시간이 모두 2023 년 1 월 1 일 오후 12:00 로 설정됩니다. 변경 시간은 여전히 현재 시간으로 업데이트됩니다.

기존 파일의 타임스탬프로 새 파일 생성

-r 옵션을 사용하여 다른 파일의 타임스탬프를 참조할 수도 있습니다.

## 새 파일 생성
touch newfile.txt

## testfile.txt를 기반으로 타임스탬프 설정
touch -r testfile.txt newfile.txt

새 파일의 타임스탬프를 확인합니다.

stat newfile.txt

출력:

  File: newfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101100     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:49:45.000000000 +0000
 Birth: -

이제 newfile.txt의 액세스 시간과 수정 시간은 testfile.txt의 시간과 일치합니다.

요약

이 랩에서는 다음을 배우셨습니다.

  • Linux 에서 파일 타임스탬프의 세 가지 유형 (수정 시간 (mtime), 액세스 시간 (atime), 변경 시간 (ctime)) 을 이해합니다.
  • 다양한 옵션을 사용하여 ls 명령을 사용하여 파일 타임스탬프를 표시합니다.
  • stat 명령을 사용하여 자세한 타임스탬프 정보를 봅니다.
  • 파일 내용을 읽어 액세스 시간을 업데이트합니다.
  • 파일 권한을 변경하여 변경 시간을 업데이트합니다.
  • touch 명령을 사용하여 파일 타임스탬프를 수동으로 조작합니다.
  • 특정 타임스탬프를 파일에 적용합니다.
  • 한 파일에서 다른 파일로 타임스탬프를 복사합니다.

이러한 기술은 Linux 에서 효과적인 파일 관리 및 모니터링에 필수적입니다. 파일 타임스탬프는 변경 사항을 추적하고, 액세스 패턴을 모니터링하며, 파일이 적절하게 유지 관리되고 있는지 확인하는 데 도움이 됩니다. 시스템 관리자가 무단 변경 사항을 추적하든, 파일 관련 문제를 디버깅하는 개발자이든, 파일을 정리하는 일반 사용자이든, 파일 타임스탬프를 이해하는 것은 Linux 환경에서 유용한 기술입니다.