Linux에서 파일 또는 디렉토리의 크기를 얻는 방법

0
1243
우분투 스타일 랩톱의 Linux 터미널 창.
Fatmawati Achmad Zaenuri / 셔터 스톡

리눅스를 사용할 때 du 명령을 사용하면 실제 디스크 사용량과 파일 또는 디렉토리의 실제 크기를 모두 얻을 수 있습니다. 이러한 값이 다른 이유를 설명하겠습니다.

실제 디스크 사용량 및 실제 크기

파일의 크기와 하드 드라이브에서 차지하는 공간은 거의 동일하지 않습니다. 디스크 공간은 블록 단위로 할당됩니다. 파일이 블록보다 작은 경우 파일 시스템에 사용할 부동산 단위가 더 작기 때문에 전체 블록이 계속 할당됩니다.

파일 크기가 블록의 정확한 배수가 아닌 한, 하드 드라이브에서 사용하는 공간은 항상 다음 전체 블록으로 반올림되어야합니다. 예를 들어, 파일이 두 블록보다 크지 만 세 개보다 작 으면 파일을 저장하는 데 여전히 세 개의 공간 블록이 필요합니다.

파일 크기와 관련하여 두 가지 측정이 사용됩니다. 첫 번째는 파일의 실제 크기이며 파일을 구성하는 내용의 바이트 수입니다. 두 번째는 하드 디스크에있는 파일의 유효 크기입니다. 해당 파일을 저장하는 데 필요한 파일 시스템 블록 수입니다.

간단한 예를 봅시다. 작은 파일을 만들기 위해 단일 문자를 파일로 리디렉션합니다.

echo "1" > geek.txt

터미널 창에서 "echo"1 "> geek.txt"명령

이제 긴 형식 목록을 사용하겠습니다. ls파일 길이를 확인하려면 :

ls -l geek.txt

터미널 창에서 "ls -l geek.txt"명령

길이는 다음에 오는 숫자 값입니다. dave dave 2 바이트 인 항목. 파일에 한 문자 만 보냈을 때 왜 2 바이트입니까? 파일 내부에서 무슨 일이 일어나고 있는지 살펴 보겠습니다.

우리는 hexdump 명령을 사용하면 정확한 바이트 수를 얻을 수 있고 인쇄 할 수없는 문자를 16 진수 값으로“볼”수 있습니다. 우리는 또한 -C (표준) 옵션을 사용하면 출력 본문에 16 진수 값과 영숫자 문자 등가를 강제로 표시 할 수 있습니다.

hexdump -C geek.txt

터미널 창에서 "hexdump -C geek.txt"명령

결과는 파일의 00000000 오프셋에서 시작하여 16 진수 값 31을 포함하는 바이트와 16 진수 값 0A를 포함하는 바이트가 있음을 보여줍니다. 출력의 오른쪽 부분은 이러한 값을 가능한 경우 영숫자로 표시합니다.

16 진수 값 31은 숫자 1을 나타내는 데 사용됩니다. 16 진수 값 0A는 영숫자 문자로 표시 할 수없는 줄 바꿈 문자를 나타내는 데 사용되므로 대신 마침표 (.)로 표시됩니다. 줄 바꿈 문자는 echo . 기본적으로, echo터미널 창에 쓰는 데 필요한 텍스트를 표시 한 후 새 줄을 시작합니다.

그 결과는 ls 그리고 2 바이트의 파일 길이에 동의합니다.

관련 : Linux에서 ls 명령을 사용하여 파일 및 디렉토리를 나열하는 방법

이제 우리는 du 파일 크기를 확인하는 명령 :

du geek.txt

터미널 창에서 "du geek.txt"명령

그것은 크기가 4라고 말하지만 4는 무엇입니까?

블록이 있고, 블록이 있습니다

언제 du 파일 크기를 블록 단위로보고하는 데 사용되는 크기는 몇 가지 요인에 따라 다릅니다. 명령 행에서 사용해야하는 블록 크기를 지정할 수 있습니다. 강요하지 않으면 du 특정 블록 크기를 사용하려면 사용할 규칙을 결정하기 위해 일련의 규칙을 따릅니다.

먼저 다음 환경 변수를 확인합니다.

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • 블록 크기

이 중 하나라도 존재하면 블록 크기가 설정되고 du 검사를 중지합니다. 아무것도 설정하지 않으면 du 기본값은 1,024 바이트의 블록 크기입니다. 즉, 환경 변수라는 POSIXLY_CORRECT 설정됩니다. 그런 경우라면 du 기본값은 512 바이트의 블록 크기입니다.

그렇다면 어느 것을 사용하고 있는지 어떻게 알 수 있습니까? 각 환경 변수를 확인하여 해결할 수 있지만 더 빠른 방법이 있습니다. 결과를 파일 시스템이 대신 사용하는 블록 크기와 비교해 봅시다.

파일 시스템이 사용하는 블록 크기를 알아보기 위해 tune2fs 프로그램. 그런 다음 -l (목록 슈퍼 블록) 옵션, 출력을 통해 파이프 grep그런 다음“Block”이라는 단어가 포함 된 줄을 인쇄하십시오.

이 예에서는 첫 번째 하드 드라이브의 첫 번째 파티션에서 파일 시스템을 살펴 보겠습니다. sda1을 사용해야합니다. sudo:

sudo tune2fs -l /dev/sda1 | grep Block

터미널 창에서 "sudo tune2fs -l / dev / sda1 | grep Block"명령

파일 시스템 블록 크기는 4,096 바이트입니다. 그 결과를 우리가 얻은 결과로 나누면 du (4)는 du 기본 블록 크기는 1,024 바이트입니다. 우리는 이제 몇 가지 중요한 것을 알고 있습니다.

