"ls -lh"는 개별 크기의 합보다 작은 총 크기를보고합니다.


14

어떤 상황 ls -lh에서 개별 파일의 합계보다 작은 합계 가 표시됩니까? 예를 들면 다음과 같습니다.

$ ls -lh /var/lib/nova/instances/_base
total 100G
-rw-rw-r-- 1 nova         nova 4.3M 2012-02-14 14:07 00000001
-rw-rw-r-- 1 nova         nova 5.7M 2012-02-14 14:07 00000002
-rw-rw-r-- 1 nova         nova  42G 2012-03-08 15:24 1574bddb75c78a6fd2251d61e2993b5146201319.part
-rw-rw-r-- 1 libvirt-qemu kvm   24M 2012-02-14 14:07 77de68daecd823babbb58edb1c8e14d7106e83bb_sm
-rw-r--r-- 1 libvirt-qemu kvm   65G 2012-03-02 12:43 bd307a3ec329e10a2cff8fb87480823da114f8f4
-rw-rw-r-- 1 libvirt-qemu kvm  160G 2012-02-24 16:06 ephemeral_0_160_None
-rw-rw-r-- 1 libvirt-qemu kvm   80G 2012-02-24 22:38 ephemeral_0_80_None
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 22:37 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 11:09 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f_sm

편집 : 이제 주석에서 요청 당 몇 가지 추가 플래그가 표시됩니다.

$ ls -aiFlh  /var/lib/nova/instances/_base/
total 143G
29884440 drwxrwxr-x 2 nova         nova 4.0K 2012-03-08 15:45 ./
29884427 drwxr-xr-x 6 nova         nova 4.0K 2012-03-08 15:05 ../
29884444 -rw-rw-r-- 1 nova         nova 4.3M 2012-02-14 14:07 00000001
29884445 -rw-rw-r-- 1 nova         nova 5.7M 2012-02-14 14:07 00000002
29884468 -rw-r--r-- 1 nova         nova  65G 2012-03-08 15:59 1574bddb75c78a6fd2251d61e2993b5146201319.converted
29884466 -rw-rw-r-- 1 nova         nova  58G 2012-03-08 15:35 1574bddb75c78a6fd2251d61e2993b5146201319.part
29884446 -rw-rw-r-- 1 libvirt-qemu kvm   24M 2012-02-14 14:07 77de68daecd823babbb58edb1c8e14d7106e83bb_sm
29884467 -rw-r--r-- 1 libvirt-qemu kvm   65G 2012-03-02 12:43 bd307a3ec329e10a2cff8fb87480823da114f8f4
29884443 -rw-rw-r-- 1 libvirt-qemu kvm  160G 2012-02-24 16:06 ephemeral_0_160_None
29884442 -rw-rw-r-- 1 libvirt-qemu kvm   80G 2012-02-24 22:38 ephemeral_0_80_None
29884447 -rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 22:37 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
29884441 -rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 11:09 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f_sm

링크가 있는지 모르면 ls -aiFlh
bsd

@bdowning 추가 플래그를 추가했습니다. 디렉토리에 약간의 변화가 있었지만 문제는 여전히 존재합니다
Lorin

방법에 대해 du -h --total같은 디렉토리 하시나요?
bsd

답변:


20

스파 스 파일이 있으면 발생합니다.

$ mkdir test; cd test
$ truncate -s 1000000000 file-with-zeroes
$ ls -l
total 0
-rw-r--r-- 1 gim gim 1000000000 03-08 22:18 file-with-zeroes

스파 스 파일은 파일 시스템 블록으로 채워지지 않은 (또는 부분적으로 만) 파일입니다. 희소 파일의 채워지지 않은 영역을 읽으면 0을 얻습니다. 이러한 빈 영역에는 실제 디스크 공간이 필요하지 않으며보고 된 '총계' ls는 파일이 차지하는 디스크 공간에 해당합니다 (예 :) du.


3
kvm 디스크 이미지는 아마도 구멍으로 가득 차 있습니다 :-)
Stéphane Gimenez

로 coreutils 문서는 말한다 -s/의 --size이 일반적으로 좀 더 파일의 크기보다 파일이 사용하는 디스크 공간의 양입니다. 옵션 "이 파일 이름의 왼쪽에 각 파일의 디스크 할당을 인쇄, 하지만 수 파일에 구멍이 있으면 줄어 듭니다 . " -l물론 옵션도 크기를 인쇄합니다.
Francesco Turco

2

출력에 의해 주어진 있습니다 ls -ldu미묘하지만 중요한 차이가있다. 이 시도:

dd if=/dev/urandom of=aaa bs=1024 count=1

지금

ls -l aaa
-rw-r--r-- 1 abc abc 1024 2012-03-08 15:45 aaa

이므로

du -h aaa
4.0K    aaa

파일 시스템이 크기를 4096 (내 리눅스 상자에서) 청크로 할당하기 때문입니다. 이를 IO 블록이라고합니다. 다음을 통해이를 확인할 수 있습니다.

    stat aaa
  File: `aaa'
  Size: 1024        Blocks: 8          IO Block: 4096   regular file

또한 stat내 제안을 시도해 empty-file볼 수 있으며 파일 크기가 1G 인 것으로보고하더라도 블록 수는 0임을 알 수 있습니다.
Stéphane Gimenez

@ StéphaneGimenez 왜 블록을 8로보고합니까? 크기가 512 바이트 인 블록은 무엇입니까?
Ankur Agarwal

1
조금 이상합니다. 예전에는 IO 블록의 크기가 512 였지만 이제는 보통 4K입니다. stat모든 4K 블록 (실제 4K 블록의 8 배)을 저장하는 데 필요한 동등한 크기의 이전 크기 블록을보고합니다.
Stéphane Gimenez

1

허용 된 답변은 절대적으로 정확합니다. 겉보기 크기를 보려면 다음을 사용할 수 있습니다.

du --apparent-size

디스크 사용이 아닌 겉보기 크기를 인쇄합니다. 겉보기 크기는 일반적으로 더 작지만 ( '스파 스') 파일의 구멍, 내부 조각화, 간접 블록 등으로 인해 더 클 수 있습니다.

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