'ls -l'명령의 출력에서 ​​디렉토리의 크기는 무엇을 의미합니까?


답변:


45

디렉토리의 메타 정보 (예 :이 디렉토리에 속하는 파일 테이블)를 저장하는 데 사용되는 디스크 공간의 크기입니다. 즉, 1024이면 디스크의 1024 바이트가이 목적으로 사용됩니다 (항상 전체 블록을 할당 함).


3
디렉토리 파일의 수천을 포함하는 경우와, 디렉토리의 크기 자체가 쉽게 10킬로바이트>이 될 수
글렌 잭맨

1
@txwikinger 디렉토리에는 실제 파일 이름이 아닌 inode 목록이 포함되어 있다고 생각합니다.
Ярослав Рахматуллин

6
@ ЯрославРахматуллин 디렉토리 항목 은 inode 번호와 파일 이름으로 구성됩니다.
200_success

2
따라서 디렉토리의 "크기"는 파일 크기가 아닌 내부 파일 수와 관련이 있습니까?
Lee

1
@Lee : 그렇습니다.
고양이

14

로 인쇄 된 "디렉토리의 크기" ls -lstat()호출에서 보고 한 값입니다 (파일 형식과 동일) statbuf.st_size.

이것이 st_size디렉토리에 의미하는 것은 파일 시스템 유형에 따라 다릅니다. 파일 시스템 유형을 알고 그 개념을 이해하지 않으면의 값에서 아무것도 추론 할 수 없습니다 st_size.

  • 현재 일반적으로 이름이 지정된 역사적인 UNIX 파일 시스템 v7-fs에서 디렉토리에는 16 비트 inode 번호와 14 바이트의 파일 이름이 포함 된 16 바이트 항목이 반복되었습니다. 디렉토리의 "크기"는 read(2)작업과 관련하여 의미가 있었고 항상있는 그대로 커지거나 유지되었습니다. ...항목은 수동으로 현재 수준 위의 디렉토리에 그들을 하드 연결하여 만들어집니다. 제정신 빈 처녀 디렉토리의 링크 수는 2입니다.

  • 1989 년 이후 (SVr4)가 호출 된 BSD-4.2 파일 시스템 ufs에서 디렉토리는 안정적으로 부여되지 않은 형식을 사용하는 일련의 가변 길이 레코드이므로 사용자 공간 명령은이 형식을 읽을 수 없습니다. 보고 된 "size"는 v7-fs에서와 같이 바이트 단위의 크기이며, 크기는 보통 그대로 커지거나 유지되지만, 일부 상황에서는 최신 버전의 파일 시스템에서 크기가 줄어들 수 있지만 항상 그렇지는 않습니다. 빈 디렉토리에 대해보고 된 링크 수는와 같이 2입니다 v7-fs.

  • 에서 WOFS1988 년 여름에서 1991 년 5 월 사이에 설계 및 구현 한 파일 시스템에서 디렉토리는 항상 "size"0을보고하며 read(2)호출을 통해 읽을 수있는 컨텐츠 유형은 절대로 없습니다 . 이것은 WOFS최초 쓰기-쓰기 (Write-on-Write) 파일 시스템이고 WOFS파일에서 디렉토리를보고하지 않고 파일을보고 하기 때문입니다 . 을 WOFS사용하여 디렉토리를 읽으면 readdir()의도 한 항목에 대한 데이터 만 얻을 수 있지만 .and는 사용할 수 없습니다 ... 비어있는 디렉토리의 링크 수 WOFS는 1이며 전체 동작은 POSIX와 완벽하게 호환됩니다.

  • 에서 ZFS, 그것은 WOFS신문 을 읽은 후에 구현되었습니다 . ZFScopy-on-write 파일 시스템이며 작성자는에서 개념을 복사 한 것을 거부하지 않습니다 WOFS. ZFS의 디렉토리는 number of directory entriesin을 st_size보고하므로보고 된 "크기"는 디렉토리 데이터에서 차지하는 디스크 공간과 관련하여 실제로 의미가 없습니다. 아무 없습니다 ...항목은 ZFS 디렉토리에,하지만 당신은 호출하는 경우 readdir(),이 항목은 위조와 처음 두 작업에 반환됩니다. ZFS는 목록에서 디렉토리를 하드 링크하는 것을 지원하지 않는 유일한 FS이지만 디렉토리에 대해보고 된 링크 수는 항상 2입니다.

  • ZFS와 마찬가지로 WAFL은의 모든 아이디어를 복사하지만 일부 아이디어는 복사하지 않습니다 WOFS. Netapp WAFLWOFS논문이 출판 된 지 3 년이 지난 후 WAFL은 기록 중 복사이지만 WAFL은 디렉토리에 내용이 있다고 가정 할 때 "실제 디렉토리 크기"일 수있는 "크기"값을보고하는 것 같습니다.


13

디렉토리는 자신과 그 내용에 대한 메타 데이터를 위해 4096 바이트 (최소)를 예약합니다.

또한 ext2 / ext3 / ext4 파일 시스템의 기본 할당 단위 (블록)는 4096 바이트이므로 디렉토리는 더 작을 수 없습니다.

다른 파일 시스템에서는 기본 크기가 다른 디렉토리, 즉 파일 시스템의 기본 블록 크기로 인해 디렉토리를 찾을 수 있습니다.

디렉토리 크기는 채워질 때 동적으로 커질 수 있지만 일단 채워지면 메타 데이터 용으로 예약 된 공간을 디렉토리를 제거하지 않고 다시 할당 할 수 없습니다.


1
어떤 메타 데이터를 언급하고 있습니까?
Stéphane Chazelas

1
세부 사항은 파일 시스템에 따라 다르지만 일반적으로 파일 이름, inode 번호, 파일 유형 (파일, dir, fifo, 소켓, 장치 노드, symlink 등), 소유자, 그룹, 권한, 속성, ACL, symlink 대상과 같은 메타 데이터를 포함합니다.
cas

6
@CraigSanders, 디렉토리에는 오브젝트 이름과 해당하는 inode 번호 있습니다. inode에는 객체 유형, 소유자 / 그룹, 권한, ACL 및 확장 속성이 유지되는 위치에 대한 참조 등이 포함됩니다.
vonbrand

내 UFS는 디렉토리 당 자체 메타 데이터를 위해 512 바이트 만 예약합니다.
FUZxxl

4

디렉토리는 전화 디렉토리와 같은 디렉토리입니다. 숫자 목록과 그 옆에 이름이있는 파일 일뿐입니다. 각 번호는 파일 시스템의 파일 (아이 노드 번호)을 참조하며 이름은 파일 이름입니다.

해당 데이터를 저장하려면 디스크 공간이 필요하며, 데이터가 할당 및 증가하는 방식과 파일 시스템에 따라 줄어 듭니다.


유지되는 메타 데이터의 실제 세부 사항과 크기 증가에 대한 블록 할당 고려 사항을 포함 할 수 있습니다. 그것은 이미 주어진 좋은 우화로 더 정확한 답을 완성시킬 것입니다. :)
n611x007

3
@naxa는 파일 시스템에 따라 다르며 심지어 ext4와 같은 파일 시스템 내에서도 사용 가능한 옵션에 따라 다릅니다. 따라서 파일 시스템에 따라 다릅니다. 이 질문과 관련이 있습니다.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.