거의 액세스하지 않는 몇 GB의 디렉토리가 있지만 액세스할 때 기다리지 않고 신속하게 그 안에 있는 파일을 읽을 수 있기를 원합니다. 이러한 파일은 거의 액세스되지 않으므로 파일 시스템 캐시에 없지만 액세스하기 전에 Linux에서 파일 시스템 캐시에 미리 로드하는 것이 좋습니다.
어떤 사람들은 처음 로드할 때까지 기다려야 하기 때문에 시간이 절약되지 않는다고 주장할 수도 있습니다. 제 특별한 사용 사례에서는 이 작업을 자동으로 수행할 수 있으므로 시스템 시간을 절약하는 문제는 아닙니다. , 이는 사용자 시간을 절약하는 문제입니다(파일이 캐시되면 기다릴 필요가 없기 때문입니다).
또한 tmpfs와 같은 것을 사용하지 않으면 파일 시스템 캐싱이 보장되지 않는다는 것을 알고 있습니다. 이는 OS 권장 사항이므로 괜찮습니다.
따라서 명백해 보이는 접근 방식은 다음과 같습니다.
tar -cf - /mydirectory > /dev/null
그러나 이렇게 하면 몇 기가바이트의 디렉터리에 대해서도 명령이 즉시 반환됩니다. bash는 출력이 /dev/null로 향하는 것을 발견하고 tar가 실제로 해당 디렉토리에서 읽지 않도록 전체 명령을 최적화하는 것 같습니다.
운영 체제에 디렉터리의 모든 파일을 읽도록 지시하는 간단한 명령은 무엇입니까?
답변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