읽기 작업 중에 사용된 버퍼/캐시의 변경 사항을 보려고 합니다.
free -m
truncate -s 10M /home/andy/Downloads/10_Mb_File.txt
cat 10_Mb_File.txt > /dev/null; free -m
#andy@7 ~/Downloads> Create_10_Mb_File.sh
#total used free shared buff/cache available
#Mem: 6894 1414 2529 24 2951 5162
#Swap: 0 0 0
#total used free shared buff/cache available
#Mem: 6894 1414 2518 24 2961 5161
#Swap: 0 0 0
10Mb를 읽는 동안 왜 그렇게 작은 변화가 있습니까?
이렇게 하면 실제 문자가 포함된 파일이 생성됩니다. 하지만 버퍼/캐시 사용량에는 변화가 없습니다.
</dev/urandom tr -dc A-Za-z0-9 | head -c1000000 > /home/andy/Downloads/random.txt
cat /home/andy/Downloads/random.txt > /dev/null; free -m
답변1
운영 체제는 사용자가 0바이트를 읽고 있음을 알고 있으므로 버퍼링이 필요하지 않습니다.
결코 기록되지 않았기 때문에 읽어보십시오. 통화 중에 물리적으로 일어나는 모든 일은 truncate
이제 파일 시스템에 "여기에 10MB의 0이 있습니다."라는 설명이 포함되어 있다는 것입니다. 이것이 희소 파일의 마법입니다!