액세스 시간별 파일 정렬이 작동하지 않는 이유는 무엇입니까?


12

나는 명령을 사용하려고 ls --time=atime

한 디렉토리에서 작동했지만 다른 디렉토리에서는 작동하지 않았습니다. vim, evince 및 기타 응용 프로그램에서 특정 파일을 열었지만 명령 파일 액세스 시간이 변경되지 않았습니다.

입력 할 때 touch file.txt액세스 시간은 변경되지만 입력 할 때 vim file.txt액세스 시간은 변경되지 않습니다.

여기서 무엇이 잘못 되었습니까?


어떤 OS를 사용하고 있습니까? 많은 최신 Linux 배포판이 한 번에 꺼집니다. 최근 Linux 커널에서는 기본적으로 꺼져 있습니다.
Gilles 'SO- 악 그만해라'

우분투 10.04를 실행 중입니다.
xralf

당신은 실행 후 무엇을합니까 vim file.txt? :q또는에 의해 vim을 종료 :wq합니까? 쓰지 않으면 vim파일의 액세스 시간을 수정하지 않습니다. 이것은 의도 된 것입니다.
rozcietrzewiacz

이제 디렉토리에 파일이 적고 vim으로 액세스 시간이 변경되어 파일을 편집 할 필요가 없지만 .jpg확장자가 있는 파일을 열면 변경되지 않습니다. 이미지 뷰어에서 열면 변경되지 않습니다. 일부 응용 프로그램에서 파일을 읽을 때마다 액세스 시간을 변경해야합니다.
xralf

답변:


14

기본 마운트 옵션으로 액세스 시간은 Linux에서 특별한 방식으로 처리됩니다.

relatime–이 옵션을 사용하는 파일 시스템 마운트는 액세스 시간이 수정 시간보다 빠르면 (업데이트가 발생하기 전에) 업데이트됩니다. 이렇게하면 시간 업데이트로 인한 쓰기가 크게 줄어 듭니다.

relatime마운트 옵션은 기본 옵션 만들어진 이후 리눅스 커널 2.6.30을. 그것이 ls --time=atime당신이 기대하는 것을 나열하지 않는 이유입니다 .

솔루션 : 한 번에 엄격한 (레거시) 동작을 사용하려면strictatime마운트 옵션을사용하십시오(예 : in/etc/fstab).

참고 : 시간 업데이트를 완전히 비활성화하려면을 사용할 수 있습니다 noatime.


도움이되었습니다. 감사합니다. 시스템 속도가 얼마나 느려 strictatime집니까?
xralf

atime uptades는 상당히 비용이 많이 듭니다 (파일 내용에 액세스 할 때마다 inode를 업데이트하기위한 하나의 예약 된 디스크 액세스). 특히 작은 파일이 많이 포함 된 경우 시간 업데이트로 인해 디스크로드가 두 배가 될 수 있습니다. 대부분의 경우 액세스 시간에 의존하는 프로그램은 atime> mtime 인지 여부 만 확인하려고합니다 . 따라서 새로운 기본 옵션 relatime은 해당 프로그램과의 호환성을 유지합니다. 실제로 여전히이 프로그램에 의존하는 프로그램은 거의 없으며 사용하는 것이 안전합니다 noatime.
Stéphane Gimenez

나는 같은 strictatime기능 오늘 그것을 시도로,하지만 속도가 느린 시스템을 만들 경우, 내가 설정하고 싶은 strictatime것이 가능할 것이다 경우, 특정 디렉토리에.
xralf

1
실제로 디스크로드가 높은 서버에서는 최대 1 % 또는 2 % 느리게, 최대 5 % 느려질 수 있습니다. 실제로 성능에 관심이 있다면 strictatime이 디렉토리를 마운트 지점으로 사용하는 전용 fs를 사용하여 특정 디렉토리로 시간 업데이트를 제한 할 수 있습니다.
Stéphane Gimenez

2

당신은 (을 찾아 액세스 시간의 일부 파일 시스템에 대한 기록을 해제 할 수 있습니다 noatime에서 /etc/fstab). 이를 테스트하기 위해을 시도한 touch -a file; ls -l --time=atime file다음 touch -a file; ls -l --time=atime file변경 여부 를 반복 하십시오.

ls동작에 의해 설명 man ls: ls -l --time=atime쇼 날짜 / 시간 열에서 시간을 액세스 할 수 있습니다. 이 키를 기준으로 정렬하려면 사용해야 --sort=time합니다.

"시간이 변경되지 않음"으로 표시되면 파일 시스템에 대해 시간이 비활성화되어 /etc/fstab있거나 (참조 ) 액세스 시간이 수정 시간과 매우 같기 때문에 (즉, 매우 일반적인) 동일한 결과를 나타냅니다.

참고 목록 파일 것은 않습니다 하지 의 액세스 시간을 변경 - 파일을 액세스하지 않습니다 lsinode 캐시 .


입력 ls -l --time=atime한 시간이 변경되지 않고 (시간이있는 열이 시간이라고 가정) 정렬 순서가 변경되지 않으면 마지막 시간이있는 파일은 목록의 시작 또는 끝에 있어야합니다 (마지막으로 액세스 한 경우) ).
xralf

@xralf 당신은 반복 했 모두 touchls? 더 명확하게 답변을 편집했습니다.
rozcietrzewiacz

touch file.txt를 입력하면 액세스 시간이 변경되지만 vim file.txt를 입력하면 액세스 시간이 변경되지 않습니다.
xralf

1

이와 같이 테스트 할 때 --full-time플래그 를 추가하여 ls초와 서브 초를 볼 수있어 미세한 경계에 의해 제약을받지 않고 효과를 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.