Linux에서 빈 파일이 0바이트를 차지하는 것이 어떻게 가능합니까?

Linux에서 빈 파일이 0바이트를 차지하는 것이 어떻게 가능합니까?

나도 물어봤어Windows용 형제 질문.


Linux에서(방금 테스트했습니다):

  • 빈 폴더의 크기는 이름에 관계없이 4KB로 제공됩니다.
  • 빈 파일의 크기는 0바이트로 주어진다.

그러나 파일과 폴더에는 이름이 있으므로 어딘가에 저장해야 합니다.

  • 대략 어디에 저장되어 있나요?
  • 이러한 데이터를 저장하는 데 사용할 수 있는 최대 메모리는 미리 정의된 숫자입니까, 아니면 디스크의 사용 가능한 공간에 따라 달라집니까?
  • 짧은 이름의 빈 파일은 더 큰 이름의 빈 파일보다 공간을 덜 차지합니까? (또는 이러한 이름이 저장되는 데이터 구조에는 각 파일에 대해 고정된 바이트 수가 있어서 나머지 바이트를 \0?로 채울 수도 있습니다.)
  • 짧은 이름의 빈 폴더는 더 큰 이름의 빈 폴더보다 공간을 덜 차지합니까?
  • 이라는 빈 폴더가 foobar이라는 빈 파일보다 더 적은 공간, 동일한 공간 또는 더 많은 공간을 차지 합니까 foobar?
  • 의 빈 파일은 /etc/empty.txt의 빈 파일보다 더 적은 공간, 동일한 공간 또는 더 많은 공간을 차지 합니까 /etc/long/nested/path/until/the/empty/file/is/reached/empty.txt?

답변1

파일 이름은 디렉터리에 저장됩니다. 디렉토리는 디렉토리 항목으로 구성되며 각 디렉토리 항목에는 파일 이름과 해당 파일의 inode 번호가 포함됩니다. inode에는 파일을 소유한 사용자 ID 및 그룹 ID, inode가 마지막으로 수정된 시간 등과 같은 다양한 메타데이터가 포함되어 있습니다. 파일 이름이 길수록 디렉토리에서 더 많은 공간을 차지합니다. 동일한 inode 번호를 참조하는 여러 디렉토리 항목(동일하거나 다른 디렉토리에)이 있을 수 있습니다. 동일한 inode를 가리키는 추가 디렉토리 항목이 생성되는 것을 하드 링크 생성이라고 합니다.

inode 테이블에는 고정된 수의 inode가 있으므로 많은 수의 inode를 생성하면 결국 inode 테이블의 공간이 부족해질 수 있습니다. ("df -i"를 통해 사용 중인 inode 수를 확인할 수 있습니다. 파일 시스템의 평균 inode 크기가 기본값보다 작을 것으로 예상하는 경우 많은 수의 inode로 파일 시스템을 생성할 수도 있습니다. )

디렉토리도 inode로 구성되며 다음을 제외하면 파일과 매우 유사하게 작동합니다. 첫째, "빈" 디렉토리에도 '.'에 대한 디렉토리 항목이 있습니다. (디렉터리 자체) 및 ".."(상위 디렉터리)이므로 "빈" 디렉터리라도 4K의 공간을 차지합니다. 둘째, 디렉토리에는 하드 링크가 없을 수 있습니다. 즉('.' 및 '..' 항목 무시) 디렉터리 inode를 참조하는 디렉터리 항목만 있을 수 있습니다. 이는 디렉터리가 일반화된 그래프가 아닌 트리를 형성한다는 것을 의미합니다.

답변2

ls 명령은 무엇보다도 파일 크기를 표시합니다.

  1. 파일이 디렉터리인 경우 표시되는 크기는 시스템에서 할당한 크기입니다.(4K 블록당: ext4 파일 시스템의 경우 4096비트) 0바이트가 있어도 마찬가지입니다.

  2. 파일이 일반 파일인 경우 표시되는 크기는 파일이 차지하는 크기가 아니라 해당 내용의 크기입니다.

일반 파일인지 디렉터리인지 파일이 차지하는 크기를 확인하려면 "du file_name" 명령을 사용하세요.

관련 정보