설명 된 Linux 파일 타임 스탬프 : atime, mtime 및 ctime

0
1352
백그라운드에서 추가 텍스트로 채워진 터미널 창이있는 터미널 창을 표시하는 랩톱.
Fatmawati Achmad Zaenuri / 셔터 스톡

“변경된”은 언제 “수정 된”을 의미하지 않습니까? Linux 파일 타임 스탬프에 대해 이야기 할 때 이 가이드에서는 시스템이 시스템을 업데이트하는 방법과 직접 변경하는 방법에 대해 설명합니다.

atime, mtime 및 ctime의 차이점

모든 Linux 파일에는 세 개의 타임 스탬프가 있습니다 : 액세스 타임 스탬프 (atime), 수정 된 타임 스탬프 (mtime) 및 변경된 타임 스탬프 (ctime).

액세스 타임 스탬프는 파일을 마지막으로 읽은 시간입니다. 이는 누군가 프로그램을 사용하여 파일의 내용을 표시하거나 파일에서 일부 값을 읽음을 의미합니다. 파일을 편집하거나 추가 한 것이 없습니다. 데이터는 참조되었지만 변경되지 않았습니다.

수정 된 타임 스탬프는 파일 내용이 마지막으로 수정 된 시간을 나타냅니다. 프로그램 또는 프로세스가 파일을 편집하거나 조작했습니다. “수정 됨”은 파일 내부의 내용이 수정 또는 삭제되었거나 새로운 데이터가 추가되었음을 의미합니다.

변경된 타임 스탬프는 파일 내용에 대한 변경 사항을 나타내지 않습니다. 그보다는 파일과 관련된 메타 데이터가 변경된 시간입니다. 예를 들어 파일 권한이 변경되면 변경된 타임 스탬프가 업데이트됩니다.

표준 ext4 Linux 파일 시스템은 또한 내부 파일 시스템 구조에 파일 생성 타임 스탬프를위한 공간을 할당하지만 아직 구현되지 않았습니다. 때때로이 타임 스탬프가 채워지지만 그 값에 의존 할 수는 없습니다.

타임 스탬프 분석

Linux 타임 스탬프에는 날짜와 시간이 아닌 숫자가 있습니다. 이 숫자는 1970 년 1 월 1 일 자정 (UTC) 인 협정 세계시 (UTC)로 유닉스 시대 이후의 초 수입니다. 윤초는 Linux 타임 스탬프에서 무시되므로 실시간과 유사하지 않습니다.

Linux가 타임 스탬프를 표시해야하는 경우 초 수를 날짜 및 시간으로 변환합니다. 이것은 인간이 이해하기 쉽게 만듭니다. 컴퓨터에서 파일을 보는 위치 및 시간대는 초 수를 날짜 및 시간으로 변환하는 데 도움이됩니다. 또한 월이 올바른 언어인지 확인합니다.

타임 스탬프에 몇 초를 저장할 수 있습니까? 정확하게는 2,147,483,647입니다. 그것은 큰 숫자이지만 충분합니까? 유닉스 시대에 그것을 추가하고 날짜와 시간으로 번역하면, 2038 년 1 월 19 일 화요일 오전 3시 14 분 7 초에 도착합니다. 그 전에는 타임 스탬프에 대해 다른 체계가 필요합니다.

타임 스탬프보기

사용할 때 -l (긴 목록) 옵션 ls아래에 표시된대로 수정 된 타임 스탬프를 볼 수 있습니다.

ls -l dp.c

액세스 타임 스탬프를 보려면 -lu (액세스 시간) 옵션은 다음과 같습니다.

ls -lu dp.c

마지막으로 타임 스탬프 변경을 확인하려면 -lc (시간 변경) 옵션; 다음을 입력하십시오.

ls -lc dp.c

터미널 창에서 "ls -l dp.c"명령

위의 타임 스탬프는 2019 년 4 월 21 일에 파일 내용이 마지막으로 수정 된 것을 보여줍니다. 파일이 2020 년 1 월 20 일에 다른 컴퓨터에서이 컴퓨터로 복사되었으며 그 시간에 두 타임 스탬프가 업데이트되었으므로 액세스 및 변경된 타임 스탬프는 동일합니다.

모든 타임 스탬프를 동시에 보려면 stat 다음과 같이 명령하십시오.

stat dp.c

터미널 창의 "stat dp.c"명령

시간대는 디스플레이 하단에 표시됩니다. 보시다시피, 매우 정확한 소수 초 구성 요소가 있습니다. 각 타임 스탬프의 끝에는 -0500 또는 -0400 .

