
특정 사용자가 소유한 모든 파일의 전체 크기를 알아내려고 했습니다.
그렇게 시도하는 동안 다른 명령을 실행할 때 크기가 달라집니다.
특정 사용자가 소유한 모든 파일의 전체 크기를 알아내는 데 올바른 명령은 무엇입니까?
$ find . -type f -user silviya|ls -lh|head -1
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .
이 변화의 이유는 무엇입니까?
답변1
안에:
find . -type f -user silviya|ls -lh|head -1
find
의 출력을 파이핑하고 있지만 ls
입력 ls
을 읽지 않습니다. 인수로 나열할 파일 목록을 사용합니다. 여기에 같은 인수가 없으면 현재 디렉터리에 숨겨지지 않은 파일이 나열됩니다. 따라서 여기서는 현재 디렉터리에 있는 모든 유형의 숨겨진 파일(모든 유형)의 디스크 사용량을 얻을 수 있습니다(각 하드 링크에 대해 계산된 특정 파일의 크기 포함).
안에:
find . -type f -user agalya|wc -c
의 출력에서 바이트 수를 계산하므로 find
이는 디스크 사용량이나 파일 크기가 아닌 파일 경로(및 개행 구분 기호)의 크기입니다.
안에:
find . -type f -user agalya|du -sk
ls
와 마찬가지로 du
파일 목록을 입력이 아닌 인수로 사용합니다. 따라서 여기서는 현재 디렉터리에 있는 모든 파일과 디렉터리의 디스크 사용량을 (반복적으로) 얻습니다.
GNU 유틸리티를 사용하여 가 소유한 모든 일반 파일의 디스크 사용량을 얻으려면 agalya
다음을 수행합니다.
find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1
--files0-from
표준 입력(여기에 표시됨)에서 파일 목록을 가져오라고 지시합니다 du
(GNU 에만 해당) . 누적 크기를 제공합니다(동일한 파일의 하드 링크는 한 번만 계산됩니다).du
-
-c
파일을 얻으려면명백한디스크 사용량과 반대로 크기를 조정하려면 (다시 GNU에 따라) --apparent-size
옵션을 추가하세요. 하드 링크를 여러 번 계산하는 옵션(GNU 전용)을 du
추가하세요 .-l
답변2
명령 #1은 파일 내용의 "유용한" 바이트의 총 크기를 제공합니다.
명령 #3은 파일을 보관하기 위해 사용된 디스크 공간을 제공합니다. 디스크는 여러 파일에서 공유할 수 없는 블록(종종 4kB 길이)으로 나뉩니다. 따라서 1에서 4096B 사이의 모든 크기의 파일은 4kB의 디스크 공간을 사용합니다. 예: [이것은 단순화되었습니다. ext와 같은 일부 FS 유형에서는 데이터 블록을 전혀 사용하지 않고 매우 작은 파일을 파일 테이블 자체에 저장할 수 있습니다.]
명령 #2는 단지 문자 수를 계산합니다.파일 이름. (명령 출력의 크기 find
.)