각 명령이 다양한 결과를 제공하므로 파일 크기를 읽는 올바른 방법을 파악하는 데 어려움을 겪고 있습니다. 또한 http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html 의 게시물을 보았습니다 .
du는 파일 시스템에있는 파일의 크기를 제공합니다. (IE는 항상 1024로 나눌 수있는 결과를 줄 것입니다).
ls는 파일의 실제 크기를 알려줍니다.
당신이보고있는 것은 파일의 실제 크기와 디스크의 공간 크기의 차이입니다. (파일 시스템 효율성이라고도 함).
파일 시스템에 상주하는 것과 파일의 실제 크기의 차이점은 무엇입니까?
답변
데이터 파일이 파일 시스템이 추적 할 수있는 가장 작은 데이터 단위보다 작을 때 개별 비트 및 바이트 위에있는 각 추상화 계층은 공간을 낭비합니다. 섹터, 클러스터 또는 블록 내에서 낭비되는 공간을 일반적으로 여유 공간이라고하며 일반적으로 추가 데이터를 저장하는 데 사용할 수 없습니다. 개별 256 바이트 섹터의 경우 최대 낭비 공간은 255 바이트입니다. 64 킬로바이트 클러스터의 경우 최대 낭비 공간은 65,535 바이트입니다.
따라서 파일 시스템이 64KB 단위로 공간을 할당하고 3KB 파일을 저장하면 다음이 수행됩니다.
- 파일의 실제 크기 는 3KB입니다.
- 파일의 상주 크기 는 64KB입니다. 해당 장치의 나머지 61KB는 다른 파일에 할당 할 수 없으므로 손실됩니다.
참고 : 일부 파일 시스템은 블록 하위 할당 을 지원하므로 여러 개의 작은 파일 (또는 큰 파일의 꼬리 끝)을 동일한 블록에 할당하여이 문제를 완화 할 수 있습니다.
답변
여기서 다루지 않은 또 다른 옵션 인 스파 스 파일이 있습니다 . 이 경우, du
단순한보다 작은 크기를 표시합니다 ls -l
때문에 것을 ls
것으로 파일의 “크기”를보고 명백한 크기 (당신이 제로의 훨씬을 원한다면 당신이 읽을 수있는 바이트 수), 동안 du
의지 실제 사용중인 디스크 블록 수를 계속 사용하십시오.
재미있는 트릭 : 아주 큰 스파 스 파일을 많이 만든 다음 디스크 공간이 얼마나되는지 친구들에게 감명하십시오 ( “내 하드 드라이브에 eleventy-gazillion 1TB 파일을 저장하고 있습니다!”). 좋아, 아마도 그렇게 재미 있지 않을 수도 있습니다.
답변
파일 시스템은 블록으로 구성됩니다. 파일은 블록에 깔끔하게 맞지 않아도됩니다. 파일이 1024 바이트 인 경우 파일 크기는 ls이고 du는 1024입니다. 파일 크기가 1025 인 경우 크기는 ls는 1025, du는 2048입니다.
위의 예는 1024의 블록 크기를 가정합니다. 요즘에는 더 큰 블록 크기가 표준입니다.
ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred
du -h fred
8.0K fred
답변
여전히 다른 이유가 하나 더 있습니다. du -h는 다른 이름 (symlink와 반대되는 하드 링크)으로 동일한 파일을 볼 때 각 파일의 크기를보고하지만 크기를 공통 상위 디렉토리에 한 번만 추가합니다.