이것들은 시간대 오프셋. 파일 시스템은 타임 스탬프를 UTC로 기록하고 다음과 같이 표시 될 때 현지 시간대로 변환합니다. stat. 이 기사를 조사하는 데 사용한 컴퓨터는 미국 동부 표준시 (EST) 영역에있는 것처럼 구성됩니다.

EST가 시행되는 시간대는 UTC보다 5 시간 늦습니다. 그러나 동부 일광 절약 시간 (EDT)이 시행되는 UTC보다 4 시간이 늦습니다. 2019 년 4 월 수정 된 타임 스탬프가 변경되면 EDT가 적용되었습니다. 그렇기 때문에 타임 스탬프 중 2 개에 5 시간 오프셋이 있지만 수정 된 시간에 4 시간 오프셋이 있습니다.

오프셋과 시간대는 어디에도 저장되지 않습니다. 이러한 가치를 유지하는 데 사용되는 파일 시스템 공간이나 아이 노드도 없습니다. 타임 스탬프 (항상 UTC 시간), 파일을 표시하는 컴퓨터의 현지 시간대 및 DST가 유효한지 여부를 사용하여 즉시 계산해야합니다.

“생성”타임 스탬프도 표시되며 파일 생성 날짜로 예약되어 있습니다. 이것은 구현되지 않았으며 하이픈 “-타임 스탬프 대신 “

관련 : 리눅스에서 아이 노드에 대해 알고 싶었던 모든 것

타임 스탬프 변경

원하는 경우 파일의 타임 스탬프를 변경할 수 있습니다. 당신은 사용할 수 있습니다 touch 액세스 또는 수정 된 타임 스탬프 또는 둘 다를 변경하려면

touch -a dp.c

새로운 액세스 타임 스탬프를 설정하려면 -a (액세스 시간) 옵션. 이 명령은 액세스 타임 스탬프를 컴퓨터의 현재 시간으로 설정합니다.

stat dp.c

터미널 창에서 "touch -a dp.c"명령

액세스 타임 스탬프가 예상대로 변경되었습니다. 그러나 변경된 타임 스탬프도 업데이트되었습니다. 이것은 정상입니다.

수정 된 타임 스탬프를 변경하려면 -m (수정 시간) 옵션 :

touch -m dp.c
stat dp.c

터미널 창에서 "touch -m dp.c"명령

이번에는 수정 및 변경된 타임 스탬프가 업데이트되었습니다.

당신은 사용할 수 있습니다 -d 액세스 및 수정 된 타임 스탬프를 동시에 변경하려는 경우 (날짜) 옵션. 시간과 날짜를 지정할 수도 있습니다. 타임 스탬프를 현재로 변경하도록 제한되지 않습니다.

다음 명령을 사용하여 2020 년 1 월 15 일에 액세스 및 수정 된 타임 스탬프를 10:30:45로 설정합니다.

touch -d "2020-01-15 10:30:45" dp.c
stat dp.c

그만큼

이제 액세스 및 수정 된 타임 스탬프를 과거의 날짜로 설정했습니다. 변경된 타임 스탬프도 컴퓨터의 현재 시간으로 업데이트되었습니다.

당신은 또한 사용할 수 있습니다 -r 한 파일의 타임 스탬프를 다른 파일의 타임 스탬프 값으로 설정하려는 경우 아래에 표시된 것처럼 (참조) 옵션 :

touch dp.c -r dice_words.sl3
stat dp.c

터미널 창에서 "touch dp.c -r dice_words.sl3"명령

그리고 우리는 처음부터 다시 시작하여 -0400-0500 타임 스탬프.

변경된 타임 스탬프에만 영향을주는 작업을하겠습니다. 우리는 chmod 모든 사용자에게 실행 파일에 실행 권한을 부여하는 명령 :

chmod +x dp
stat dp

터미널 창에서 "chmod + x dp"및 "stat dp"명령

변경된 타임 스탬프는 업데이트 된 유일한 타임 스탬프입니다. 파일 자체는 변경되지 않았기 때문에 액세스하거나 수정하지 않았기 때문입니다. 그러나 파일에 대한 메타 데이터 였다 변경되었습니다.

관련 : Linux에서 chmod 명령을 사용하는 방법

파일 시스템이 타임 스탬프를 업데이트하는 방법

