ls와 du는 파일 크기에 대해 서로 다른 견해를 가지고 있으며 크기가 몇 배나 다릅니다.

ls와 du는 파일 크기에 대해 서로 다른 견해를 가지고 있으며 크기가 몇 배나 다릅니다.

왜 이런 결과가 나오는지 아시는 분 계신가요? 다음 두 명령의 파일 크기 차이에 유의하세요.

$ ls -lh gauss_landmarks_0000.npy 
-rw-rw-r-- 1 dparks dparks 1.1G Aug 16 12:43 gauss_landmarks_0000.npy

$ du -h gauss_landmarks_0000.npy 
20M     gauss_landmarks_0000.npy

이는 다음과 같은 시스템에서 발생합니다.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

내 Linux Mint 노트북의 결과는 예상대로입니다.

$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 18.3 Sylvia
Release:        18.3
Codename:       sylvia

답변1

스파스 파일일 수도 있습니다. 이는 모든 블록이 할당되지는 않으며 파일이 파일 크기가 제시하는 것보다 훨씬 적은 공간을 사용한다는 것을 의미합니다. 읽을 때 누락된 블록은 0으로 읽혀집니다.

또한 -s옵션을 사용하여 ls보고된 크기와 동일해야 하는 할당된 크기를 볼 수도 있습니다 du.

편집하다

파일에 0바이트가 많이 포함되어 있지만 희박하지 않다는 것을 알고 있거나 의심되는 경우 cp --sparse=always이를 사용하여 희박하게 만들어 잠재적으로 많은 디스크 공간을 절약할 수 있습니다.

cp --sparse=always -p file new_file

답변2

귀하의 경우 다른 답변에서 언급했듯이 실제로 스파스 파일로 인해 차이가 발생합니다.

전체 디렉토리와 관련된 또 다른 차이점은 다음과 같습니다.하드 링크. 기본적으로 du하드 링크는 여러 번 계산되지 않으므로 du표시된 것보다 훨씬 낮은 숫자가 보고 될 수 있습니다 ll -sh.

하드 링크가 포함되어 있는지 확인하려면 du -l하드 링크도 여러 번 계산하도록 실행하거나 를 실행할 수 있습니다 ll -i <DIR> | sort. 왼쪽 열에 inode ID가 표시되며 중복된 경우 파일 간의 하드 링크입니다.

관련 정보