다음을 수행하면:
touch /tmp/test
그런 다음 실행
ls -la /tmp/
test
파일을 볼 수 있어요0바이트디렉토리에.
하지만 운영 체제는 이 개념을 어떻게 처리합니까?0바이트. 평신도의 용어로 표현하면 다음과 같습니다.
0바이트는 메모리가 전혀 없음을 의미하므로 아무것도 생성되지 않습니다.
파일을 생성하고,~ 해야 하다또는~해야 한다최소한 일정량의 메모리가 필요합니다. 그렇죠?
답변1
파일은 (대략) 세 가지로 구분됩니다.
- "inode"는 파일의 소유자, 권한, 실제로 데이터가 포함된 디스크의 블록 목록을 추적하는 데 사용되는 메타데이터 구조입니다.
- 이 inode를 가리키는 하나 이상의 디렉토리 항목(파일 이름)
- 실제 데이터 블록 자체
빈 파일이 생성되면 inode와 해당 inode를 가리키는 디렉터리 항목만 생성됩니다. 희소 파일( )의 경우에도 마찬가지입니다 dd if=/dev/null of=sparse_file bs=10M seek=1
.
기존 파일에 대한 하드 링크를 생성할 때 동일한 inode를 가리키는 추가 디렉토리 항목을 생성하기만 하면 됩니다.
나는 여기서 일을 단순화하고 있지만 당신은 아이디어를 얻습니다.
답변2
touch
만들 것입니다인덱스 노드, ls -i
또는 stat
inode에 대한 정보를 표시합니다.
$ touch test
$ ls -i test
28971114 test
$ stat test
File: ‘test’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 28971114 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/1000) Gid: ( 1000/1000)
Access: 2017-03-28 17:38:07.221131925 +0200
Modify: 2017-03-28 17:38:07.221131925 +0200
Change: 2017-03-28 17:38:07.221131925 +0200
Birth: -
test
0 블록이 사용된다는 점에 유의하세요 . 표시된 데이터를 저장하기 위해 inode는 일부 바이트를 사용합니다. 이 바이트는 inode 테이블에 저장됩니다. ext2 페이지를 확인하세요.inode 구조 예.
답변3
ls
(또는 stat(2)
시스템 호출)은 다음의 크기를 알려줍니다.콘텐츠파일. 회계를 위해 파일 시스템에 필요한 공간의 양은 그것의 일부가 아니며 구현 세부 사항으로서 일반 프로그래밍의 일부가 아닙니다.~해야 한다배려하고 심지어 알고 있습니다. 구현 세부 사항을 표시하면 파일 시스템 추상화의 유용성이 떨어집니다.
답변4
간단한 대답: 그렇게 정의되어 있기 때문입니다.
더 긴 답변: 일부 작업이 개념적으로 더 간단하기 때문에 이렇게 정의됩니다.
- 파일에 "A" 20자가 포함되어 있고 "A"를 모두 삭제하면 파일이 20바이트 짧아집니다. "AAAAAAAAAAAAAAAAAAAAA"만 포함된 파일에 대해 동일한 작업을 수행하려면 파일이 사라지는 특수한 경우를 처리해야 합니다.
- 보다 실질적으로 텍스트 파일의 마지막 줄을 삭제하려면 특별한 처리가 필요합니다.
- 정기적으로 백업하는 텍스트 편집기에는 사용자가 마지막 줄을 삭제하고 점심 식사를 한 다음 돌아와서 다른 줄을 추가할 수 있는 상황을 처리하기 위한 특수 사례 코드가 필요합니다. 다른 사용자가 동시에 해당 이름으로 파일을 생성하면 더 복잡해집니다.
더 많은 작업을 수행할 수 있습니다. * 오류 로그 파일은 종종 빈 상태로 생성되고 오류가 발생한 경우에만 채워집니다. * 오류가 발생한 횟수를 확인하려면 로그 파일의 줄 수를 세어보세요. 로그 파일이 비어 있으면 오류 수가 0이므로 이는 매우 합리적입니다. * 때로는 파일 이름에 관련 텍스트가 모두 포함된 파일을 볼 수 있습니다. 예를 들어, this-is-the-logging-directory
이는 설치 후 열성적인 관리자가 빈 디렉터리를 삭제하는 것을 방지하고 프로그램이나 사용자가 실수로 프로그램이 나중에 보려는 디렉터리를 만드는 것을 방지합니다. 파일 오류. 프로그램 git
(및 기타 프로그램)은 빈 디렉토리를 무시하는 경향이 있으며, 프로젝트/관리자/사용자가 디렉토리가 존재한다는 것을 기록하려는 경우(아직 유용한 콘텐츠가 없더라도) empty
또는 이라는 빈 파일이 표시될 수 있습니다 empty.directory
.
어떤 작업도 더 복잡해지지 않습니다.
- 파일 연결: 이는 빈 파일에 대한 작업이 아닙니다.
- 파일에서 문자열 검색: "파일이 검색어보다 짧으면 검색어를 포함할 수 없습니다"라는 표준 사례가 이에 해당합니다.
- 파일에서 읽기: 프로그램은 예상되는 내용을 얻기 전에 파일 끝에 도달하는 것을 처리해야 하므로 길이가 0인 파일의 경우 프로그래머 측에서 추가로 생각할 필요가 없습니다. 파일 - 처음부터 파일을 시작합니다.
파일에 관한 한 "어딘가에 기록된 파일이 있습니다"라는 측면(inode 및/또는 파일 이름)이 위의 고려 사항보다 중요하지만 파일 시스템은 빈 파일이 쓸모 없는 경우 이를 수행하지 않습니다.
일반적으로 위의 모든 이유는 파일 이름과 관련된 이유를 제외한 시퀀스에 적용됩니다. 가장 주목할만한 것은 문자 시퀀스인 문자열입니다. 길이가 0인 문자열은 프로그램에서 일반적입니다. 문자열이 의미가 없으면 일반적으로 사용자 수준에서는 허용되지 않습니다. 파일 이름은 문자열이고 대부분의 파일 시스템은 내부적으로 빈 문자열을 파일 이름으로 허용하지 않습니다. 조각에서 파일 이름을 만들 때 프로그램은 빈 문자열을 파일 이름으로 처리합니다. 문자열을 조각 중 하나로 처리합니다.