파일 시스템이 마운트되면 파일 시스템이 작동하거나 처리되는 방법을 지정하는 데 사용할 수있는 옵션이 있습니다. 이것들은 /etc/fstab 파일은 부팅시 읽고 처리됩니다. 액세스 타임 스탬프를 업데이트하는 데 사용해야하는 구성표를 지시하는 옵션을 설정할 수도 있습니다.

다음은 가장 일반적인 옵션 중 일부입니다.

  • 엄격한 (엄격한 시간):이 옵션은 파일에 액세스 할 때마다 파일의 액세스 타임 스탬프를 업데이트합니다. 이 접근 방식에는 오버 헤드가 있지만 일부 서버는이 체계의 이점을 활용할 수 있습니다. 데스크탑이나 랩톱 컴퓨터에는 장점이 거의 없습니다.
  • noatime (시간 없음) : 이 옵션은 파일 및 디렉토리의 액세스 타임 스탬프가 업데이트되지 않도록 완전히 비활성화합니다. 그러나 수정 된 타임 스탬프는 계속 업데이트됩니다.
  • nodiratime (dir adir) : 이 옵션은 파일의 액세스 타임 스탬프를 업데이트 할 수 있지만 디렉토리의 경우 타임 스탬프를 비활성화합니다.
  • 상대 시간 (상대 시간) : 이 옵션은 액세스 시간 소인이 24 시간 이상되었거나 이전 시간 소인이 현재 수정되거나 변경된 시간 소인보다 오래된 경우에만 업데이트합니다. 이것은 너무 자주 업데이트되거나 전혀 업데이트되지 않는 액세스 타임 스탬프간에 균형이 잘 맞습니다.

보자 /etc/fstab 이 컴퓨터의 파일을 확인하고 어떤 옵션이 설정되어 있는지 확인하십시오.

less /etc/fstab

터미널 창의 "less / etc / fstab"

그만큼 /etc/fstab 아래와 같이 파일이 표시됩니다.

터미널 창에 "/ etc / fstab"파일이 적습니다.

랩 어라운드없이 파일 내용은 다음과 같습니다.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#      
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

두 개의 항목 만 있으며 그 중 하나는 스왑 파일이며 무시할 수 있습니다. 다른 하나는 파일 시스템의 루트에 마운트되고 있습니다 ( / ) 장치에있었습니다 /dev/sda1 설치시. 그것은 첫 번째 하드 드라이브의 첫 번째 파티션이며 ext4 파일 시스템.

전달 된 유일한 옵션은 errors=remount-ro파일 시스템을 읽기 및 쓰기 파일 시스템으로 마운트하려고 할 때 오류가있는 경우 운영 체제에이 파일 시스템을 읽기 전용으로 다시 마운트하도록 지시합니다.

따라서 액세스 타임 스탬프를 처리하는 방법에 대한 언급은 없습니다. 더 깊이 파고 살펴보고 /proc/mounts 우리에게 말할 수 있습니다. 출력을 파이프합니다 /proc/mounts …을 통하여 grep. 검색 문자열은 하드 드라이브 식별자 인 “sda”입니다.

우리는 다음을 입력합니다 :

cat /proc/mounts | grep "sda"

그만큼

이제 다음 옵션이 나타납니다.

  • rw: 파일 시스템이 읽기 및 쓰기 파일 시스템으로 마운트됩니다.
  • 관계: 파일 시스템은 “상대적 시간”구성표를 사용하여 액세스 타임 스탬프를 업데이트합니다.

어디에서 왔습니까? 글쎄, relatime 체계는 다음 상황에서 사용됩니다.

  • 기본값 /etc/fstab 옵션이 사용됩니다.
  • 관계 /etc/fstab 옵션이 사용됩니다.
  • 액세스 타임 스탬프 옵션이 사용되지 않는 경우 /etc/fstabLinux 커널 2.6.30 이상을 사용하고 있습니다.

우리의 /etc/fstab 에 대한 항목 ext4 파일 시스템은 액세스 타임 스탬프 업데이트 옵션을 지정하지 않았으므로 Linux는 현명한 선택을하고 사용했습니다 relatime.

관련 : Linux에서 fstab 파일을 작성하는 방법

타임 스탬프가 중요합니다

타임 스탬프를 사용하면 파일에 액세스, 수정 또는 변경된시기를 쉽게 확인할 수 있습니다. 그러나 더 중요한 것은 소프트웨어를 백업 및 동기화하여 백업해야 할 파일을 결정하는 방법을 제공한다는 것입니다.

타임 스탬프를 조작하는 기능은 프로그램이 파일 또는 파일 세트를 포함하거나 무시하도록 강제로 설득해야 할 때마다 유용합니다.