🎮 File Descriptor
File Descriptor, FD: 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값
- 리눅스/유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념
- 일반적으로 0이 아닌 정수값을 가짐
동작 과정
- 프로세스가 실행 중에 파일을 열면 커널은 해당 프로세스의 file descriptor 숫자 중에 사용하지 않는 가장 작은 값을 할당해줌
- 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해 접근할 때, file descriptor 값을 이용해 파일을 지칭할 수 있음
기본적으로 할당되는 FD
- 0 - 표준 입력, standard input
- 1 - 표준 출력, standard output
- 2 - 표준 에러, standard error
File Descriptor 확인 방법
- 실행중인 프로세스 pid 확인
ps -ef | grep sshd
- PID로 해당 프로세스의 파일 디스크립터 정보 확인
sudo ls -trn /proc/[PID]/fd
🎮 File System
File System: 컴퓨터에서 파일/자료를 쉽게 찾을수 있도록 유지/관리하는 방법
메타영역과 데이터영역으로 나뉨
- 메타 영역: 파일 데이터의 데이터가 저장된 영역
- 데이터 영역: 실제 데이터가 기록된 영역
🎮 I-Node
리눅스에서 파일 시스템을 관리하기 위해 사용되는 개체의 일종으로 파일의 정보를 가짐
파일은 실제 파일의 데이터와 파일의 속성으로 구성
- 아이노드는 파일 속성을 가르키는 값
- 모든 파일은 각자 1개의 아이노드를 갖고 있음
- 아이노드가 가르키는 파일속성에는 다음과 같은 정보가 있음
- i-node number: 파일시스템 내에서 해당 파일을 식별하기 위한 고유식별자
- 파일 타입: 파일 유형 (예) 일반파일, 디렉토리, 장치파일 등
- 접근권한: 파일에 대한 접근권한
- link count: 해당 i-node를 참조하는 링크 개수
- 소유자
- 소유 그룹
- 파일 크기
- MAC Time: last modification time, last access time, last change time (속성 정보에 관해)
- block index: 데이터 블록에 저장되어 있는 파일내용에 대한 색인 정보
파일 처리 방식
- 파일이 생성되자마자 inode 번호가 부여됨
- inode 블록이 생성되어 상세정보 (meta data)가 기입됨
- 이를 기반으로 파일 접근
파일 접근 방식
cat
명령어로 대상 파일의 내용 출력
예) cat file.txt
- inode 블록에 접근하여 파일의 정보 읽음
- Direct block에 접근해 내부 데이터를 읽어옴
inode의 크기보다 큰 파일의 경우
- 그 파일을 수용하기 위해 inode는 또 다른 inode를 가르키게 됨 > indirect pointer
- 디스크의 inode의 개수는 한정적이기 때문에 파일이 많아지면 디스크 공간보다 inode가 먼저 부족해질 수 있음
- 이 경우에는 inode의 개수를 늘려 파일 시스템을 다시 구성해야 함
inode가 부족해지면:
- 모든 새로운 파일/폴더가 거부됨
- 사용 가능한 inode가 없으면: 데이터 손실, 애플리케이션 크래쉬, 운영체제 재시작 등 문제 발생
참고: