거의 액세스하지 않는 몇 GB 디렉토리가 있지만 액세스할 때 기다리지 않고 신속하게 파일을 읽을 수 있기를 원합니다. 파일에 거의 액세스하지 않기 때문에 파일 시스템 캐시에 없지만 액세스하기 전에 Linux가 파일 시스템 캐시에 해당 파일을 미리 로드하도록 제안하고 싶습니다.
어떤 사람들은 처음 로드할 때까지 기다려야 하기 때문에 시간이 절약되지 않는다고 주장할 수도 있습니다. 제 특정 사용 사례에서는 이를 자동화할 수 있으므로 절약의 문제가 아니라고만 말하면 충분합니다. 시스템 시간의 경우 이는 사용자의 시간을 절약하는 문제입니다(파일이 캐시되면 기다릴 필요가 없으므로).
또한 tmpfs와 같은 것을 사용하지 않으면 파일 시스템 캐시가 보장되지 않으며 OS에 대한 제안이므로 괜찮습니다.
따라서 확실한 방법은 다음과 같습니다.
tar -cf - /mydirectory > /dev/null
그러나 이렇게 하면 몇 GB 디렉터리에 대해서도 명령이 즉시 반환됩니다. bash는 출력이 /dev/null로 향하고 전체 명령을 최적화하는 것을 보고 tar가 실제로 디렉토리에서 읽지 않는 것으로 보입니다.
OS가 디렉토리의 모든 파일을 읽도록 하는 간단한 명령은 무엇입니까?
답변1
이 최적화를 수행하는 것은 bash가 아니라 GNU tar입니다. 출력이 언제인지 인식 /dev/null
하고 파일의 내용을 읽지 않습니다.
출력이 다음과 같지 않도록 준비하십시오 /dev/null
.
tar -cf - /mydirectory > /dev/zero
또는 다음과 같은 다른 도구를 사용하십시오.
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null