왜 이런 결과가 나오는지 아시는 분 계신가요? 다음 두 명령의 파일 크기 차이에 유의하세요.
$ 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가 표시되며 중복된 경우 파일 간의 하드 링크입니다.