du -h와 ls -lh의 차이점은 무엇입니까?


31

각 명령이 다양한 결과를 제공하므로 파일 크기를 읽는 올바른 방법을 파악하는 데 어려움을 겪고 있습니다. 또한 http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html 의 게시물을 보았습니다 .

du는 파일 시스템에있는 파일의 크기를 제공합니다. (IE는 항상 1024로 나눌 수있는 결과를 줄 것입니다).

ls는 파일의 실제 크기를 알려줍니다.

당신이보고있는 것은 파일의 실제 크기와 디스크의 공간 크기의 차이입니다. (파일 시스템 효율성이라고도 함).

파일 시스템에 상주하는 것과 파일의 실제 크기의 차이점은 무엇입니까?

답변:


48

이것을 여유 공간 이라고 합니다 .

데이터 파일이 파일 시스템이 추적 할 수있는 가장 작은 데이터 단위보다 작을 때 개별 비트 및 바이트 위에있는 각 추상화 계층은 공간을 낭비합니다. 섹터, 클러스터 또는 블록 내에서 낭비되는 공간을 일반적으로 여유 공간이라고하며 일반적으로 추가 데이터를 저장하는 데 사용할 수 없습니다. 개별 256 바이트 섹터의 경우 최대 낭비 공간은 255 바이트입니다. 64 킬로바이트 클러스터의 경우 최대 낭비 공간은 65,535 바이트입니다.

따라서 파일 시스템이 64KB 단위로 공간을 할당하고 3KB 파일을 저장하면 다음이 수행됩니다.

  • 파일의 실제 크기 는 3KB입니다.
  • 파일의 상주 크기 는 64KB입니다. 해당 장치의 나머지 61KB는 다른 파일에 할당 할 수 없으므로 손실됩니다.

참고 : 일부 파일 시스템은 블록 하위 할당 을 지원하므로 여러 개의 작은 파일 (또는 큰 파일의 꼬리 끝)을 동일한 블록에 할당하여이 문제를 완화 할 수 있습니다.


1
그건 좋은 설명 중 하나입니다.
SpacemanSpiff

1
@ Handyman5-감사합니다 Handyman5. 그래서 ls를 사용하여 파일 또는 폴더의 크기를 볼 때 실제 크기를 반환하는 반면 du는 상주 크기를 반환합니까? 그 맞습니까? 따라서 파일 크기를 볼 때 가장 정확한 크기는 무엇입니까 (예 : 상주 크기 또는 파일 크기) 또는 임의의 질문입니까?
PeanutsMonkey

8
@PeanutsMonkey, 정확성은 보는 사람의 눈에 있습니다. ;-) 기본적으로, 네트워크를 통한 복사, zip 파일에 추가, 외부 드라이브에 백업 등과 같이 파일이 다른 곳에서 차지하는 공간이 걱정된다면 실제 크기는 무엇입니까? 당신은 걱정합니다. 파일이 현재있는 드라이브에 남은 공간이 걱정된다면 상주 자 크기에 신경을 씁니다. 때문에 du당신에게 보여주는 dISK의 u세이지, 현재 드라이브에 차지하는 공간을 찾고 있어요, 따라서 그것은 당신에게 상주 크기를 보여줍니다.
Handyman5

1
@ Handyman5-게시 후 거의 1 년이 지났지 만 사용할 때 위의 답변이 어떻게 다른지 궁금합니다 df -h.
PeanutsMonkey

1
df남은 블록 수 * 파일 시스템 블록 크기를보고합니다. 이 경우 du부분적으로 사용되는 블록조차 완전히 할당 된 것으로 간주 되므로 더 비슷 합니다. df기본적으로 statvfs를 번역 하므로 시스템 호출을보고 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다.
핸디맨 5

19

여기서 다루지 않은 또 다른 옵션 인 스파 스 파일이 있습니다 . 이 경우, du단순한보다 작은 크기를 표시합니다 ls -l때문에 것을 ls것으로 파일의 "크기"를보고 명백한 크기 (당신이 제로의 훨씬을 원한다면 당신이 읽을 수있는 바이트 수), 동안 du의지 실제 사용중인 디스크 블록 수를 계속 사용하십시오.

재미있는 트릭 : 아주 큰 스파 스 파일을 많이 만든 다음 디스크 공간이 얼마나되는지 친구들에게 감명하십시오 ( "내 하드 드라이브에 eleventy-gazillion 1TB 파일을 저장하고 있습니다!"). 좋아, 아마도 그렇게 재미 있지 않을 수도 있습니다.


6

파일 시스템은 블록으로 구성됩니다. 파일은 블록에 깔끔하게 맞지 않아도됩니다. 파일이 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

0

여전히 다른 이유가 하나 더 있습니다. du -h는 다른 이름 (symlink와 반대되는 하드 링크)으로 동일한 파일을 볼 때 각 파일의 크기를보고하지만 크기를 공통 상위 디렉토리에 한 번만 추가합니다.

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