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

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

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

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

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

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

간단한 예를 살펴 보겠습니다. 작은 파일을 만들기 위해 단일 문자를 파일로 리디렉션합니다.

echo "1"> geek.txt

이제 긴 형식 목록을 사용  ls하여 파일 길이를 살펴 보겠습니다.

ls -l geek.txt

길이는 dave dave  항목 뒤에 오는 숫자 값 으로 2 바이트입니다. 파일에 한 문자 만 보냈는데 왜 2 바이트입니까? 파일 내에서 무슨 일이 일어나는지 살펴 보겠습니다.

hexdump정확한 바이트 수를 제공하고 인쇄되지 않는 문자를 16 진수 값으로 "볼"수 있는 명령을 사용 합니다. 또한 -C(canonical) 옵션을 사용하여 출력이 출력 본문에 16 진수 값과 이에 상응하는 영숫자 값을 표시하도록 강제 할 것입니다.

hexdump -C geek.txt

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

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

그것은 출력으로 집계되고  ls 2 바이트의 파일 길이와 일치합니다.

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

이제 du명령을 사용 하여 파일 크기를 살펴 보겠습니다.

du geek.txt

크기가 4 개라고되어 있는데 4 개는 무엇입니까?

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

du 파일 크기를 블록으로보고 할 때 사용하는 크기는 여러 요인에 따라 달라집니다. 명령 줄에서 사용해야하는 블록 크기를 지정할 수 있습니다. du특정 블록 크기를 강제 로 사용 하지 않으면 사용할 규칙을 결정하는 일련의 규칙을 따릅니다.

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

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • 블록 크기

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

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

파일 시스템이 사용하는 블록 크기를 알아 내기 위해 tune2fs프로그램을 사용할 것 입니다. 그런 다음 -l(list superblock) 옵션 을 사용 하고을 통해 출력을 파이프 grep한 다음 "Block"이라는 단어가 포함 된 행을 인쇄합니다.

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

sudo tune2fs -l / dev / sda1 | grep 블록

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

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

명심해야 할 두 번째 것은 같은 하드 드라이브 및 파일 시스템 통계를보고 전용 응용 프로그램입니다 du, ls그리고  tune2fs무엇을 "블록"수단의 서로 다른 개념을 가질 수 있습니다. tune2fs응용 프로그램이 있지만, 실제 파일 시스템의 블록 크기를보고  lsdu구성 또는 다른 블록 크기를 사용하도록 강제 할 수 있습니다. 이러한 블록 크기는 파일 시스템 블록 크기와 관련이 없습니다. 출력에 사용되는 명령은 단지 "덩어리"일뿐입니다.

마지막으로, 다른 블록 크기를 사용하는 것보다 다른로부터 응답 dutune2fs 같은 의미를 전달. tune2fs결과는 096 바이트의 하나 개의 블록이고, 상기 du결과는 024 바이트의 4 개 개의 블록이었다.

사용 du

명령 줄 매개 변수 나 옵션없이 du현재 디렉터리와 모든 하위 디렉터리가 사용중인 총 디스크 공간을 나열합니다.

예를 살펴 보겠습니다.

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

사용하여 du다른 디렉토리에

당신이 원하는 경우  du 현재 아닌 다른 디렉토리에 대해보고하려면 명령 줄에서 디렉토리 경로를 전달할 수 있습니다 :

du ~ / .cach / evolution /

사용하여 du특정 파일에

당신이 원하는 경우  du 특정 파일을보고, 명령 행에서 해당 파일의 경로를 전달합니다. 다음과 같이 선택한 파일 그룹에 셸 패턴을 전달할 수도 있습니다 *.txt.

du ~ / .bash_aliases

디렉토리의 파일보고

du현재 디렉터리 및 하위 디렉터리의 파일에 대한 보고서를 받으려면 -a(모든 파일) 옵션을 사용하십시오 .

du -a

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

디렉토리 트리 깊이 제한

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

du -d 1

출력에는 현재 디렉터리에있는 해당 하위 디렉터리의 전체 크기가 나열되고 각 하위 디렉터리에 대한 합계도 제공됩니다.

한 수준 더 깊은 디렉터리를 나열하려면 다음 명령을 사용하십시오.

du -d 2

블록 크기 설정

block옵션을 사용 du 하여 현재 작업 에 대한 블록 크기를 설정할 수 있습니다 . 1 바이트의 블록 크기를 사용하려면 다음 명령을 사용하여 디렉토리 및 파일의 정확한 크기를 가져옵니다.

du --block = 1

1MB의 블록 크기를 사용하려면 -m다음과 같은 (메가 바이트) 옵션을 사용할 수 있습니다 --block=1M.

du -m

디렉토리 및 파일에서 사용하는 디스크 공간에 따라 가장 적절한 블록 크기로 크기를보고하려면 -h(사람이 읽을 수있는) 옵션을 사용하십시오.

du -h

파일을 저장하는 데 사용 된 하드 드라이브 공간이 아닌 파일의 겉보기 크기를 보려면 다음 --apparent-size옵션을 사용하십시오 .

du-겉보기 크기

이것을 -a(all) 옵션 과 결합하여 각 파일의 겉보기 크기를 볼 수 있습니다.

du-겉보기 크기 -a

각 파일이 겉보기 크기와 함께 나열됩니다.

합계 만 표시

당신이 원하는 경우  du 디렉토리 만 전체를보고, 사용 -s(대한 요약) 옵션을 선택합니다. 이를 -h(사람이 읽을 수있는) 옵션 과 같은 다른 옵션과 결합 할 수도 있습니다.

du -h -s

여기에서는 --apparent-size옵션 과 함께 사용합니다 .

du-겉보기 크기 -s

수정 시간 표시

생성 또는 마지막 수정 시간 및 날짜를 ​​보려면 다음 --time옵션을 사용하십시오 .

du-시간 -d 2

이상한 결과?

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

당신이 다른 명령의 출력과 일치해야하는 경우 실험 --block에서 옵션 du.