나는 일부 출처(예:이것), 다음 내용:
- inode는 파일에 대한 정보를 저장하는 데이터 구조입니다.
- inode 번호는 inode를 가리킵니다.
- i-노드 번호와 해당 i-노드의 매핑 정보를 유지하는 별도의 i-노드 테이블이 있습니다.
- 파일이 생성되면 파일에 inode 번호와 파일 이름이 할당됩니다.
- 이름을 사용하여 파일에 액세스하면 내부적으로 이름이 먼저 해당 아이노드 번호에 매핑된 다음동인덱스 노드방문했습니다.
내가 이해하지 못하는 가장 중요한 것은 마지막 줄입니다. inode는 inode에 액세스하지만 inode는 파일과 독립적인 엔터티입니다. 그리고 주어진 설명은 inode가 어떤 방식으로든 파일과 연관되어 있다고 말하지 않고 단지 inode가 파일과 연관된 메타데이터를 포함하는 데이터 구조라는 것을 의미합니다. 그렇다면 파일에 어떻게 액세스합니까? inode가 파일을 호출하고 있습니까?
답변1
인덱스 노드예인식된 파일홀로인덱스 노드 번호로. 파일 이름은 파일 시스템의 메타데이터일 뿐입니다.추천파일로. 단일 파일/inode는 이를 참조하는 여러 파일 이름을 가질 수 있습니다.
$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 foo
첫 번째 열은 inode 번호입니다. 두 파일은 동일합니다. 권한 다음의 첫 번째 숫자는 링크 수입니다. 두 이름 모두 동일한 파일을 참조하므로 둘 다 링크 foo
수 는 2입니다.bar
$ rm foo
$ ls -li bar
28098391 -rw-r--r-- 1 xxxxxxx xxxxx 0 Jul 6 22:15 bar
rm foo
기본 파일에 대한 특정 링크만 제거됩니다. bar
여전히 참조됩니다(inode 번호는 변경되지 않았지만 링크 수는 이제 2가 아닌 1입니다). 또한 이는 파일의 "실제" 이름도 아니고 파일의 "실제" 이름 foo
도 아니며 bar
처음에 생성되었다는 사실이 파일 foo
을 특별하게 만들지는 않습니다. 파일은 실제로 삭제될 때까지 삭제되지 않습니다.모두링크가 제거됩니다(즉, 링크 수가 0으로 줄어들 때까지). 그렇더라도 파일이 실제로 삭제되지는 않습니다. 해당 inode에 할당된 블록은 파일 시스템 재사용이 가능한 것으로 표시됩니다.
답변2
다음은 일반 파일에 대한 간단한 설명입니다.
인간은 파일을 참조하기 위해 파일 이름을 사용합니다. 커널은 inode 번호라는 숫자를 사용하여 파일을 참조합니다. 디렉토리는 파일 이름과 inode 번호 간의 매핑입니다. inode에는 파일과 관련된 메타데이터와 파일의 첫 번째 데이터 블록에 대한 포인터가 포함되어 있습니다. 첫 번째 데이터 블록에는 두 번째 데이터 블록에 대한 포인터가 포함되며, 마지막 데이터 블록을 읽을 때까지 계속됩니다.