파일이 마지막으로 열린 시간을 확인하고 해당 시간을 기준으로 디렉토리의 모든 파일을 정렬할 수 있습니까?
답변1
"개방형"이 무엇을 의미하는지에 따라 다르지만 일반적으로 그렇습니다. 일반적으로 3개의 타임스탬프가 기록됩니다.
mtime
- 파일 내용이 변경되면 업데이트됩니다. 대부분의 경우 이는 "기본" 파일 시간입니다.ctime
— 파일이 업데이트될 때또는메타데이터(소유자, 권한) 변경atime
—파일을 읽을 때 업데이트
따라서 일반적으로 보고 싶은 것은 atime
파일의 내용입니다. stat
또는 으로 얻을 수 있습니다 ls
. 이것을 사용하면 이 작업을 수행할 수 있습니다 ls -lu
. 비록 저는 이것을 사용하는 것을 선호하지만 ls -l --time=atime
(거의 모든 현대 Linux 배포판은 이를 지원해야 합니다) 자주 사용하지 않고 사용하면 더 잘 기억할 수 있기 때문입니다. 그리고유형시간이 지나면 -t
ls에 플래그를 추가합니다. 그래서 그게 다입니다.
하지만 큰 경고가 있습니다. 파일을 읽을 때마다 atime을 업데이트하면 종종 불필요한 IO가 발생하여 속도가 느려집니다. 결과적으로 대부분의 Linux 배포판은 이제 기본적 noatime
으로 파일 시스템 마운트 옵션을 사용하여 기본적으로 atimes 또는 else 를 종료합니다. relatime
제한을 초과한 후(보통 하루에 한 번) 또는 파일이 마지막으로 읽힌 후 실제로 수정된 경우에만 가능합니다. . 시간이 업데이트됩니다. 명령을 실행하여 이러한 옵션이 활성화되어 있는지 확인할 수 있습니다 mount
.
또한 액세스 시간은 파일 이름이 아닌 inode별로 계산되므로 하드 링크가 있는 경우 해당 링크에서 읽으면 동일한 파일을 참조하는 모든 이름이 업데이트됩니다.
그리고, 참고하세요씨"생성"이 아닙니다. Unix/Linux 파일 시스템은 생성 프로세스를 추적하지 않습니다. 이는 이상해 보이지만 실제로는 파일 시스템이 원본 파일인지 알 수 있는 방법이 없기 때문에 의미가 있습니다. 파일이 40년 전에 생성되었을 수도 있습니다. 여기에 복사했습니다. 실제로 많은 파일 편집자는 원본 파일의 복사본을 만들어 작업합니다. 해당 정보가 필요한 경우 git
.
10년 후의 소규모 업데이트: btrfs와 같은 일부 파일 시스템에는 네 번째 타임스탬프가 포함됩니다.
birth
, 또는 때로는 일관성이 없지만,btime
이는 명시적으로 "파일 생성 타임스탬프"입니다.
...적어도 statx(2)
시스템 호출 매뉴얼 페이지에 따르면요. 전반적으로 문서화가 거의 이루어지지 않은 것 같습니다. 처음에 제외되게 만든 것과 동일한 문제를 겪고 있습니다.정확히무슨 뜻인가요? 고려하다:
$ echo > foo; stat foo|grep Birth
Birth: 2022-04-30 02:38:19.084919920 -0400
$ cp foo foo.tmp; mv foo.tmp foo; stat foo|grep Birth
Birth: 2022-04-30 02:39:00.950269045 -0400
여기에서는 파일을 만든 다음 임시 파일에 복사한 다음 다시 이동합니다. 그러면 "생년" 시간이 변경됩니다. 맞아? 아마도! 이것이 실제로 작동하는지 확실하지 않습니다. 적어도 인간에게는 그렇지 않습니다. 그러나 어쨌든 완전성을 위해 최신 시스템에서 사용할 수 있는 내용은 다음과 같습니다.
답변2
ls -ltu
액세스 시간별로 표시되고 정렬된 모든 파일을 나열합니다.
에서 man ls
:
-u with -lt: sort by, and show, access time with -l: show access
time and sort by name otherwise: sort by access time
답변3
이 find
명령은 이러한 목적에 가장 적합합니다. -ctime
, -mtime
및 -atime
옵션을 참조하세요 .
답변4
다음 명령은 액세스 시간(예: atime)을 기준으로 파일을 정렬합니다.
ls -lt --time atime