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
응용 프로그램이 있지만, 실제 파일 시스템의 블록 크기를보고 ls
및 du
구성 또는 다른 블록 크기를 사용하도록 강제 할 수 있습니다. 이러한 블록 크기는 파일 시스템 블록 크기와 관련이 없습니다. 출력에 사용되는 명령은 단지 "덩어리"일뿐입니다.
마지막으로, 다른 블록 크기를 사용하는 것보다 다른로부터 응답 du
과 tune2fs
같은 의미를 전달. 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
.