「파일」이라고 부르지만 실제로는 「inode + 이름」의 조합입니다.
inode는 「파일의 메타데이터(크기·소유자·권한·수정시각·디스크 위치)」, 이름은 「inode를 가리키는 라벨」.
이 둘의 분리가 리눅스 파일시스템의 핵심.
ls -i로 inode 번호 확인.
ls -i file.txt — 파일의 inode 번호 표시.
같은 inode 번호 = 같은 파일.
하드 링크는 「같은 inode를 다른 이름으로 가리키는 것」.
심링크는 「자기만의 inode + 가리키는 경로 정보」.
rm은 「inode 참조 카운트 감소」.
파일을 삭제할 때 inode 자체가 즉시 사라지진 않음.
「이 inode를 가리키는 이름」이 0개가 되고 + 「열려 있는 프로세스」가 0개가 될 때 비로소 디스크 공간 회수.
그래서 「삭제했지만 디스크 공간이 안 늘어남」이 가능.
inode 수도 한정.
파일시스템 만들 때 inode 개수가 정해짐(보통 충분히 많음).
매우 많은 작은 파일 만드는 시스템에선 「디스크는 남았는데 inode가 다 차서 새 파일 생성 불가」 가능.
df -i로 inode 사용량 확인.
디렉토리도 파일.
디렉토리는 「(이름, inode 번호)의 매핑 테이블」을 담은 특수 파일.
그래서 「디렉토리 안의 파일 보기」가 「디렉토리 내용 읽기」 — 권한도 r(읽기) = 목록 보기, x(실행) = 안에 들어가기로 구분.
한 줄 요약
파일은 「inode(메타데이터 + 데이터 위치) + 이름」의 조합.
하드 링크 = 같은 inode 다른 이름.
rm은 참조 카운트 감소, 0이면 회수.
inode도 한정 자원, df -i로 확인.
더 알아볼 것
- stat 명령으로 inode 정보
- 디렉토리 권한 — r vs x
- ext4의 inode 구조