![du -sh /tmp의 출력은 /tmp의 모든 파일 및 디렉터리에 대한 du의 합계보다 훨씬 큽니다. 왜? [반복하다]](https://linux55.com/image/130998/du%20-sh%20%2Ftmp%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9D%80%20%2Ftmp%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%20%EB%B0%8F%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EB%8C%80%ED%95%9C%20du%EC%9D%98%20%ED%95%A9%EA%B3%84%EB%B3%B4%EB%8B%A4%20%ED%9B%A8%EC%94%AC%20%ED%81%BD%EB%8B%88%EB%8B%A4.%20%EC%99%9C%3F%20%5B%EB%B0%98%EB%B3%B5%ED%95%98%EB%8B%A4%5D.png)
시스템은 기본적으로 우분투인 리눅스 민트 18.3입니다.
sudo du --apparent-size -sb /tmp
생산하다476MB현재 내 시스템에 있습니다.
내가 실행 sudo du --apparent-size -sb /tmp/* /tmp/.??*
하고 그것을 모두 더하면 나는 얻는다.4MB.
(-b에는 --apparent-size가 포함되어 있다는 것을 알고 있습니다. 문제를 명확히 하고 싶었습니다.)
사실, 나는 게으르기 때문에 합계를 찾기 위해 다음을 실행했습니다.
sudo du --apparent-size -sb /tmp/* /tmp/.??* | cut -f 1 | paste -sd+ - | bc
왜 차이가 있나요? /tmp에 du가 찾지 못한 숨겨진 파일이 있습니까? 아니면 내 명령에 문제가 있습니까?
편집: .dirs 및 .files를 캡처하는 데 문제가 있지만 .??*
이 경우에는 .a, .b, .c 등의 파일이 없습니다.
답변1
이 상황을 재현하는 한 가지 방법은 많은 수의 빈 파일(가급적 긴 파일 이름 길이)을 생성하는 것입니다. 이렇게 하면 .
파일 이름이 저장된 디렉터리( )의 크기가 확장되지만 파일 크기는 확장되지 않습니다. 파일 이름이 저장되는 디렉터리의 크기와 관련됨 ), *
이러한 파일 이름이 저장되는 디렉터리 불일치):
% mkdir emptydir && cd emptydir
% du --apparent-size -sb .
6 .
% du --apparent-size -sb * | cut -f 1 | paste -sd+ - | bc
zsh: no matches found: *
% jot 100000 | while read n; do touch $n; done
% du --apparent-size -sb .
2359296 .
% du --apparent-size -sb * | cut -f 1 | paste -sd+ - | bc
0
따라서 여기서는 빈 디렉터리를 6에서 2359296으로 변경합니다. 반면 생성된 파일이 모두 비어 있기 때문에 총 glob 버전 수는 여전히 0입니다.