타임 스탬프, 수정 시간 및 파일 생성 시간


105

난 그냥 알고 ls -tls -f디렉토리 아래의 파일 및 하위 디렉토리의 다른 정렬을 제공합니다.

  • 타임 스탬프, 수정 시간 및 파일 생성 시간의 차이점은 무엇입니까?
  • 명령으로 이러한 종류의 정보를 얻고 변경하는 방법?
  • 사람들은 어떤 종류의 정보가 파일이 다른 파일보다 "최신"이라고 말합니까?
  • 어떤 종류의 정보 변경으로 인해 파일이 달라지지 않습니까?

예를 들어, 나는 누군가가 쓴 것을 보았다 :

기본적으로 rsync 프로그램은 파일 크기와 타임 스탬프가 다른지 확인합니다. 어떤 파일이 최신인지 상관하지 않습니다. 파일이 다르면 덮어 씁니다. '--update'플래그를 rsync에 전달하면 소스의 파일보다 최신이지만 동일한 유형의 파일 인 경우에만 대상의 파일을 건너 뜁니다. 즉, 예를 들어 소스 파일이 일반 파일이고 대상이 심볼릭 링크 인 경우 타임 스탬프에 관계없이 대상 파일을 덮어 씁니다.

참고로 여기의 파일 형식은 일반 파일과 simlink 만 의미하며 pdf, jpg, htm, txt 등과 같은 형식은 아닙니까?


답변:


138

"타임 스탬프"에는 3 가지 종류가 있습니다.

  • 액세스-파일을 마지막으로 읽은 시간
  • 수정-파일을 마지막으로 수정 한 시간 (콘텐츠가 수정 된 시간)
  • 변경-파일의 메타 데이터가 마지막으로 변경된 시간 (예 : 권한)

이 정보를 표시하기 stat위해 coreutils의 일부를 사용할 수 있습니다 .

stat 장치, inode, 링크 등과 같은 추가 정보도 표시됩니다.

이러한 종류의 정보는 파일 시스템 및 마운트 옵션에 따라 크게 달라집니다. 예를 들어 noatime옵션을 사용 하여 파티션을 마운트하면 액세스 정보가 기록되지 않습니다.

타임 스탬프를 변경하는 유틸리티는 다음과 같습니다 touch. 변경 될 타임 스탬프 (예 : 액세스 시간의 경우 -a, 수정 시간의 경우 -m)를 결정하고 새로운 지정된 타임 스탬프의 구문 분석에 영향을주는 몇 가지 인수가 있습니다. 자세한 내용 man touch은 참조하십시오.

touch와 함께 편리 될 수 있습니다 cp -u( "원본 파일 대상 파일 또는 때 대상 파일이없는보다 최신 인 경우에만 복사" 또는 빈 마커 파일의 생성을위한).


1
감사! rsync 명령의 경우 "새로운 파일"이라는 의미에서 "새로운 파일은 신경 쓰지 않습니다"라는 의미입니다. 또한, 참고로 rsync가 관심을 갖는 파일 형식은 pdf, jpg, htm, txt 등과 같은 형식이 아닌 일반 파일 및 simlink만을 의미합니까?
Tim

2
일반적으로 파일 시간은 "수정 된"타임 스탬프입니다. 예를 들어에서 볼 수있는 내용입니다 ls -l. 그리고 파일 유형은 파일과 symlink (또는 디렉토리 나 장치와 같은 다른 유형의 파일)를 나타냅니다. 파일의 데이터 유형이 아닙니다 (텍스트 대 jpeg 등).
Seth L

2
@Tim 그 맥락에서 수정 된 타임 스탬프입니다. rsync는 파일을 백업해야하는지 결정할 때 소스 파일이 기존 백업 (백업 프로그램과 공통)보다 최근에 수정되었는지 확인하지 않습니다. 파일 크기가 다르거 나 수정 시간이 다른지 확인하기 만하면됩니다.
Michael Mrozek

1
파일이 처음 작성된 시점을 어떻게 알 수 있습니까? 이 정보가 전혀 어딘가에 유지되거나 업데이트에서 손실됩니까? 말하자면, 파일이 얼마나 오랫동안 존재했는지 ..?
xyz

1
합계 (2) 그 타임 스탬프가 변경 될 때 사람이 페이지를보다 자세히 설명합니다.
Cristian Ciupitu

35

echox의 대답은 유효하지만 파일 작성 시간에 관한 정보를 추가하고 싶습니다.

파일 시스템 지원

일부 파일 시스템은 생성 시간 (또는 출생 시간)과 관련하여 inode에서 추가 항목을 지원합니다. ext4가이 기능JFS 및 BTRFS를 지원 한다는 것을 알고 있습니다.

그러나 대부분의 도구와 API는 아직이 추가 정보를 읽도록 업데이트되지 않았습니다. 그래서 심지어 거기에있을 수는 있지만 액세스 할 수 없습니다.

예를 들어 Ubuntu 12.04 LTS에서 오늘 만든 파일에 대해 다음을 얻습니다.

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

출력이 올바르지 않은 것처럼 보이지만 최신 통계 기능에 출생 필드가 있음을 알 수 있습니다. 그리고 debugfs를 통해 정보를 얻을 수 있습니다 (ext4 파일 시스템을 사용하면서 crtime).

스탁스 지원

이 이제 커널 4.11 새로운 statx 시스템 호출 이후 , Y2038 또는 네트워크 파일 시스템의 더 나은 지원의 상단에, 그것은 또한 같은 몇 가지 추가 기능을 제공 btime또는 출생 시간 (작성 시간) 액세스. ext4에 대한 지원은 동일한 커널 릴리스 4.11에 있어야합니다.

이후 커널 릴리스에서이 새로운 syscall에 대한 지원을 추가하기위한 패치가 있습니다 (예 : 커널 4.13의 BTRFS 및 F2FS, 4.14의 SMB3, 4.15의 GFS2, 4.16의 NFS 등).

다가오는 glibc는이 인터페이스를 쿼리하기위한 함수 호출을 제공 할 것입니다 ( glibc statx 지원에 대한 Phoronix 뉴스 참조 ). 따라서 사용자 공간에서이 기능을 곧 지원할 수 있습니다.


Windows의 파일 (생성 시간)이 mtime과 같이 ext4로 또는 그 반대로 이동 될 때 btime이 그대로 유지되는지 알고 있습니까?
paradroid

@ paradroid 죄송합니다. 답을 모르겠습니다. NTFS에서 ext4로 파일을 복사 할 때 Linux에서 의미하는 경우 생성 시간을 지원하는 경우 NTFS 드라이버를 찾아야합니다. Windows에서 의미하는 경우 Windows 용 ext4 드라이버를 찾아야합니다.
Huygens
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.