을 얻는 방법은 크기의 파일 또는 디렉토리에서 리눅스

  • 데이브 맥케이

    @TheGurkha

  • 월 19,2019,8:00EDT
Fatmawati 세 Zaenuri/

할 때 사용하여 리눅스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애플리케이션 보고서는 진정한 파일 시스템 블록 크기는 동안,lsdu구성할 수 있거나 사용하도록 강요하는 다른 블록 크기입니다. 그 블럭의 크기는 것이 아닙와 관련된 파일 시스템은 블럭의 크기;그들은 그냥”덩어리”그 명령들이 사용하는 출력된다.

마지막으로,이외의 다른 사용하여 다른 블록 크기,대한 답변에서dutune2fs전하는 같은 의미입니다., 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 년이 넘은 후 그는 현재 전임 기술 기자입니다. 자신의 경력을하는 동안,그는 프리랜서로 일했 프로그래머,관리자의 국제적 소프트웨어 개발 팀,그것은 서비스 프로젝트 관리자를 가장 최근에,데이터 보호 책임자입니다. 데이브는 리눅스 전도자이자 오픈 소스 옹호자이다.전체 바이오 읽기”

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다