첫째, 파일 저장에 사용할 수있는 최소 파일 시스템 영역은 4,096 바이트입니다. 이것은 작은 2 바이트 파일조차도 4KB의 하드 드라이브 공간을 차지한다는 것을 의미합니다.

두 번째로 명심해야 할 것은 하드 드라이브 및 파일 시스템 통계 (예 : du, ls, tune2fs'블록'의 의미에 대해 다른 개념을 가질 수 있습니다. 그만큼 tune2fs 응용 프로그램은 실제 파일 시스템 블록 크기를보고하면서 lsdu 다른 블록 크기를 사용하도록 구성하거나 강요 할 수 있습니다. 이러한 블록 크기는 파일 시스템 블록 크기와 관련이 없습니다. 그들은 그 명령들이 그들의 출력에서 ​​사용하는 “청크”일뿐입니다.

마지막으로, 다른 블록 크기를 사용하는 것 외에는 dutune2fs 같은 의미를 전달합니다. 그만큼 tune2fs 결과는 4,096 바이트의 한 블록이었고 du 결과는 1,024 바이트의 네 블록이었습니다.

사용 du

명령 행 매개 변수 또는 옵션이 없으면 du 현재 디렉토리와 모든 서브 디렉토리가 사용중인 총 디스크 공간을 나열합니다.

예를 살펴 보겠습니다.

du

터미널 창의 "du"명령

크기는 블록 당 1,024 바이트의 기본 블록 크기로보고됩니다. 전체 서브 디렉토리 트리가 순회됩니다.

사용 du 다른 디렉토리에

네가 원한다면 du 현재 디렉토리와 다른 디렉토리를보고하려면 명령 행에서 디렉토리 경로를 전달할 수 있습니다.

du ~/.cach/evolution/

터미널 창에서 "du ~ / .cach / evolution /"명령

사용 du 특정 파일에

네가 원한다면 du 특정 파일을보고하려면 명령 행에서 해당 파일의 경로를 전달하십시오. 쉘 패턴을 다음과 같은 파일 그룹을 선택하도록 전달할 수도 있습니다. *.txt:

du ~/.bash_aliases

터미널 창에서 "du ~ / .bash_aliases"명령

디렉토리의 파일에 대한보고

가지고 du 현재 디렉토리 및 서브 디렉토리의 파일에 대해보고하십시오. -a (모든 파일) 옵션 :

du -a

터미널 창에서 "du -a"명령

각 디렉토리에 대해 각 파일의 크기와 각 디렉토리의 총계가보고됩니다.

터미널 창의 "du -a"명령 출력

디렉토리 트리 깊이 제한

당신을 말할 수있다 du 디렉토리 트리를 특정 깊이로 나열합니다. 이렇게하려면 -d (최대 깊이) 옵션을 선택하고 깊이 값을 매개 변수로 제공하십시오. 모든 하위 디렉토리가 스캔되어보고 된 총계를 계산하는 데 사용되지만 모두 나열되지는 않습니다. 한 수준의 최대 디렉토리 깊이를 설정하려면 다음 명령을 사용하십시오.

du -d 1

터미널 창에서 "du -d 1"명령

출력은 현재 디렉토리에있는 해당 서브 디렉토리의 전체 크기를 나열하고 각 서브 디렉토리에 대한 총계도 제공합니다.

디렉토리를 한 레벨 깊게 나열하려면 다음 명령을 사용하십시오.

du -d 2

터미널 창에서 "du -d 2"명령

블록 크기 설정

당신은 사용할 수 있습니다 block 블록 크기를 설정하는 옵션 du 현재 작업 1 바이트의 블록 크기를 사용하려면 다음 명령을 사용하여 디렉토리 및 파일의 정확한 크기를 얻으십시오.

du --block=1

터미널 창에서 "du --block = 1"명령

1MB의 블록 크기를 사용하려는 경우 -m (MB) 옵션과 동일 --block=1M:

du -m

터미널 창에서 "du -m"명령

디렉토리와 파일이 사용하는 디스크 공간에 따라 가장 적합한 블록 크기로보고 된 크기를 원하면 -h (사람이 읽을 수있는) 옵션 :

du -h

터미널 창에서 "du -h"명령

파일을 저장하는 데 사용 된 하드 드라이브 공간이 아닌 파일의 크기를 확인하려면 --apparent-size 선택권:

du --apparent-size

터미널 창에서 "du --apparent-size"명령

이것과 -a 각 파일의 겉보기 크기를 보려면 (전체) 옵션 :

du --apparent-size -a

터미널 창에서 "du --apparent-size -a"명령

각 파일은 크기와 함께 나열됩니다.

터미널 창에서 "du --apparent-size -a"명령의 출력

총계 만 표시

네가 원한다면 du 디렉토리의 총계 만보고하려면 -s (요약) 옵션. 이것을 다른 옵션과 결합 할 수도 있습니다. -h (사람이 읽을 수있는) 옵션 :

du -h -s

터미널 창에서 "du -h -s"명령

여기서는 --apparent-size 선택권:

du --apparent-size -s

터미널 창에서 "du --apparent-size -s"명령

수정 시간 표시

작성 또는 마지막 수정 시간 및 날짜를 ​​보려면 --time 선택권:

du --time -d 2

터미널 창에서 "du --time -d 2"명령

이상한 결과?

이상한 결과가 보이면 du 특히 크기를 다른 명령의 출력과 상호 참조하는 경우 일반적으로 다른 명령을 설정할 수있는 블록 크기 나 기본 명령의 크기가 다르기 때문입니다. 실제 파일 크기와 파일을 저장하는 데 필요한 디스크 공간의 차이로 인해 발생할 수도 있습니다.

다른 명령의 출력과 일치해야하는 경우 --block 옵션 du.