- 데이브 맥케이
@TheGurkha
- 월 19,2019,8:00EDT
할 때 사용하여 리눅스du
명령을 얻을 모두 실제 디스크 사용량 그리고 진정한 크기의 파일 또는 디렉토리에 있습니다. 왜 이러한 값이 동일하지 않은지 설명하겠습니다.
실제 디스크 사용법과 실제 크기
파일의 크기 그리고 공간을 차지하고 하드 드라이브에서 거의 동일합니다., 디스크 공간은 블록으로 할당됩니다. 파일이 블록보다 작 으면 파일 시스템에 사용할 부동산의 작은 단위가 없기 때문에 전체 블록이 여전히 할당됩니다.
지 않는 파일의 크기는 정확한 여러 블록의 공간을 사용 하드 드라이브에 항상 있어야 합 반올림하여 블록입니다. 예를 들어,파일이 두 블록보다 크지 만 세 블록보다 작 으면 파일을 저장하는 데 여전히 세 블록의 공간이 필요합니다.
파일 크기와 관련하여 두 가지 측정이 사용됩니다., 첫 번째는 파일을 구성하는 콘텐츠의 바이트 수 인 파일의 실제 크기입니다. 두 번째는 하드 디스크에있는 파일의 유효 크기입니다. 이것은 해당 파일을 저장하는 데 필요한 파일 시스템 블록 수입니다.
예제
간단한 예제를 살펴 보겠습니다., 리디렉션의 단일 캐릭터로 파일을 만드는 작은 파일:
echo "1" > geek.txt
이제 우리가 사용하여 긴 목록 형식,ls
을보고,파일이 길이:
ls -l geek.txt
의 길이는 숫자 값이 다음과 같이dave dave
항목은 두 바이트입니다. 파일에 한 문자 만 보냈을 때 왜 2 바이트입니까? 파일 내부에서 일어나는 일을 살펴 보겠습니다.,
우리가 사용하는hexdump
명령이 우리에게 정확한 바이트 계산할 수 있도록”을 참조하십시오”인쇄되지 않는 문자로 변수의 값입니다. 우리 또한 사용하는-C
(canonical)옵션을 강제로 출력을 표시 진수 값의 몸에서 출력뿐만 아니라,자신의 영숫자 문자 상응:
hexdump -C geek.txt
출력을 보여줍니다 우리는 것에서 시작 오프셋 00000000 파일에 있는 바이트를 포함 진수 값의 31,그리고 중 하나를 포함하는 진수 값의 0A., 출력의 오른쪽 부분은 가능한 한 이러한 값을 영숫자로 묘사합니다.
16 진수 값 31 은 숫자 하나를 나타내는 데 사용됩니다. 0a 의 16 진수 값은 영숫자 문자로 표시 할 수없는 줄 바꿈 문자를 나타내는 데 사용되므로 마침표(.)대신. 줄 바꿈 문자는echo
에 의해 추가됩니다. 기본적으로echo
는 터미널 창에 쓰는 데 필요한 텍스트를 표시 한 후 새 줄을 시작합니다.,
는ls
의 출력으로 집계되며 두 바이트의 파일 길이에 동의합니다.
관련 방법을 사용하여 ls 명령을 사용하는 파일과 디렉토리 목록 보기 리눅스에서
이제 우리가 사용하는du
명령을 보는 파일 크기:
du geek.txt
그것을 말한 크기입니다 네,하지만 네 개의 무엇인가?
블록이있다,그리고 블록
경du
보고서 파일 크기에서 블록,크기를 사용하여 여러 요소에 따라 달라집니다., 명령줄에서 사용해야 하는 블록 크기를 지정할 수 있습니다. du
가 특정 블록 크기를 사용하도록 강요하지 않으면 사용할 규칙을 결정하는 일련의 규칙을 따릅니다.
첫째로,그것을 검사는 다음과 같은 환경 변수를
- DU_BLOCK_SIZE
- BLOCK_SIZE
- 블록 크기
경우 어떤 이들의 존재,블록 크기가 설정,그리고du
중지 확인합니다. None 이 설정되지 않은 경우du
는 1,024 바이트의 블록 크기로 기본 설정됩니다., 그렇지 않으면POSIXLY_CORRECT
라는 환경 변수가 설정됩니다. 이 경우du
기본값은 512 바이트의 블록 크기입니다.
그래서,우리는 어떻게 찾을 수 있는 하나 이에 사용하는가? 각 환경 변수를 확인하여 해결할 수는 있지만 더 빠른 방법이 있습니다. 결과를 파일 시스템이 대신 사용하는 블록 크기와 비교해 보겠습니다.
파일 시스템이 사용하는 블록 크기를 찾으려면tune2fs
프로그램을 사용하겠습니다., 우리는 다음을 사용하는-l
(목록 수퍼)옵션이 파이프를 통해 출력grep
,그리고 다음의 인쇄 라인을 포함하는 단어는”Block.”
이 예제에서,우리는 볼 것에 파일 시스템에서 첫 번째 파티션의 첫 번째 하드 드라이브,sda1
,그리고 우리는 것을 사용할 필요가sudo
sudo tune2fs -l /dev/sda1 | grep Block
파일 시스템 블록 크기는 4096 바이트입니다. 면 우리는 나누는 것에 의해 그 결과 우리에서 얻은du
(네)보du
기본 블록 크기는 1024 바이트 단위이다., 우리는 이제 몇 가지 중요한 것을 알고 있습니다.
첫째,우리가 알고 있는 가장 작은 크기의 파일 시스템 부동산할 수 있는 헌신적인 저장하는 파일은 4096 바이트. 이것은 우리의 작은 2 바이트 파일조차도 4kb 의 하드 드라이브 공간을 차지하고 있음을 의미합니다.
두 번째 일을 염두에 전념하는 응용 프로그램에 대해 보고 하드 드라이브와 파일시스템과 같은 통계를du
,ls
,andtune2fs
,할 수 있는 다른 개념의 것”블록”이라는 단어의 뜻입니다., tune2fs
애플리케이션 보고서는 진정한 파일 시스템 블록 크기는 동안,ls
및du
구성할 수 있거나 사용하도록 강요하는 다른 블록 크기입니다. 그 블럭의 크기는 것이 아닙와 관련된 파일 시스템은 블럭의 크기;그들은 그냥”덩어리”그 명령들이 사용하는 출력된다.
마지막으로,이외의 다른 사용하여 다른 블록 크기,대한 답변에서du
및tune2fs
전하는 같은 의미입니다., tune2fs
결과는 하나의 블록 4096 바이트,그리고du
결과가 네 블록 1024 바이트 단위이다.
를 사용하여 du
없는 명령행 매개변수 또는 옵션,du
목 전체 디스크 공간은 현재 디렉토리와 모든 하위 디렉터리 사용하고 있습니다.
의 예를 살펴:
du
크기는 보고에서는 기본 블록 크기로 1024 바이트합니다. 전체 하위 디렉토리 트리가 횡단됩니다.,
를 사용하여 뒤에는 다른 디렉터리
하려면du
를 보고서에서 보다 다른 디렉터리는 현재 전달할 수 있습 경로를 디렉토리에서 명령 라인:
du ~/.cach/evolution/
를 사용하여 뒤에 특정 파일
하려면du
를 보고서에는 특정 파일의 경로를 전달하는 파일에서 명령 라인입니다., 를 전달할 수도 있습니다 쉘 패턴을 선택한 파일의 그룹,같은*.txt
du ~/.bash_aliases
보고에서 파일이 디렉토리에
을du
보고서에 대한 파일에 현재 디렉토리와 하위 디렉터리 를 사용하여-a
(모든 파일)옵션:
du -a
각 디렉토리에 대한 각 파일의 크기는 보고뿐만 아니라,총 각 디렉토리에 있습니다.,
디렉토리 트리 깊이 제한
디렉토리 트리를 특정 깊이로 나열하려면du
를 알 수 있습니다. 이렇게하려면-d
(최대 깊이)옵션을 사용하고 깊이 값을 매개 변수로 제공하십시오. 모든 하위 디렉토리가 스캔되어보고 된 합계를 계산하는 데 사용되지만 모두 나열되지는 않습니다. 을 설정 디렉토리 깊이의 수준을 사용하여 이 명령:
du -d 1
출력은 표의 전체 크기는 하위 디렉터리에서 현재 디렉토리와 하위디렉토리도 제공합해 각각의 하나입니다.,
하는 디렉토리 목록은,다음과 같은 명령을 사용합니다.
du -d 2
설정 블록 크기
사용할 수 있습니다block
옵션을 설정 블록 크기du
에 대한 현재의 작업입니다.,d 에 가장 적합한 블록 크기에 따라 사용하는 디스크 공간 디렉토리와 파일에 사용하는-h
(판독 가능)옵션:
du -h
시는 명백한 크기의 파일이 아닌 양의 하드 드라이브를 저장하는 데 사용되는 공간은 파일 사용하는--apparent-size
옵션:
du --apparent-size
결합할 수 있습니다 이것으로는-a
(모든)볼 수있는 옵션을 명백한 각 파일 크기:
du --apparent-size -a
각 파일에 나와 함께 그것의 명백한 크기입니다.,
만 표시 합계
하려면du
을 보고만에 대한 총 디렉토리를 사용하여-s
(요약)옵션을 선택합니다., 결합할 수도 있습니다 이는 다른 옵션과 함께,같은-h
(판독 가능)옵션:
du -h -s
여기에,우리는 그것을 사용하는--apparent-size
옵션:
du --apparent-size -s
표시를 수정 번
을 참조하거나 마지막으로 수정 날짜 및 시간,사용하는--time
옵션:
du --time -d 2
한 결과는?,
보이는 경우 이상한 결과는du
경우에 특히 상호 참조는 크기 출력에서 다른 명령에,그것은 일반적으로 다른 블록 크기는 다른 명령을 설정할 수 있다 또는 그는 그들이 기본입니다. 실제 파일 크기와이를 저장하는 데 필요한 디스크 공간의 차이 때문일 수도 있습니다.
필요하신 경우에는 경기 출력의 다른 명령어,실험과 함께--block
옵션에서du
.,
데이브 맥케이 첫 번째 사용되는 컴퓨터 구멍을 뚫은 종이 테이프로 유행이었다,그리고 그는 프로그래밍습니다. IT 업계에서 30 년이 넘은 후 그는 현재 전임 기술 기자입니다. 자신의 경력을하는 동안,그는 프리랜서로 일했 프로그래머,관리자의 국제적 소프트웨어 개발 팀,그것은 서비스 프로젝트 관리자를 가장 최근에,데이터 보호 책임자입니다. 데이브는 리눅스 전도자이자 오픈 소스 옹호자이다.전체 바이오 읽기”